Linux instalace na ZFS souborévm systému - ZFSBootMENU

Chcete probrat nezařaditelné téma ?
Odpovědět
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 9017
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Linux instalace na ZFS souborévm systému - ZFSBootMENU

Příspěvek od xsouku04 »

Na Odorik.cz používáme souborový systém ZFS již delší dobu cca 5 let. Oproti běžně používaným souborovým systémů má spousty výhod:
  • nemusím disk předem rozdělit na oddíly, každý ZFS dataset  si bere kolik potřebuje z celého disku. Nemůže tak nastat později problém, že se zjistí, že jsem disk rozdělil nevhodně na oddíly.
  • Podporuje kompresi - pokud se nejedná o filmy či obrázky, které mají svoji vlastní kompresi, uložím na disk cca dvojnásobně dat. U databázových dat to může být ještě více.
  • Mohu si udělám snapshot, mohu se vracet v čase, pokud se např. něco nepovede. Pokud si omylem něco smažu, pořád mám přístupné soubory z minulosti. 
  • Mohu provádět inkrementální zálohy.  Tedy přenáší se jen změny od poslední zálohy, nikoli celá záloha. Tyto zálohy je možné dělat velmi rychle a efektivně, třeba i každých 5 minut.
  • Samotný souborový systém ZFS podporuje šifrování. Zálohy je možné dělat šifrovaně. Tedy kdo nezná heslo, na obsah záloh se nepodívá.
  • ZFS  má stabilní výkon, při dobrém nastavení lze stěží naměřit menší výkon, než u jiných souborových systémů. Tedy všechny tyto výhody jsou téměř zdarma.
  • ZFS je dlouhodobě stabilní
Jediná nevýhoda je, že ZFS používá jinou licenci, takže  Linux jej podporuje jen okrajově a je tak relativně složité využívat všechny výhody ZFS.  Např. podpora Grubu, který se používá k startování Linuxů, je zastaralá a omezená. 


