Це оригінальна публікація українською «Встановлення Debian на raid-масив із LUKS шифруванням, кореневою файловою системою ZFS та завантаженням з UBS із detached header»
Нещодавно знову ностальгував у FreeBSD, все чудово, все звично, все зручно. Лише один момент повністю виключає її з використання, принаймні в мене. Майже на всіх моїх ноутбуках FreeBSD не підтримує ні режим сну, ні режим очікування (s2ram/s2disk). І зробити я з цим нічого не зміг, а перепробував багато чого.
Без режиму очікування абсолютно неможливо користуватися ноутбуком, так як після транспортування необхідно по новому все завантажувати, включати, відкривати. Та й перезавантажую робочі станції лише після оновлень, які цього вимагають.
З багатьох приємних дрібниць, які є у Фряхі, і які відсутні в Debian це ZFS Boot Environments, що зручніше, ніж, скажімо, снапшоти LVM. А друге це GEOM_ELI, який підтримує не лише, як LUKS, режим АБО пароль, АБО ключ, але також підтримує режим І пароль, І ключ.
Подумав, подумав, та й вирішив розгорнути Debian з нуля з урахуванням усіх інструментів, які використовую, досвіду, і, що важливо, звичок.
Debian поки що залишається основною моєю системою, тому єдиний спосіб отримання хардварного (фізичного) ключа шифрування на додаток до паролю - це зробити його з хедера і розмістити на USB-флешці.
Звички
Миритись краще зі знайомим злом, Ніж навмання тікати в невідомість!
mdadm raid1
Це основний шар всіх моїх дискових систем і це звичка якої складно позбутися. Навіть якщо у робочій станції лише один диск, то на ньому в основі буде деградуючий raid1. Хоча завжди в системах щонайменше два диски. Це дозволяє буквально за лічені хвилини робити завантажувальну та працездатну копію системи та даних.
Диск може бути підключений за будь-якою шиною, мені доводилося клонувати дзеркало і на eSATA, і на USB2/3, і на EXPRESSCARD 54, і на Thunderbolt, і навіть на loop-файл.
Розгорнута на гарному обладнанні та налаштована під себе система, якій ти можеш довіряти, цінується на рівні з даними. Тому що на написання невеликого проекту може знадобитися 2-3 місяці роботи, а на налаштування системи у процесі може піти й півроку.
Відразу зауважу, ніякі dd, rsync, cpio та інше не зможе коректно зробити бекап працюючої системи.
LUKS
Це другий рівень, одразу поверх Raid дзеркала. Його призначення пояснювати не треба.
LVM
Іноді буває потрібен “режим сну” (s2disk|Hibernation), тому потрібен SWAP, а оскільки пароль хочеться мати один, то lvm необхідний.
Так, mdadm, LVM та LUKS можна замінити однією ZFS, але це ж звички. За добрих півтора десятка років із ними не було жодної проблеми. Були збої живлення/ресети ноутбука, множинні оновлення релізів Debian, сипалися HDD, але система завантажувалася завжди.
# usb
sda 8:16 1 14.9G 0 disk
├─sda1 8:17 1 1000K 0 part
├─sda2 8:18 1 512M 0 part /boot/efi
└─sda3 8:19 1 4G 0 part /boot
# nvme
nvme0n1 259:0 0 3.6T 0 disk
└─nvme0n1p1 259:1 0 904G 0 part
└─md1 9:1 0 903.9G 0 raid1
└─md1_crypt 253:0 0 903.9G 0 crypt
├─lvm_system-swap 253:1 0 96G 0 lvm
└─lvm_system-zfs 253:2 0 807.9G 0 lvm zroot
Встановлення
Інсталятор Debian не надає можливості кастомної установки з урахуванням усіх вимог. Тому було вирішено встановлювати використовуючи старий добрий debootstrap з-під LiveCD системи. У моєму випадку це debian-live-13.3.0-amd64-kde.iso. LiveCD-образ завантажен, всі хеші та gpg підписи перевірені.
# trixie
deb https://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security/ trixie-security main contrib non-free non-free-firmware
deb https://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
mkdir /mnt/etc/zfs
cp /etc/zfs/zpool.cache /mnt/etc/zfs/
# У мене не було цього кешу# cp: cannot stat '/etc/zfs/zpool.cache': No such file or directoryhostname deb
hostname> /mnt/etc/hostname
printf'127.0.1.1 deb'>> /mnt/etc/hosts
ip addr show nano /mnt/etc/network/interfaces.d/eth0
# trixie
deb http://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security/ trixie-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
mkdir /mnt/etc/.crypto_data
cp /tmp/keys/md1_header /mnt/etc/.crypto_data/md1_header
chmod 700 /mnt/etc/.crypto_data
chmod 400 /mnt/etc/.crypto_data/md1_header
# Зробіть другу тимчасову копію md1_header у /boot на USB# Якщо ви не зможете завантажитись з першого разу# то вам не потрібно буде витягувати цей файл з образу initrdcp /tmp/keys/md1_header /mnt/boot/md1_header
# trixie
deb https://deb.debian.org/debian/ trixie main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security/ trixie-security main contrib non-free non-free-firmware
deb https://deb.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
search.fs_uuid b5bd933b-51e9-4693-bf3b-d13307bbd885 root hd1,gpt3
set prefix=($root)'/grub'
configfile $prefix/grub.cfg
fs_uuid відповідає /dev/sdb3.
Якщо ви завантажилися успішно
Ви можете видалити md1_header з /boot, тому що він і так міститься всередині всіх /boot/initrd.img*. rm -f /boot/md1_header
І зробити деяку кількість копій вашої завантажувальної флешки. Самі вирішуйте, dd або копіювання файлів, пам’ятайте про grub-install. Без цієї флешки, а точніше без md1_header ваші дані перетворяться на цеглу.