在openwrt中更改“passwd”时出错

时间:2017-01-23 10:16:23

标签: openwrt passwd

我使用ext4作为我的根文件系统。我正在使用OpenWRT Chaos Calmer。当我更改passwd时,有时会看到以下错误:

passwd+

这些事情有时只会发生。有什么办法解决这个问题?

每当我更改passwd时,它都会创建passwd +和passwd-文件。我强调passwd +文件被复制到passwd文件中,passwd-是一个备份文件。因此,当第一个错误发生时,此文件仍然存在。

请帮助解决这个问题。在此先感谢!!

[编辑]:我修复了只读文件系统问题,但仍然看到了问题。

重现的步骤:

  1. 更改passwd(Passwd已成功更改)
  2. 观察/etc
  3. 中没有passwd+个文件
  4. 执行硬重启
  5. 观察到/etc
  6. 下存在passwd+
  7. 现在我无法更改它,除非我删除vfat(zImage and dtb)文件
  8. 只有通过硬重启才会发生这种情况,而不是通过软重启。

    我使用基于imx6dl的自定义主板和eMMC闪存,其中包含两个分区 - 一个etx4(rootfs)和其他ComboFeatureService

3 个答案:

答案 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;