Шифрование root с помощью LUKS: корневой раздел не найден

Шифрование root с помощью LUKS: корневой раздел не найден

Структура моего единственного диска следующая: /dev/sda1 for the plaintext boot partition /dev/sda2 for the encrypted root partition

Моя система — ArchLinux, и я следовалэто руководстводля настройки корневого шифрования (без lvm, без raid). Вот что я сделал: запустил cryptsetupи /dev/sda2сопоставил его с/dev/mapper/cryptroot

Мой /etc/fstabвыглядит так: UUID=of /dev/mapper/cryptroot / ext4 rw,relatime,data=ordered,discard 0 1 UUID=of /dev/sda1 /boot ext4 rw,relatime,data=ordered,discard 0 2

В своем /etc/default/grubя изменил одну единственную строку, чтобы она выглядела так: GRUB_CMDLINE_LINUX="cryptdevice=UUID of /dev/sda2:cryptroot:allow-discards"

В /etc/mkinitcpio.confхуках это выглядит так: HOOKS="base udev autodetect modconf block encrypt filesystems keyboard fsck"

Наконец, я не забыл пробежать mkinitcpio -p linuxи grub-mkconfig -o /boot/grub/grub.cfgсоответственно.

Я перечислил свои действия в такой быстрой манере, потому что ранее мне удалось успешно настроить шифрование для моей корневой fs. Итак, в итоге я получаю следующую ошибку:

ERROR: device *UUID of /dev/mapper/cryptroot* not found. Skipping fsck. ERROR: unable to find root device *UUID of /dev/mapper/cryptroot* You are being dropped into recovery shell

Странно то, что он пытается искать незашифрованное /dev/mapper/cryptroot, но при этом не запрашивает у меня пароль (который я создал при cryptsetupзапуске /dev/sda2в самом начале). Поэтому, естественно, он не может найти незашифрованное блочное устройство, потому что оно изначально не запрашивало у меня свой пароль. Не могли бы вы подсказать, что я настроил неправильно?

решение1

Мне удалось успешно использовать cryptdevice=/dev/disk/by-uuid/<UUID_OF_LOGICAL_DEVICE>:cryptroot root=/dev/mapper/cryptrootдополнительные параметры ядра в GRUB.

Стоит отметить, что если вы делаете это без точности копирования и вставки UUID (например, в консоли/tty), вы могли опечататься. Вот однострочник, который тоже отстойно набирать с консоли, но может оказаться проще.

sed "s/\(GRUB_CMDLINE_LINUX=\"\)/\1cryptdevice=\/dev\/disk\/by-uuid\/$(blkid -o value -s UUID /dev/<LOGICAL_DEVICE>):cryptroot root=\/dev\/mapper\/cryptroot/" /etc/default/grub > ~/grub.defaults && mv ~/grub.defaults /etc/default/grub

решение2

У вас отсутствует /etc/crypttab, cpio-хуки указывают на раздел, о котором ОС не знает.

/etc/crypttab

%{UUID /dev/mapper/cryptroot} / ext4 rw,relatime,data=ordered,discard,luks - 0 1

затем перезапустите обновление grub

Связанный контент