Šifrované LVM nad RAIDem včetně hibernace v Archu

7. 9. 2008 15:15 Jan Hrach

Mám klasické nastavení – šifrované / a /home a uspávám do šifrovaného swapu. Experimentálně jsem si ve VirtualBoxu rozjel šifrované LVM nad RAIDem.

Ouvrvijů

Instalace se skládá ze 6 kroků:

  1. nahození RAIDu
  2. zašifrování /dev/md0
  3. nastavení LVM nad md0
  4. instalace Archu
  5. nastavení mkinitcpio.conf a menu.lst tak, abychom nabootovali
  6. optimálně rozjetí uswsusp

RAID

Máme 2 stejné disky – sda a sdb. sda rozdělíme na 2 oddíly – 50MB typ Linux a zbytek Linux RAID autodetect (FD). 1. oddíl můžeme nastavit bootovací.

Stejnou partition tabulku přeneseme na 2. disk.

dd if=/dev/sda of=/dev/sdb bs=512 count=1
blockdev --rereadpt /dev/sdb

Nahrajeme moduly:

modprobe raid1 dm-crypt aes aes-i586 xts

a vyrobíme RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2

Šifrování a LVM

Zašifrujeme,

cryptsetup -c aes-xts-plain -s 512 -y luksFormat /dev/md0

odemkneme,

cryptsetup luksOpen /dev/md0 lvm

a nahodíme LVM.

lvm pvcreate /dev/mapper/lvm

lvm pvscan

lvm vgcreate grupa /dev/mapper/lvm

lvm vgscan

lvm lvcreate --size 2G --name root grupa

lvm lvcreate --size 500M --name swap grupa

lvm lvscan

Instalace Archu

Vyrobíme FS,

mkfs.ext2 /dev/sda1; mkfs.ext2 /dev/sdb1
mkfs.ext3 /dev/mapper/grupa-root

mkswap /dev/mapper/grupa-swap

namountujeme,

swapon /dev/mapper/grupa-swap
mount /dev/mapper/grupa-root /mnt

mkdir /mnt/boot

mount /dev/sda1 /mnt/boot

a spustíme instalaci.

/arch/setup

Rovnou instalujeme – neřešíme disky. Musíme odpovědět kladně na otázky ohledně bootování z RAIDu, LVM a šifrovaných oddílů. Po instalaci musíme nastavit USELVM="yes" v /etc/rc.conf. Zkontrolujeme /etc/mkinitcpio.conf, musí obsahovat tento řádek:

HOOKS="base udev autodetect pata scsi sata raid-partitions keymap encrypt lvm2 filesystems"

A teď to nejdůležitější. Trvalo mi docela dlouho, než jsem to vygooglil: do /boot/grub/menu.lst musíme dát na příkazovou řádku jádra toto:

root=/dev/mapper/grupa-root ro md=0,/dev/sda2,/dev/sdb3 cryptdevice=/dev/md0:lvm

Co jsme tím vlastně řekli?

Když se podíváme na řádek HOOKS=, vidíme, že se nejdříve spustí hook raid-partitions. Ten si přečte md=0,/dev/sda2,/dev/sdb2 a sestaví pole /dev/md0 (to je ten první parametr) ze zařízení /dev/sda2 a /dev/sdb2. Jako další hook se spouští encrypt. Ten si přečte cryptdevice=/dev/md0:lvm a spustí příkaz cryptsetup luksOpen /dev/md0 lvm. Ten se zeptá na heslo a vyrobí blokové zařízení /dev/mapper/lvm, které je vlastně rozšifrované /dev/md0. Potom se spustí lvm2, proskenuje /dev, najde volume grupu a vyrobí v našem případě /dev/mapper/grupa-root a /dev/mapper/grupa-swap. Nakonec se spustí kinit, kterému se předá parametr root=/dev/mapper/grupa-root ro a ten jej připojí jako /. Hooks jsou pro další zkoumání dostupné v  /lib/initcpio/hooks/.

Restartneme a modlíme se :-)

Hibernace

Pokud chceme hibernovat, z AURu (viz „Odkazy“) si stáhneme uswsusp a pomocí makepkg vyrobíme balíček. Ten nainstalujeme pomocí pacman -U. Ještě nainstalujeme hibernate-script V /etc/suspend.conf  nastavíme resume device = /dev/mapper/grupa-swap. Do sekce HOOKS v /etc/mkinitcpio.conf  přidáme ...lvm2 uresume filesystems.... Příkazem mkinitcpio -k `uname -r` -g /boot/kernel26.img vygenerujeme nový ramdisk a pomocí s2disk se zkusíme zhibernovat.

Odkazy

Přeji hodně štěstí a veselou paranoiu :-)

Sdílet