Řešení : ZFSbootMENU  https://docs.zfsbootmenu.org/en/v3.1.x/
image.png
image.png (21.89 KiB) Zobrazeno 763 x
Funguje to tak, že nabootujete do živé distribuce (tedy běžící jen z USB donglu), doinstalujete věci potřebné pro ZFS a instalaci provedete ručně odtud.  Ač je návod např. pro Debian delší (https://docs.zfsbootmenu.org/en/v3.1.x/ ... /uefi.html).  Spočívá to jen v kopírování jednotlivých příkazů a netrvá to o mnoho déle, než instalace pomocí běžného instalátoru. Výsledek je, že nabootujete do minimalistické instalace Debianu, běžící přímo ze ZFS.   Návod neřeší nastavení sítě, ani instalaci např.. grafického prostředí. To může být dobré provést ještě než opustíte chroot, tedy přidat další krok do onoho oficálního návodu. Je to jednodušší než dělat to pak dodatečně.

Pro snadnější instalaci si do živé distribuce debianu (nutné je aby byla zánovní, se stejným jádrem ke kterému jsou k dispozici moduly zfs) doinstaluji ssh, instalaci tak mohu provádět z jiného počítače, na který jsem zvyklý. Na live distribuci debianu je defaultní přihlašovací jméno "user" a heslo je "live". Mohu se tak přihlásit v lokální síti.

Kód: Vybrat vše

apt install openssh-server
Před tím než opustím chroot, je dobré provést instalaci dalších balíčků a provést nastavení sítě:

Kód: Vybrat vše

apt install task-kde-desktop i3 firmware-linux firmware-misc-nonfree xserver-xorg-video-all mc vim screen htop openssh-server

# věci pro wifi
apt install firmware-iwlwifi wireless-tools wpasupplicant

adduser jojo

usermod -aG sudo jojo

systemctl set-default graphical.target

echo "auto enp2s0
allow-hotplug enp2s0
iface enp2s0 inet dhcp" >> /etc/network/interfaces
Návod na který se odkazuji výše neřeší swap. ZVOL swap je ale možné bez problémů dodělat dodatečně.

Jaké to má bootování ze ZFS výhody?
  • Pokud provádím upgrade, mohu si předem udělat snapshot a kdyby něco začalo fungovat špatně, vrátit se v čase.
  • Mohu si přidat jinou distribuci Linuxu. Prostě jen udělám jiný ZFS dataset a provedu na něj novou instalaci podle návodu. Při bootování v menu automaticky přibude další nabídka.
  • Mohu velmi jednoduše a spolehlivě provádět zálohy na jiný ZFS disk či stroj, zálohovaná data mohou, ale nemusí zůstat zašifrovaná heslem. Možné je provádět inkrementální zálohy. Tedy přenáší se jen změny, které proběhly od minulé zálohy. Inkrementální záloha pak trvá často jen několik vteřin.
  • Celou instalaci mohu bez problému přenést na jiný disk/počítač, pokud má také ZFS. Ušetřím si tak čas, pokud budu to stejné chtít nainstalovat na jiný počítač.
  • ZFS komprese a to že jednotlivé datasety (diskové oddíly) umí mezi sebou sdílet kapacitu a je možné je mazat libovolně  vytvářet, způsobí, že mi stačí poloviční kapacita disku.
  • Hlavní důvod je, že poté co si to vyzkouším na běžném pracovním notebooku, budu moci stejný postup zopakovat i na serveru.
Co se stane, kdyby distribuce prováděla update kernelu?

ZFS moduly do jádra se automaticky přeloží i pro nový kernel při jeho instalaci. Při startu je pak možné vybrat verzi kernelu, která se má použít. Tohle chování je stejné, jako když se používá GRUB.  Navíc pro jistotu mohu před upgrade kernelu provést snapshot, abych se mohl vrátit v čase. O tuhle možnost v případě jiného souborového systému přicházím.
 
 
Proč není o ZFS více slyšet ?

Linux má podobně se chovající souborový systém. Co se jmenuje Btrfs. Ač je možné jej použít pro domácí počítače, použití pro servery, zvláště hodně zatížené databáze, nelze moc doporučovat, neb stále není tak dobře vyladěn. 
Bohužel je relativně běžné, že se nešíří ty nejlepší věci, ale které někdo umí protlačit. Viz např. boj KDE vs Gnome, vyhrává Gnome nejspíše proto, že má více vývojářů v USA. KDE má většinu vývojářů v Evropě. Tedy výsledek je, že většina Linuxu běží na starém souborovém systému ext4 a pokud si sami nevyberete jinak, používá Gnome. Samozřejmě bez ZFS lze žít i provozovat i databázové servery, ale mnohdy se kvůli tomu věci zbytečně komplikují, nebo se zbytečně uzavírá jedna z dobrých, jednoduchých a spolehlivých možností, jak např. zálohovat.



Přidání druhého a další systému do ZFS.

Kód: Vybrat vše

export ID="debian2"
zfs create -o mountpoint=/mnt -o canmount=noauto zroot/ROOT/${ID}
zfs mount zroot/ROOT/debian2

# namountuji a poté až skončím s chroot tak

umount -n -R /mnt
zfs set mountpoint=/ zroot/ROOT/debian2
Zajímavé je, že pokud zfs pool šifrován, nejdříve je potřeba zadat heslo a pak teprve se objeví nabídka systémů, které je možné nabootovat.
 
 
 
Update: Používám to již několik měsíců bez problému.  Ale přišel jsem na to, že aby byl disk přenositelný na jiný počítač, tak je třeba provést příkaz

Kód: Vybrat vše

sudo cp /boot/efi/EFI/ZBM/VMLINUZ.EFI \
/boot/efi/EFI/BOOT/BOOTX64.EFI
Poté systém nabootuje na libovolném počítač, který nemá uloženy Biosu odkaz na soubor VMLINUZ.EFI

Můj dojem je takový, že ač návod vypadá složitě a možné nedodělaně, používání  ZFSBootMenu se vyplatí se to a je to bezpečná a dobrá volba. Projekt to je vyspělý, nejspíše to mnoho lidí používá takto ve velkém.  Bohužel nativně linuxové souborové systémy nejsou tak dobré a stabilní jako ZFS.


Jak zkopíruji disk starého počítače na nový ?
 
 Na starém počítači vytvořím snapshoty. Klonovat lze jen snapshoty.

Kód: Vybrat vše

sudo zfs snapshot zroot/ROOT/debian@migration
sudo zfs snapshot zroot/home@migration
Na novém počítači spustí live debian z USB a budu postupovat podle návodu pro novou instalaci. Datasety zroot/ROOT/debian a zroot/home však vytvářet nebudu, ty se vytvoří kopírováním.  A samozřejmě vynechám ale krok, který instaluje systém pomocí debootstrap a místo toho provedu kopírování.

Kód: Vybrat vše

sudo zfs send zroot/ROOT/debian@migration | ssh user@192.168.0.135 "sudo zfs receive zroot/ROOT/debian"
sudo zfs send zroot/home@migration | ssh user@192.168.0.135 "sudo zfs receive zroot/home"
Heslo na live Debianu je "live".
Kopírováním datasetů se nepřenesou některý properties, tak je pak nutné je na cílovém stroji ručně upravit.

Kód: Vybrat vše

sudo zfs set mountpoint=/ zroot/ROOT/debian
sudo zfs set canmount=noauto zroot/ROOT/debian
sudo zfs set mountpoint=/home zroot/home
sudo zpool set bootfs=zroot/ROOT/debian zroot
 Pokud bych přenášel zroot dataset a všechny jeho podatasety, mohu jej pravděpodobně přenést i šifrovaný pomocí parametru -w na odesílacím stroji. A tak je možné si udělat zálohu i na stroj, kterému nemáte úplnou důvěru.  Pokud bych přenášel např. zroot/ROOT/debian, tak to bude zfs považovat za nové heslo i když je stejné.
 
 Většinu z následujícího návodu mohu vynechat provedu jen:

Kód: Vybrat vše

zfs set org.zfsbootmenu:commandline="quiet" zroot/ROOT
zfs set org.zfsbootmenu:keysource="zroot/ROOT/${ID}" zroot

mkfs.vfat -F32 "$BOOT_DEVICE"


zpool export zroot
zpool import -N -R /mnt zroot
zfs load-key -L prompt zroot

zfs mount zroot/ROOT/${ID}
zfs mount zroot/home

# nyní zkontroluje, že v adresáří /mnt je můj root a /mnt/home je můj domovský adresář
# pak provedu chroot.

mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -B /dev /mnt/dev
mount -t devpts pts /mnt/dev/pts
chroot /mnt /bin/bash

# instalace zfsbootmenu
# předpoklad je že v fstab nic jiného nemám (zfs tam nic nepotřebuje dávat)
cat << EOF > /etc/fstab
$( blkid | grep "$BOOT_DEVICE" | cut -d ' ' -f 2 ) /boot/efi vfat defaults 0 0
EOF

mkdir -p /boot/efi

mount /boot/efi

# a nainstaluje zfsbootmenu zavaděč do UEFI
mkdir -p /boot/efi/EFI/ZBM
curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi
cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI

# aby bootoval s tímto diskem každý stroj
mkdir -p /boot/efi/EFI/BOOT/
cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/BOOT/BOOTX64.EFI


# uložím informace o zavaděči do biosu

mount -t efivarfs efivarfs /sys/firmware/efi/efivars


efibootmgr -c -d "$BOOT_DISK" -p "$BOOT_PART" \
-L "ZFSBootMenu (Backup)" \
-l '\EFI\ZBM\VMLINUZ-BACKUP.EFI'

efibootmgr -c -d "$BOOT_DISK" -p "$BOOT_PART" \
-L "ZFSBootMenu" \
-l '\EFI\ZBM\VMLINUZ.EFI'

# vygenerujeme nové klíče, aby nebyly stejné jako na původním počítači
ls -l /etc/ssh/ssh_host_*
rm -f /etc/ssh/ssh_host_*
ssh-keygen -A

vim /etc/hostname
vim /etc/hosts
zgenhostid -f

exit

umount -n -R /mnt

zpool export zroot
reboot

Zazálohvání nastavení sítě a VPN

Kód: Vybrat vše

sudo tar -C /etc/NetworkManager -czf ~/networkmanager-connections.tar.gz system-connections
 
 Pro zálohování z jiných počítačů si mohu vytvořit další dataset

Kód: Vybrat vše

zfs create -o mountpoint=/backup -o compression=zstd-9 zroot/backup

sudo rsync -aHAX --numeric-ids   user@192.168.0.127:/home/ /backup_notebook/
Odpovědět