Разбиение образа виртуального диска гостевой ОС Lubuntu KVM, которую я недавно установил, выглядит следующим образом:
# lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
loop0 squashfs
0 100% /rofs
... SNIP ...
sr0 iso9660 Ubuntu 19.10 amd64 2019-10-17-12-53-34-00 0 100% /cdrom
vda
└─vda1 crypto_LUKS xxxx-yyyy-zzzz
Другими словами, у него есть один зашифрованный системный раздел ( vda1
) и нет загрузочного раздела. (Примечание. Я загрузился в живой образ, чтобы проверить/изменить размер зашифрованного раздела, и был удивлен отсутствием загрузочного раздела.)
Вопрос:как система может загрузиться (ведь она загружается!), несмотря на отсутствие загрузочного раздела?
Уточняющие вопросы для лучшего понимания:
- Работает ли загрузка, поскольку KVM сам управляет расшифровкой?
- Или это будет работать и на хост-системе?
- Если бы это работало и в автономной установке, зачем мы вообще создаем (незашифрованный) загрузочный раздел, а не просто отдельный зашифрованный раздел, как здесь?
- Если KVM управляет расшифровкой, то что гарантирует, что KVM имеет правильную/совместимую версию
cryptsetup
, установленную, которая использовалась для создания зашифрованного устройства? Что делать, если версия не совпадает? - Если KVM управляет расшифровкой, то я предполагаю, что во время установки Lubuntu с полным шифрованием диска, install заметил, что он запущен в виртуальной машине, и решил, что создания одного зашифрованного раздела будет достаточно. Так ли это? И если так, почему он не спросил, хочу ли я "нормальную" установку с загрузочным разделом?
Замечание: действительно, gui для открытия зашифрованного диска при загрузке довольно спартанский. Это текстовый gui, где у меня естьодин единственныйпопытка ввести парольную фразу для открытия зашифрованного раздела без какой-либо обратной связи (звездочки, похоже, не показывают, по крайней мере, сколько символов я ввел). Раньше я предполагал, что причина в том, что Lubuntu проще Ubuntu, но теперь я подозреваю (как написано выше), что KVM сам управляет расшифровкой.
решение1
Есть несколько возможностей:
Загрузочный раздел не требуется при использовании разбиения на разделы MBR/DOS, GRUB с поддержкой криптодиска и LUKS 1 (или LUKS 2 с парольной фразой PBKDF2). Будущие версии GRUB могут полностью поддерживать LUKS 2, но, насколько мне известно, пока это не совсем так (поддержка argon2i пока отсутствует).
kernel/initramfs может храниться снаружи и загружаться напрямую qemu/KVM, передавая соответствующие
-kernel -initrd
параметры qemu. В этом случае сам qemu выступает в качестве загрузчика, поэтому нет необходимости в загрузочном разделе внутри виртуальной машины.Образ ядра может существовать по определенному смещению устройства перед первым разделом - не разделом / файловой системой / файлом, а напрямую записанным как необработанные данные на устройство, и загрузчик знает, где его искать. Такой подход обычно наблюдается только на встроенных устройствах.
почему мы вообще создаем (незашифрованный) загрузочный раздел, а не просто отдельный зашифрованный раздел, как здесь?
Проблема в том, что загрузчик должен куда-то идти, в конце концов, и поэтому с разделением MBR/DOS большая часть этого ушла в неразмеченное пространство. Конечно, это может работать ... пока две разные вещи не попытаются разместить свои данные по одному и тому же смещению и не перезапишут друг друга, в любом случае.
Было решено, что лучше иметь для них правильные разделы. Так что с GPT вы получаете раздел EFI, и/или GRUB получает раздел bios_grub для своего образа ядра и так далее.
В идеале вы можете посмотреть на таблицу разделов и понять, как она устроена, а не чесать голову и спрашивать, как все вообще работает, потому что все это спрятано и зарыто где-то за пределами разбиения на разделы.