Ошибки при смене "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]: я исправил проблему файловой системы только для чтения, но все еще вижу проблему.
Действия по воспроизведению:
- Изменить пароль (пароль успешно изменен)
- Заметьте, что нет
passwd+
файл в/etc
- Сделать перезагрузку жесткого диска
- Заметил, что
passwd+
существует под/etc
- Теперь я не могу изменить его, пока не удалю
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
файловая система смонтирована на /
,
Одной из возможных причин является попытка установить изображение, превышающее размер вспышки. Или, возможно, перезагрузка после установки была прервана.