Обновление initramfs-tools завершается ошибкой “E: /usr/share/initramfs-tools/hooks/growroot failed” при обновлении с Debian 11 (Bullseye) до 12 (Bookworm).

Вопрос или проблема

Я обновляю сервер Debian, работающий на DigitalOcean, с Bullseye до Bookworm, и не могу понять, как преодолеть эту ошибку, которая возникла во время apt upgrade --without-new-pkgs

Когда я пытался продолжить неудачное обновление, ошибка продолжала появляться:

Настройка initramfs-tools (0.142+deb12u1) ...
update-initramfs: откладывает обновление (триггер активирован)
Настройка linux-image-6.1.0-28-amd64 (6.1.119-1) ...
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Генерация /boot/initrd.img-6.1.0-28-amd64
E: /usr/share/initramfs-tools/hooks/growroot завершился с кодом возврата 1.
update-initramfs: не удалось завершить /boot/initrd.img-6.1.0-28-amd64 с 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools завершился с кодом возврата 1
dpkg: ошибка при обработке пакета linux-image-6.1.0-28-amd64 (--configure):
 скрипт пост-установки установленного пакета linux-image-6.1.0-28-amd64 завершился с кодом выхода 1
dpkg: проблемы с зависимостями не позволяют настроить linux-image-amd64:
 linux-image-amd64 зависит от linux-image-6.1.0-28-amd64 (= 6.1.119-1); тем не менее:
  Пакет linux-image-6.1.0-28-amd64 еще не настроен.

dpkg: ошибка при обработке пакета linux-image-amd64 (--configure):
 проблемы зависимостей - оставление неконфигурированным
Обработка триггеров для initramfs-tools (0.142+deb12u1) ...
update-initramfs: Генерация /boot/initrd.img-5.10.0-33-amd64
E: /usr/share/initramfs-tools/hooks/growroot завершился с кодом возврата 1.
update-initramfs: не удалось завершить /boot/initrd.img-5.10.0-33-amd64 с 1.
dpkg: ошибка при обработке пакета initramfs-tools (--configure):
 скрипт пост-установки установленного пакета initramfs-tools завершился с кодом выхода 1
При обработке возникли ошибки:
 linux-image-6.1.0-28-amd64
 linux-image-amd64
 initramfs-tools
root@anaximander1:~# df -h
Файловая система      Размер  Использовано Доступно Использование% Смонтировано на
udev            1.9G     0  1.9G   0% /dev
tmpfs           392M  864K  392M   1% /run
/dev/vda1       118G   82G   31G  74% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           392M  4.0K  392M   1% /run/user/0

Поскольку сбой происходит при growpart, я попытался проверить использование диска, но не вижу никаких проблем.

Файловая система      Размер  Использовано Доступно Использование% Смонтировано на
udev            1.9G     0  1.9G   0% /dev
tmpfs           392M  864K  392M   1% /run
/dev/vda1       118G   82G   31G  74% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           392M  4.0K  392M   1% /run/user/0

И я проверил fdisk

Диск /dev/vda: 120 GiB, 128849018880 байт, 251658240 секторов
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 66776602-A740-4B6D-8F30-6CC8AA66C962

Устройство     Начало       Конец   Сектора  Размер Тип
/dev/vda1   4096 251656191 251652096  120G Файловая система Linux
/dev/vda15  2048      4095      2048    1M Загрузка BIOS

Записи таблицы разделов не находятся в порядке по диску.

Как я могу решить эту ошибку?

Я нашел обходной путь, но будьте очень осторожны, чтобы ваша система НЕ нуждалась в growpart. Мой сервер DigitalOcean – это один раздел, в котором много свободного места. Поэтому я отключил хук growpart, завершил обновление, повторно включил его, и, похоже, все работает нормально.

# Отложите хук
mv /usr/share/initramfs-tools/hooks/growroot /root/growroot 

# Выполните update-initramfs
update-initramfs -u

# Продолжите обновление
dpkg --configure -a
apt upgrade --without-new-pkgs
apt full-upgrade

# Верните хук на его законное место
mv /root/growroot /usr/share/initramfs-tools/hooks/growroot

# Снова выполните update-initramfs, чтобы убедиться, что он все еще работает
update-initramfs -u

Я приветствую лучший ответ. Это, похоже, работало на моей системе, не вызывая никаких проблем, но это не кажется правильным ответом.

Ответ или решение

Ошибка при обновлении initramfs-tools, возникающая во время процесса обновления с Debian 11 (Bullseye) до Debian 12 (Bookworm), может быть вызвана неработоспособной hook-сценарией growroot. Эта проблема препятствует корректной конфигурации пакетов, связанных с ядром, и может быть вызвана рядом факторов, включая неправильную конфигурацию дискового пространства или проблемы совместимости.

Возможные причины ошибки

  1. Неисправность скрипта growroot: Скрипт hook /usr/share/initramfs-tools/hooks/growroot не смог выполнить своё назначение, что вызвало сбои в процессе генерации изображения initramfs. Это обычно связано с тем, что сценарий не может корректно определить доступное дисковое пространство или не может корректно изменить размер файловой системы.

  2. Проблемы с диском или разделами: Хотя в вашем случае визуально не наблюдается нехватки пространства на файловой системе, важно убедиться, что все разделы и диски настроены корректно и имеют соответствующие атрибуты.

  3. Зависимости пакетов: Неудовлетворённые зависимости между различными версиями пакетов могут привести к подобным проблемам, особенно если несколько пакетов требуют обновления одновременно.

Преодоление ошибки

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

Вот более детализированный и безопасный метод решения этой проблемы:

  1. Резервное копирование: Перед выполнением любых операций…

    cp /usr/share/initramfs-tools/hooks/growroot /root/growroot_backup
  2. Отключение скрипта: Переместите скрипт growroot для предотвращения его выполнения.

    mv /usr/share/initramfs-tools/hooks/growroot /root/growroot
  3. Обновление initramfs: Выполните обновление initramfs, чтобы исключить ошибки, связанные с отсутствием скрипта.

    update-initramfs -u
  4. Решение проблем с пакетами: Перезапустите процесс конфигурации пакетов.

    dpkg --configure -a
    apt upgrade --without-new-pkgs
    apt full-upgrade
  5. Возврат скрипта: В конце вы можете вернуть скрипт в исходное положение.

    mv /root/growroot /usr/share/initramfs-tools/hooks/growroot
  6. Финальное обновление initramfs: Завершите процесс, обновив initramfs еще раз.

    update-initramfs -u

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...