Это оригинальная публикация на русском «Установка Debian на raid-массив с LUKS шифрованием, корневой файловой системой ZFS и загрузкой с UBS и detached header»
Установка Debian на raid-массив с LUKS шифрованием, корневой файловой системой ZFS и загрузкой с UBS и detached header
Не так давно опять настальгировал во FreeBSD, всё прекрасно, всё привычно, всё удобно. Один только момент полностью исключает её из использования на десктопе, по крайней мере у меня. Почти на всех моих ноутбуках FreeBSD не поддерживает ни спящий, ни ждущий режимы (s2disk/s2ram). И сделать я с этим ничего не смог, а уж перепробовал многое.
Без ждущего режима совершенно невозможно пользоваться ноутбуком, так как после транспортировки необходимо по новой всё загружать, включать, открывать. Да и перезагружаю рабочие станции только после обновлений, этого требующих.
Из многих приятных мелочей, которые есть во Фряхе, и которые отсутствуют в 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), поэтому нужен 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 ваши данные превратятся в кирпич.