LINUX.ORG.RU

История изменений

Исправление kostik87, (текущая версия) :

Как видите возникают ошибки вызванные недоступностью указанных файлов в /usr, а именно /usr/share/initramfs-tools/*. Теперь вам нужно разобраться эти файлы должны находиться в initramfs по пути /usr/share/initramfs-tools/* либо они должны находиться на системном /usr, который у вас, видимо, находится на отдельном томе LVM. Если второе, то как видите у вас в приведённом скриншоте видно как запускается проверка файловой системы на LVM томе /dev/mapper/vg1-usr, судя по названия можно предположить, что это и есть системный /usr.

Так вот, если всё же недоступные файлы должны быть именно на системном /usr, то нужно либо править init скрипт в initramfs, что бы он проверял файловые системы и монтировал их до того момента как будут нужны файлы в /usr/share/initramfs-tools/*, либо вам нужно скопировать эти файлы в корневую директорию, т.е. либо в загруженной системе монтируете куда-либо корневую ФС:

mkdir /tmp/root
mount -o bind / /tmp/root
теперь в /tmp/root у вас будет «прибиндена» только корневая ФС, далее создаёте в точке монтирования /usr поддиректории:
mkir -p /tmp/root/usr/share/initramfs-tools/scripts
и копируете туда с /usr файлы:
cp /usr/share/initramfs-tools/scripts/functions /tmp/root/usr/share/initramfs-tools/scripts/
cp /usr/share/initramfs-tools/hook-functions /tmp/root/usr/share/initramfs-tools/
ну и напоследок «отбиндите» корень:
umount /tmp/root

Ну, а теперь к вопросу почему возникла такая проблема. С некоторых пор udev и systemd являются одним проектом, разработчики systemd посчитали, что дескать нет смысла иметь отдельно /bin и /usr/bin, /sbin и /usr/sbin, /lib и /usr/lib и так далее и вообще неплохо бы сделать это всё символьными ссылками:

/bin -> /usr/bin
/sbin -> /usr/sbin
/lib -> /usr/lib
и как следствие отказаться от возможности выносить /usr на отдельную файловую систему. Далее они решили размещать библиотеки udev в /usr/lib, сам udev в /usr/sbin, в то время как ранее они располагались в /lib и /sbin, как следствие теперь можно сказать стандартом считается размещение /usr в корневой файловой системе, а не отдельно. И как следствие теперь нужно, что бы в initramfs был функционал предварительного монтирования /usr, вот вы, видимо, столкнулись с некорректной работой этого функционала.

Если файлы должны быть в initramfs, то распакуйте его, положите их туда и запакуйте заново.

Делается это через cpio, поищите на форуме среди моих комментариев, либо просто в google.

Но вы ещё раз проверьте где должны находиться указанные файлы. Ну и далее загрузка идёт или нет? Возможно, это лишь проблемы обновления системы со старого релиза на новый.

Удачи.

Исправление kostik87, :

Как видите возникают ошибки вызванные недоступностью указанных файлов в /usr, а именно /usr/share/initramfs-tools/*. Теперь вам нужно разобраться эти файлы должны находиться в initramfs по пути /usr/share/initramfs-tools/* либо они должны находиться на системном /usr, который у вас, видимо, находится на отдельном томе LVM. Если второе, то как видите у вас в приведённом скриншоте видно как запускается проверка файловой системы на LVM томе /dev/mapper/vg1-usr, судя по названия можно предположить, что это и есть системный /usr.

Так вот, если всё же недоступные файлы должны быть именно на системном /usr, то нужно либо править init скрипт в initramfs, что бы он проверял файловые системы и монтировал их до того момента как будут нужны файлы в /usr/share/initramfs-tools/*, либо вам нужно скопировать эти файлы в корневую директорию, т.е. либо в загруженной системе монтируете куда-либо корневую ФС:

mkdir /tmp/root
mount -o bind / /tmp/root
теперь в /tmp/root у вас будет «прибиндена» только корневая ФС, далее создаёте в точке монтирования /usr поддиректории:
mkir -p /tmp/root/usr/share/initramfs-tools/scripts
и копируете туда с /usr файлы:
cp /usr/share/initramfs-tools/scripts/functions /tmp/root/usr/share/initramfs-tools/scripts/
cp /usr/share/initramfs-tools/hook-functions /tmp/root/usr/share/initramfs-tools/
ну и напоследок «отбиндите» корень:
umount /tmp/root

Ну а теперь к вопросу почему возникла такая проблема. С некоторых пор udev и systemd являются одним проектом, разработчики systemd посчитали, что дескать нет смысла иметь отдельно /bin и /usr/bin, /sbin и /usr/sbin, /lib и /usr/lib и так далее и вообще неплохобы сделать это всё символьными ссылками:

/bin -> /usr/bin
/sbin -> /usr/sbin
/lib -> /usr/lib
и как следствие отказаться от возможности выносить /usr на отдельную файловую систему. Далее они решили размещать библиотеки udev в /usr/lib и сам udev в /usr/sbin, в то время как ранее они располагались в /lib и /sbin, как следствие теперь можно сказать стандартом считается размещение /usr в корневой файловой системе. И как следствие теперь нужно, что бы в initramfs был функционал предварительного монтирования /usr, вот вы, видимо, столкнулись с некорректной работой этого функционала.

Если файлы должны быть в initramfs, то распакуйте его, положите их туда и запакуйте заново.

Делается это через cpio, поищите на форуме среди моих комментариев, либо просто в google.

Но вы ещё раз проверьте где должны находиться указанные файлы. Ну и далее загрузка идёт или нет?

Удачи.

Исходная версия kostik87, :

Как видите возникают ошибки вызванные недоступностью указанных файлов в /usr, а именно /usr/share/initramfs-tools/*. Теперь вам нужно разобраться эти файлы должны находиться в initramfs по пути /usr/share/initramfs-tools/* либо они должны находиться на системном /usr, который у вас, видимо, находится на отдельном томе LVM. Если второе, то как видите у вас в приведённом скриншоте видно как запускается проверка файловой системы на LVM томе /dev/mapper/vg1-usr, судя по названия можно предположить, что это и есть системный /usr.

Так вот, если всё же недоступные файлы должны быть именно на системном /usr, то нужно либо править init скрипт в initramfs, что бы он проверял файловые системы и монтировал их до того момента как будут нужны файлы в /usr/share/initramfs-tools/*, либо вам нужно скопировать эти файлы в корневую директорию, т.е. либо в загруженной системе монтируете куда-либо корневую ФС:

mkdir /tmp/root
mount -o bind / /tmp/root
теперь в /tmp/root у вас будет «прибиндена» только корневая ФС, далее создаёте в точке монтирования /usr поддиректории:
mkir -p /tmp/root/usr/share/initramfs-tools/scripts
и копируете туда с /usr файлы:
cp /usr/share/initramfs-tools/scripts/functions /tmp/root/usr/share/initramfs-tools/scripts/
cp /usr/share/initramfs-tools/hook-functions /tmp/root/usr/share/initramfs-tools/

Ну а теперь к вопросу почему возникла такая проблема. С некоторых пор udev и systemd являются одним проектом, разработчики systemd посчитали, что дескать нет смысла иметь отдельно /bin и /usr/bin, /sbin и /usr/sbin, /lib и /usr/lib и так далее и вообще неплохобы сделать это всё символьными ссылками:

/bin -> /usr/bin
/sbin -> /usr/sbin
/lib -> /usr/lib
и как следствие отказаться от возможности выносить /usr на отдельную файловую систему. Далее они решили размещать библиотеки udev в /usr/lib и сам udev в /usr/sbin, в то время как ранее они располагались в /lib и /sbin, как следствие теперь можно сказать стандартом считается размещение /usr в корневой файловой системе. И как следствие теперь нужно, что бы в initramfs был функционал предварительного монтирования /usr, вот вы, видимо, столкнулись с некорректной работой этого функционала.

Если файлы должны быть в initramfs, то распакуйте его, положите их туда и запакуйте заново.

Делается это через cpio, поищите на форуме среди моих комментариев, либо просто в google.

Но вы ещё раз проверьте где должны находиться указанные файлы. Ну и далее загрузка идёт или нет?

Удачи.