Вопрос или проблема
Когда я загружаю систему, я получаю следующую ошибку:
/dev/root: Can't open blockdev
После принудительной перезагрузки я могу загрузиться, используя расширенные параметры загрузки:
С Linux 6.8.0-51-generic система не загружается.
С Linux 5.15.0-130-generic система загружается успешно.
Я пытался обновить и усовершенствовать, но проблема сохраняется.
(Примечание: Для отладки я добавил sed -ex в /usr/share/initramfs-tools/hooks/btrfs.)
root@x:~# apt-get upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
kpartx libsgutils2-1.46-2 sg3-utils
Use 'apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
Setting up initramfs-tools (0.142ubuntu25.4) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.142ubuntu25.4) ...
update-initramfs: Generating /boot/initrd.img-5.15.0-130-generic
+ PREREQ=
+ prereqs
+ echo
+ exit 0
+ PREREQ=
+ prereqs
+ echo
+ exit 0
+ PREREQ=
+ . /usr/share/initramfs-tools/hook-functions
+ [ -x /bin/btrfs ]
+ copy_exec /bin/btrfs /bin
+ local src target x nonoptlib ret
+ src=/bin/btrfs
+ target=/bin
+ copy_file binary /bin/btrfs /bin
+ local type src target link_target
+ type=binary
+ src=/bin/btrfs
+ target=/bin
+ [ -f /bin/btrfs ]
+ [ -d /var/tmp/mkinitramfs_SxPD4G//bin ]
+ target=/bin/btrfs
+ target=/usr/bin/btrfs
+ [ -e /var/tmp/mkinitramfs_SxPD4G//usr/bin/btrfs ]
+ mkdir -p /var/tmp/mkinitramfs_SxPD4G//usr/bin
+ [ -h /bin/btrfs ]
+ [ n = y ]
+ cp -pP /bin/btrfs /var/tmp/mkinitramfs_SxPD4G//usr/bin/btrfs
+ env --unset=LD_PRELOAD ldd /bin/btrfs
+ grep -P ^\t
+ sed -e
/\//!d;
/linux-gate/d;
/=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/};
s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/
+ echo /lib/libgcwrap.so
+ sed -e s#/lib/\([^/]*/\)\?\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\1\3#
+ nonoptlib=/lib/libgcwrap.so
+ echo /lib/libgcwrap.so
+ sed -e s#-linux-gnu/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#-linux-gnu/\2#
+ nonoptlib=/lib/libgcwrap.so
+ [ -e /lib/libgcwrap.so ]
+ copy_file binary /lib/libgcwrap.so
+ local type src target link_target
+ type=binary
+ src=/lib/libgcwrap.so
+ target=/lib/libgcwrap.so
+ [ -f /lib/libgcwrap.so ]
+ return 2
+ ret=2
+ [ 2 = 1 ]
+ return 1
E: /usr/share/initramfs-tools/hooks/btrfs failed with return 1.
update-initramfs: failed for /boot/initrd.img-5.15.0-130-generic with 1.
dpkg: error processing package initramfs-tools (--configure):
installed initramfs-tools package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
initramfs-tools
Примечание: Я также столкнулся с ошибкой в /usr/share/initramfs-tools/hooks/dhcpcd, которая завершилась с возвращаемым значением 1. Я решил это, переустановив initramfs-tools.
Заранее спасибо
Ответ или решение
Ошибка, возникающая при загрузке системы, связана с невозможностью выполнить сценарий из директории /usr/share/initramfs-tools/hooks/btrfs
, который завершается с кодом ошибки 1. Это может указывать на проблемы с генерацией образа initramfs, необходимого для загрузки ядра Linux 6.8.0-51, но не затрагивающего ядро 5.15.0-130, которое загружается успешно. Давайте подробнее рассмотрим возможные причины и решения данной проблемы.
Анализ проблемы
-
Неполная установка пакетов: Лог указывает на проблему с пакетом
initramfs-tools
, что может быть связано с неправильной или неполной установкой пакетов, необходимых для корректной работыbtrfs
. -
Неправильная обработка зависимостей: Скрипт
btrfs
не может скопировать библиотеку/lib/libgcwrap.so
, что приводит к ошибке. Это может быть результатом отсутствия данной библиотеки или неправильного конфигурирования путей и зависимостей. -
Версия ядра: Ошибка проявляется только при загрузке с ядром 6.8.0-51, что может указывать на несовместимость ядра с текущей конфигурацией или наличием багов в новой версии ядра.
Рекомендации по решению
1. Проверка и восстановление пакетов
Проверьте целостность всех связанных пакетов и переустановите необходимые для работы с Btrfs и initramfs компоненты:
sudo apt-get update
sudo apt-get install --reinstall initramfs-tools btrfs-progs
2. Ручное обновление initramfs
Попробуйте вручную обновить образ initramfs:
sudo update-initramfs -u -k 6.8.0-51-generic
Если вывод содержит ошибки, обратите внимание на сообщения и устраните их.
3. Поиск и установка отсутствующих библиотек
Протестируйте наличие файла /lib/libgcwrap.so
и если он отсутствует, попробуйте найти соответствующий пакет, содержащий данную библиотеку и установите его.
apt-cache search libgcwrap # поиск пакета
4. Проверка совместимости с ядром
Если проблема сохраняется, временно загрузитесь с предыдущей версией ядра (5.15.0-130) и проверьте обновление системы:
sudo apt-get dist-upgrade
Это может помочь обнаружить более свежие исправления или обновления, касающиеся проблем с ядром.
Вывод
Ключом к решению проблемы является последовательный анализ и устранение возможных причин ошибки btrfs
в рамках сценариев initramfs-tools
. Исправление ошибок в сценариях, обновление и воссоздание образа initramfs может обеспечить успешную загрузку последней версии ядра. Если все эти шаги не помогают, возможно стоит обновить систему до новой версии дистрибутива, если таковая доступна.