- 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í
Řešení : ZFSbootMENU https://docs.zfsbootmenu.org/en/v3.1.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-serverKó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/interfacesJaké 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.
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/debian2Update: 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.EFIMů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@migrationKó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"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 zrootVě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
rebootZazá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/