Каждое выполнение имеет статус выхода. Как правило, ноль означает, что все в порядке, а не равное -нулю — это ошибка. Это значение не отображается естественным образом в стандартном выводе. Вы можете увидеть это значение, набрав echo $?
после каждой выполненной команды.
Например, если вы наберете:
mkdir test;echo $?
Если у вас есть права, вы создадите каталог, а затем увидите ноль.
но если написать mkdir testing/test;echo $?
Имея правильные разрешения, но не имея подкаталога «testing», вы увидите сообщение об ошибке, а затем «1».
Это очень важный инструмент в GNU/Linux, потому что команды могут быть взаимосвязаны. И (как пример )если вы используете двойной -амперсанд для соединения команд, вторая команда выполняется ТОЛЬКО если первая команда имеет нулевое значение на выходе. Существует множество способов соединения команд. Чтобы узнать больше, просто наберитеman bash
Ваш контейнер LUKS был создан с тем же размером, что и базовый раздел /dev/sda5
, но поскольку /dev/sda6
, который вы dd
в него ввели, был меньше этого, образ /dev/sda6
не полностью заполнил бы ваш /dev/mapper/myroot
. Простого resize2fs /dev/mapper/myroot
было бы достаточно, чтобы это исправить.
Вы много говорите о своих действиях, но очень мало о фактических симптомах:Что именно происходит, когда вы пытаетесь загрузиться с новым зашифрованным рутом? Каково фактическое сообщение об ошибке, если оно есть? Признает ли он существование вашего зашифрованного раздела,и запросить парольную фразу, или он не может определить ее по UUID? Или GRUB успешно загружает ядро и файлы initramfs, но тогда initramfs не удается смонтировать зашифрованную корневую файловую систему?
Похоже, вы используете собственную схему загрузки UEFI. Это нормально, но при этом может быть включена безопасная загрузка. Если это так, это будет ограничивать GRUB от загрузки любых других модулей GRUB из /boot/grub/x86_64-efi
после загрузки основного grubx64.efi
, поэтому все необходимые модули должны быть встроены в основной grubx64.efi
файл загрузчика.
При выполнении grub-install
обычно запускается grub-mkimage
, который может включать любые модули GRUB в grubx64.efi
создаваемую сборку. Обычно grub-install
будет включать только минимально необходимое количество модулей... то есть только те модули, которые были определены как необходимые на момент grub-install
выполнения . Таким образом, возможно, ваш GRUB дает сбой, потому что он не имеет встроенной поддержки шифрования, потому что корневая файловая система не была зашифрована при выполнении grub-install
.
Чтобы исправить это, у вас есть два варианта. Либо используйте grub-install
для повторной -установки GRUB, когда вы вошли в новую корневую файловую систему и у вас есть действующая запись /etc/crypttab
для нее... или, проще говоря, убедитесь, что у вас установлен пакет grub-efi-amd64-signed
, и замените существующий grubx64.efi
на вашем ESP (= вероятно/boot/efi/EFI/ubuntu/grubx64.efi
)на/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
:
cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/ubuntu/grubx64-backup.efi
cp /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed /boot/efi/EFI/ubuntu/grubx64.efi
Это предварительно -собранный загрузчик UEFI GRUB, подписанный как максимально приемлемый для безопасной загрузки, и он имеет все модули GRUB, встроенные в , поэтому он должен быть заметно больше, чем ваш существующий файл grubx64.efi
.
Даже если безопасная загрузка отключена, файл grubx64.efi.signed
должен работать нормально, :тот факт, что в него встроены все модули GRUB, по-прежнему полезен.
Но если ваш GRUB может успешно загрузить ваше ядро и файлы initramfs, проблема должна быть на этапе initramfs. Если в вашей Ubuntu доступен пакет cryptsetup-initramfs
,убедитесь, что он установлен. Затем, опять же, пока вы находитесь в новом зашифрованном корневом каталоге и у вас есть действующая запись /etc/crypttab
для него, запустите update-initramfs -u
, чтобы перестроить ваши initramfs. Запуск его внутри chroot должен позволить ему автоматически -определить, что корневая файловая система зашифрована, и включить необходимые инструменты и сценарии в файл initramfs.