Ошибки при смене "passwd" в openwrt

Я использую ext4 в качестве корневой файловой системы. Я использую OpenWRT Chaos Calmer. Когда я изменяю пароль, я иногда вижу следующую ошибку:

root@US16SIQC:~# passwd 
Changing password for root
New password: 
Bad password: too short
Retype password: 

passwd: can't create '/etc/passwd+': File exists
passwd: can't update password file /etc/passwd

Эти вещи случаются только иногда. Что это за исправление?

Всякий раз, когда я меняю пароль, он создает файлы passwd + и passwd-. Я понимаю, что файл passwd + копируется в файл passwd, а passwd - это файл резервной копии. Поэтому, когда появилась первая ошибка, этот файл все еще существует.

Пожалуйста, помогите в этом. Заранее спасибо!!

[EDIT]: я исправил проблему файловой системы только для чтения, но все еще вижу проблему.

Действия по воспроизведению:

  1. Изменить пароль (пароль успешно изменен)
  2. Заметьте, что нет passwd+ файл в /etc
  3. Сделать перезагрузку жесткого диска
  4. Заметил, что passwd+ существует под /etc
  5. Теперь я не могу изменить его, пока не удалю passwd+ файл

Это происходит только при полной перезагрузке, а не при мягкой перезагрузке.

Я использую специализированную плату на базе imx6dl с флэш-памятью eMMC, содержащей два раздела - один vfat(zImage and dtb) и другие etx4(rootfs),

3 ответа

У меня такая же проблема. Я не смог установить пароль для пользователя root. Файл был только для чтения. Во время загрузки системы было несколько журналов ошибок монтирования. Проблема решена путем переустановки OpenWRT. Видимо, это была проблема файловой системы.

Я испытал такое же поведение в другой встроенной системе 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;

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 файловая система смонтирована на /,

Одной из возможных причин является попытка установить изображение, превышающее размер вспышки. Или, возможно, перезагрузка после установки была прервана.

Другие вопросы по тегам