我使用ext4作为我的根文件系统。我正在使用OpenWRT Chaos Calmer。当我更改passwd时,有时会看到以下错误:
passwd+
这些事情有时只会发生。有什么办法解决这个问题?
每当我更改passwd时,它都会创建passwd +和passwd-文件。我强调passwd +文件被复制到passwd文件中,passwd-是一个备份文件。因此,当第一个错误发生时,此文件仍然存在。
请帮助解决这个问题。在此先感谢!!
[编辑]:我修复了只读文件系统问题,但仍然看到了问题。
重现的步骤:
/etc
passwd+
个文件
/etc
passwd+
vfat(zImage and dtb)
文件只有通过硬重启才会发生这种情况,而不是通过软重启。
我使用基于imx6dl的自定义主板和eMMC闪存,其中包含两个分区 - 一个etx4(rootfs)
和其他ComboFeatureService
。
答案 0 :(得分:1)
我遇到了同样的问题。我无法为root设置密码。该文件是只读的。系统启动时有一些安装错误日志。通过重新安装OpenWRT解决了这个问题。显然,这是一个文件系统问题。
答案 1 :(得分:0)
未正确安装OpenWRT。
通常,当覆盖文件系统未正确初始化时会发生这种情况。
root@OpenWrt:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 320 232 88 73% /
/dev/root 2560 2560 0 100% /rom
tmpfs 14504 96 14408 1% /tmp
/dev/mtdblock3 320 232 88 73% /overlay
overlayfs:/overlay 320 232 88 73% /
tmpfs 512 0 512 0% /dev
如果您在df
提示符下运行root
,则应该会在overlays:/overlay
上看到/
个文件系统已挂载。
可能的原因之一是尝试安装比闪存更大的图像。或者,安装后重启可能会中断。
答案 2 :(得分:0)
我在不同的嵌入式Linux系统上遇到了相同的行为。我发现通过重置密码并立即重启电源,问题就会出现。
查看busybox的实现,我发现/etc/passwd+
文件是新更改的临时文件。使用新更改成功写入后,会将其移回/etc/passwd
所以/etc/passwd+
的存在表明先前的迭代以某种方式失败,要么在移动(或移除)之前有一个电源循环,要么是文件系统错误(在这方面会发生很多)在电源故障,完整文件系统,损坏的NAND闪存,过热等嵌入式系统上。)
如果文件已存在,busybox实现将出错:
来自libbb/update_passwd.c
123 /* Try to create "/etc/passwd+". Wait if it exists. */
124 i = 30;
125 do {
126 // FIXME: on last iteration try w/o O_EXCL but with O_TRUNC?
127 new_fd = open(fnamesfx, O_WRONLY|O_CREAT|O_EXCL, 0600);
128 if (new_fd >= 0) goto created;
129 if (errno != EEXIST) break;
130 usleep(100000); /* 0.1 sec */
131 } while (--i);
132 bb_perror_msg("can't create '%s'", fnamesfx);
133 goto close_old_fp;