Вопрос или проблема
Я хотел бы установить Ubuntu 22.04 на ПК с NVMe SSD для операционной системы и традиционным жестким диском для /home, использующим полное шифрование диска.
Прежде чем я куплю оборудование, я пытался провести эксперименты с установкой Ubuntu 22.04 на виртуальной машине с двумя SATA дисками, чтобы эмулировать эту конфигурацию. Поскольку машина будет использоваться как настольный компьютер, я использовал установщик для настольных ПК.
Если я выбираю полное шифрование диска во время установки, установщик, похоже, хочет установить все на один диск, и у меня нет никакого контроля над разделением.
Если я выбираю расширенный режим, у меня появляются некоторые варианты ручного разделения, но мне не очевидно, как все должно быть настроено для шифрования. Ближайшая к рабочей конфигурация, которую я получил, была что-то вроде:
Диск | Раздел | Описание |
---|---|---|
/dev/sda (SSD) | /dev/sda1 | раздел lvm для шифрования, заполняющий весь диск |
/dev/mapper/sda1_crypt | раздел ext4, смонтированный в /, заполняющий весь раздел | |
/dev/sdb (HDD) | /dev/sdb1 | 1МБ раздел biosgrub |
/dev/sdb2 | 1ГБ раздел EFI | |
/dev/sdb3 | 1ГБ раздел ext4 /boot | |
/dev/sdb4 | раздел lvm для шифрования, занимающий оставшееся пространство на диске | |
/dev/mapper/sdb4_crypt | раздел ext4 для /home, занимающий весь зашифрованный раздел |
Я не смог выяснить, как добавить своп, который я также хотел бы зашифровать. На самом деле я не смог продолжить установку в этом случае, поскольку кнопка “Установить сейчас” была неактивна.
Я разместил разделы biosgrub, EFI и /boot на жестком диске, потому что BIOS на довольно старой системе, которую я собираюсь использовать, почти наверняка не сможет загрузиться с NVMe SSD. Это, очевидно, не проблема с виртуальной машиной, с которой я тестирую.
Возможна ли эта конфигурация или я прошу слишком много? На самом деле ситуация хуже, поскольку я действительно хотел бы использовать bcache и выделить часть SSD для кэширования раздела /home, но я не указал это в заголовке вопроса, так как подумал, что будет полезнее спросить об этом без добавления bcache в уравнение.
Будет ли лучше использовать установщик сервера? Будет ли проще позволить установщику для настольных ПК разместить все на одном диске, а затем попытаться исправить ситуацию позже?
Смотря на существующие вопросы:
- Я нашел Как установить Ubuntu с LVM и LUKS на SSD и использовать зашифрованный HDD для хранения данных на Dell Inspiron 7580, но это, похоже, относится к Ubuntu 19.04, и мне неясно, что совет все еще актуален.
- Как установить Ubuntu как с шифрованием диска, так и с кэшированием SSD выглядит как то, что мне нужно, но это из 2015 года, так что я не уверен, что это до сих пор актуально.
Любые советы будут очень полезны, даже если это просто “не делай этого!”. 🙂
Я разобрался, как это сделать, включая bcache. Пока я только пробовал это на виртуальной машине VirtualBox, но я предполагаю, что это будет работать аналогично на реальном оборудовании.
Согласно комментариям выше по моему первоначальному вопросу, это не разумная конфигурация. Я использовал подобную настройку (но без шифрования) в течение многих лет, и у меня все было нормально. Возможно, я просто не так требователен, или bcache справляется со своей задачей и ускоряет доступ к данным на /home за кулисами, не требуя от меня вручную решать, какие вещи помещать на маленький, быстрый /home на SSD, а какие – на большом, медленном разделе на жестком диске. В любом случае, я упрямый и хотел увидеть, смогу ли я это сделать, и, похоже, у меня это получилось – но, пожалуйста, учтите комментарии выше, прежде чем решать, как все это настраивать.
Я написал это, возможно, с чрезмерной подробностью, но я собирался сделать это в любом случае для своей собственной справки, так что решил разместить это здесь. Вам, вероятно, придется внести некоторые ручные изменения в названия дисков и размеры разделов, если вы решите следовать этому.
Основные приемы здесь таковы:
- Ручное разделение с командной строки, настройка незашифрованных разделов и разделов LUKS, затем LVM, затем bcache. Затем дайте стандартному установщику выполнить свою работу.
- Изменение получившейся установки, чтобы она могла правильно загружаться с зашифрованных разделов и распознавать разделы bcache.
Я собираюсь объяснить это в виде набора шагов, которые нужно следовать в VirtualBox, но это всего лишь пробный запуск перед попыткой на реальном оборудовании. Поскольку я буду использовать старое оборудование (CPU i5-2500K, материнская плата Intel DQ670W) с NVMe SSD на PCI-e карте, которую BIOS, вероятно, не сможет загрузить, я помещаю все разделы, связанные с загрузкой, на жесткий диск и использую его в качестве загрузочного диска. Вероятно, не было бы смысла делать это на более современном оборудовании или если вы действительно пытаетесь настроить это в VirtualBox “в реале”.
Эти инструкции включают поддержку bcache, но я предполагаю, что просто пропустив шаги, специфичные для bcache, вы успешно получите систему с полным шифрованием диска на двух дисках, просто без кэширования. Я это не проверял, однако.
-
Создайте новую виртуальную машину с (например) 4 ГБ ОЗУ
-
Создайте и прикрепите виртуальный жесткий диск под названием “HDD” размером (например) 64 ГБ к SATA порту 0
-
Создайте и прикрепите виртуальный жесткий диск под названием “SSD” размером (например) 32 ГБ к SATA порту 1
- Установите флажок “Твердотельный накопитель” просто для аккуратности, но это, вероятно, никоим образом не повлияет
-
Вставьте образ установщика Ubuntu 22.04 Desktop в оптический привод.
-
Запустите виртуальную машину и загрузитесь до экрана “Добро пожаловать”
-
Нажмите Ctrl-Alt-F2, чтобы получить виртуальную консоль, войдите как “ubuntu” и выполните “sudo bash”, чтобы получить корневую оболочку
-
Используйте “gdisk” для настройки разделов так, чтобы они выглядели следующим образом:
Я не собираюсь пытаться предоставить пошаговые инструкции по управлению “gdisk” здесь, но отмечу, что когда он спрашивает первый сектор, просто нажмите Enter, а когда он спрашивает последний сектор, введите “+” (очень важно), за которым следует размер, например, “+1M” или “+1024M”, или просто нажмите Enter, чтобы использовать остальную часть диска.
-
Это может быть не обязательно, но я был параноиком: введите “sync” и “перезагрузка” и снова выполните вышеуказанные шаги, чтобы снова получить корневую оболочку.
-
Отформатируйте раздел EFI как FAT32:
mkfs.fat -F 32 /dev/sda2
-
Установите пароль (я настоятельно рекомендую использовать одинаковый пароль) для двух разделов LUKS:
cryptsetup luksFormat /dev/sda4 # LUKS раздел на жестком диске cryptsetup luksFormat /dev/sdb1 # LUKS раздел на SSD
-
Откройте эти два раздела LUKS:
cryptsetup luksOpen /dev/sda4 sda4_crypt cryptsetup luksOpen /dev/sdb1 sdb1_crypt
-
Создайте физические объемы LVM на этих двух разделах:
pvcreate /dev/mapper/sda4_crypt pvcreate /dev/mapper/sdb1_crypt
-
Создайте группы объемов LVM – я включил имя хоста в имена здесь, поскольку я понимаю, что это обременительно, если вы впоследствии переместите диски на другую машину и в конечном итоге получите конфликтующие имена групп объемов. Я бы предложил избегать дефисов в именах групп объемов, так как LVM иногда дублирует их, и это становится немного запутанным.
vgcreate medusahdd /dev/mapper/sda4_crypt vgcreate medusassd /dev/mapper/sdb1_crypt
-
Создайте логические тома LVM. Здесь я создаю раздел своп, корневой раздел и раздел кэша bcache на SSD, а также резервный раздел bcache на HDD. Если вы не хотите использовать bcache, вам, очевидно, не нужен раздел кэша bcache, а резервный раздел bcache здесь будет просто файловой системой ext4 или аналогичной.
lvcreate -n swap medusassd -L 4G lvcreate -n root medusassd -L 16G lvcreate -n cache medusassd -l 100%FREE lvcreate -n homebacking medusahdd -l 100%FREE
-
Установите “bcache-tools”:
apt install bcache-tools
-
Настройте bcache так, чтобы логический том кэша использовался как кэш-устройство для резервного устройства логического тома home:
make-bcache -B /dev/mapper/medusahdd-homebacking -C /dev/mapper/medusassd-cache
-
Создайте файловую систему на новом /dev/bcache0; это может быть не обязательно, но установщик, похоже, рассматривает /dev/bcache0 как устройство, а не как раздел, если вы это не сделаете, и я это сделал:
mkfs.ext4 /dev/bcache0
-
Нажмите Ctrl-Alt-F1, чтобы вернуться к графическому установщику. Выберите опцию “Установить” и продолжайте нормально, пока не дойдете до “Тип установки”, где вы должны выбрать “Что-то иное”.
-
Убедитесь, что “устройство для установки загрузчика” – это жесткий диск, /dev/sda. (Вероятно, это только важно, если вы пытаетесь подготовиться к установке оборудования на конкретном старом оборудовании, о котором я упоминал ранее.)
-
Установите /dev/bcache0 как файловую систему ext4 с точкой монтирования /home и (вероятно, не обязательно) установите флажок, чтобы установщик отформатировал его.
-
Установите /dev/mapper/medusassd-root как файловую систему ext4, смонтированную на “/” и установите флажок для форматирования.
-
Установите /dev/mapper/medusassd-swap как область свопа.
-
Установите /dev/sda3 как файловую систему ext4, смонтированную на “/boot” и установите флажок для форматирования.
-
Проверьте, что /dev/sda1 и /dev/sda2 были автоматически распознаны как biosgrub и efi соответственно.
-
Нажмите “Установить сейчас”; в моем случае экран подтверждения выглядел так:
-
Продолжайте с остальной частью установки как обычно.
-
Перезагрузитесь, когда вас попросят. Это покажет графический загрузочный экран на некоторое время, а затем, в конечном итоге, перейдет в текстовый режим BusyBox shell. Вручную расшифровывайте зашифрованные разделы и монтируйте корневой раздел:
cryptsetup luksOpen /dev/sdb1 sdb1_crypt cryptsetup luksOpen /dev/sda4 sda4_crypt mkdir /mnt mount /dev/mapper/medusassd-root /mnt
-
Настройте некоторые привязанные монтирования для последующего chroot:
mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys mount --bind /proc /mnt/proc
-
Смонтируйте раздел /boot, готовясь к chroot:
mount /dev/sda3 /mnt/boot
-
chroot, чтобы мы могли работать над установкой на наших дисках:
chroot /mnt
-
Отредактируйте /etc/fstab (например, “vi /etc/fstab”) и добавьте “#” в начале строки для /home, чтобы закомментировать ее. Это может быть не обязательно, но у меня ограниченное терпение для экспериментов. 🙂 Пока мы не установим bcache-tools, мы не можем успешно смонтировать bcache-резервируемый /home, и мы хотим избежать того, чтобы система не смогла загрузиться, чтобы сеть заработала, и мы могли установить bcache-tools.
-
Получите UUID для зашифрованных разделов:
ls -l /dev/disk/by-uuid | egrep '(sda4|sdb1)' > /tmp/uuid
-
Создайте /etc/crypttab с этими UUID; поскольку я не думаю, что в этой оболочке доступно копирование и вставка, мы можем использовать файл /tmp/uuid, чтобы избежать ввода длинных UUID вручную, но вы можете сделать это так, как вам угодно:
vi /etc/crypttab :r /tmp/uuid
-
Отредактируйте /etc/crypttab, чтобы он выглядел как этот скриншот, но с вашими UUID:
-
Обновите initramfs и grub:
update-initramfs -u -k all update-grub
-
Перезагрузите систему:
sync exit # выйти из chroot sync reboot # похоже, не имеет эффекта для меня... sync sync halt # машина зависает - перезагрузите вручную (например, через Machine->Reset в VirtualBox)
-
Вас должны попросить ввести пароль на графическом экране входа. Введите его. Система должна загрузиться до обычного экрана входа, где вы можете войти как пользователь, которого вы настроили во время установки. Каталог /home на разделе bcache в настоящее время недоступен, поскольку система не знает, как его смонтировать, но это не слишком сильно ломает вещи, и мы собираемся это исправить. (Основной эффект, который я заметил, – это то, что система считает, что у меня американская клавиатура, несмотря на то, что я настроил во время установки.)
-
Откройте терминал и выполните:
sudo bash # получить корневую оболочку apt install bcache-tools keyutils
-
bcache-tools позволит системе правильно смонтировать наш каталог /home, поэтому теперь отредактируйте /etc/fstab и удалите “#” в начале строки /home, который мы добавили ранее.
-
Отредактируйте /etc/crypttab и измените “luks” на “luks,keyscript=decrypt_keyctl”. Это говорит системе кэшировать пароль, который мы вводим во время загрузки, и использовать его для расшифровки другого LUKS-раздела. Если вы этого не сделаете, это, вероятно, будет работать, но вас попросят ввести пароль для LUKS-раздела, содержащего /home, во время загрузки.
-
Обновите initramfs и grub:
update-initramfs -u -k all update-grub
-
Скрестите пальцы и перезагрузите:
shutdown -rf now
-
Вы должны увидеть графический запрос для шифрования пароля, и система должна загрузиться на экран входа. Войдите как пользователь, которого вы настроили во время установки. Все должно быть в порядке:
Обратите внимание, что эта установка не имеет установленного пароля/данных для восстановления на зашифрованных разделах, в отличие от стандартного полного шифрования диска Ubuntu 22.04. Я еще не рассмотрел это должным образом.
Я провел много исследований в интернете и страдал, пытаясь разобраться в этом. Полезные веб-сайты, которые я нашел, включают:
- https://help.ubuntu.com/community/Full_Disk_Encryption_Howto_2019
- https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system
- https://unix.stackexchange.com/questions/392284/using-a-single-passphrase-to-unlock-multiple-encrypted-disks-at-boot
- https://www.kernel.org/doc/Documentation/bcache.txt
- Как я могу запустить update-grub из LiveCD?
Не слишком ли это хлопотно? Неотъемлемо. Это всего лишь одноразовая установка; после того, как вы сделаете установку, она должна “просто работать”. Для меня лично это также дает мне немного больше уверенности в том, что я понимаю, что происходит за кулисами – я хочу начать использовать полное шифрование диска на случай, если меня ограбят, но это всегда казалось немного страшным на случай, если я вдруг не смогу получить доступ к своему собственному компьютеру, и чувствуется, что это немного более управляемо, пройдя через вышеописанный процесс. YMMV, конечно. 🙂
Ответ или решение
Установка Ubuntu 22.04 с полным шифрованием диска на систему с SSD и жестким диском
Планирование установки Ubuntu 22.04 на систему с NVMe SSD для операционной системы и традиционным жестким диском для каталога /home
, с полным шифрованием диска, требует тщательного подхода. Это руководство направлено на то, чтобы помочь вам правильно настроить эту конфигурацию.
Подготовка к установке
Перед тем как приступить к установке, убедитесь, что у вас есть следующие необходимые компоненты:
- Жесткий диск (HDD): Для каталога
/home
. - Твердотельный накопитель (SSD): Для установки операционной системы.
- Установочный ISO-образ Ubuntu 22.04.
Для начала можно протестировать установку в виртуальной машине, как вы уже делали, или перейти к установке на реальном оборудовании.
Шаги установки
-
Создание виртуальной машины или установка на реальном устройстве:
- Если используете виртуальную машину, создайте два диска: один для SSD и один для HDD.
- Установите ISO-образ Ubuntu 22.04 в виртуальный привод.
-
Запуск инсталлятора:
- Запустите виртуальную машину и дойдите до экрана приветствия.
- Нажмите
Ctrl-Alt-F2
для перехода в терминал и войдите какubuntu
, затем выполнитеsudo bash
для получения прав суперпользователя.
-
Настройка разделов с помощью
gdisk
:- Сначала создайте таблицу разделов, используя команду
gdisk
. - Создайте следующие разделы на SSD (например,
/dev/sda
):/dev/sda1
– BIOS Grub (1М)/dev/sda2
– EFI раздел (1ГБ)/dev/sda3
–/boot
(1ГБ)/dev/sda4
– LUKS раздел (остальная часть устройства)
- На HDD (например,
/dev/sdb
):/dev/sdb1
– LUKS раздел (всё пространство после/boot
).
- Сначала создайте таблицу разделов, используя команду
-
Шифрование и создание LVM:
- Задайте пароль для LUKS-разделов:
cryptsetup luksFormat /dev/sda4 cryptsetup luksFormat /dev/sdb1
- Откройте LUKS-разделы:
cryptsetup luksOpen /dev/sda4 sda4_crypt cryptsetup luksOpen /dev/sdb1 sdb1_crypt
- Создайте физические тома LVM:
pvcreate /dev/mapper/sda4_crypt pvcreate /dev/mapper/sdb1_crypt
- Создайте группы томов:
vgcreate vg_system /dev/mapper/sda4_crypt vgcreate vg_data /dev/mapper/sdb1_crypt
- Задайте пароль для LUKS-разделов:
-
Создание логических томов:
- Создайте необходимые логические тома:
lvcreate -n root vg_system -L 20G lvcreate -n home vg_data -l 100%FREE
- Если необходимо, создайте также логический том для подкачки:
lvcreate -n swap vg_system -L 4G
- Создайте необходимые логические тома:
-
Установка файловой системы:
- Отформатируйте логические тома:
mkfs.ext4 /dev/vg_system/root mkfs.ext4 /dev/vg_data/home mkswap /dev/vg_system/swap
- Отформатируйте логические тома:
-
Настройка установки через инсталлятор:
- Вернитесь в графический инсталлятор (
Ctrl-Alt-F1
). - Выберите опцию "Что-то еще" (Something else) на этапе выбора типа установки.
- Настройте точки монтирования:
/dev/vg_system/root
на/
/dev/vg_data/home
на/home
/boot
на/dev/sda3
- Вернитесь в графический инсталлятор (
-
Завершение установки:
- Убедитесь, что в поле "Устройство для установки загрузчика" выбрано устройство HDD.
- Продолжите с установкой.
Завершение настройки
После установки вам потребуется дополнительно настроить систему для работы с шифрованием LUKS и управлением с помощью LVM
. Следуйте приведенным ниже шагам:
-
Настройка
crypttab
иfstab
:- После перезагрузки войдите в систему и получите права суперпользователя.
- Создайте файл
/etc/crypttab
, добавив соответствующие строки для ваших LUKS-разделов. - Обновите initramfs и grub:
update-initramfs -u update-grub
-
Проверка работы системы:
- Перезагрузите систему и проверьте, что все работает исправно.
Заключительные рекомендации
Установка Ubuntu 22.04 с полным шифрованием на SSD и HDD — это сложный, но осуществимый процесс, который требует внимательности на каждом этапе. Следуйте представленным шагам, и вы сможете настроить надежную и безопасную операционную систему. Помните, что всегда стоит делать резервные копии важных данных и проверять систему на наличие ошибок после завершения установки.