ZFS boot fájlrendszerként

kami911 képe

(fejlesztés alatt)

Figyelem! Mentsünk minden adatot a számítógépről, ha van rajta fontos adat!

cat /proc/partitions

ZFS EFI boottal

sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:sda9-Reserved -n1:1M:+1023M -t1:EF00 -c1:sda1-EFI -n2:0:0 -t2:bf01 -c2:sda2-zfs /dev/sda
sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:sdb9-Reserved -n1:1M:+1023M -t1:EF00 -c1:sdb1-EFI -n2:0:0 -t2:bf01 -c2:sdb2-zfs /dev/sdb

Attól függően háy lemezünk van. Egy lemeznél csak az első sor. Tükrözött RAID jellegű megoldásnál pedig mindkét sor. A sor végi blokkeszköz névre figyeljünk!

ZFS /boot boottal

sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:sda9-Reserved -n1:0M:+2048 -t1:8300 -c1:sda1-BOOT -n2:0:0 -t2:bf01 -c2:sda2-zfs /dev/sda
sgdisk -Z -n9:-8M:0 -t9:bf07 -c9:sdb9-Reserved -n1:0M:+2048 -t1:8300 -c1:sdb1-BOOT -n2:0:0 -t2:bf01 -c2:sdb2-zfs /dev/sdb
########### sgdisk --new=2:48:2047 --typecode=2:EF02 --change-name=2:"BIOS boot partition" ${BLOCK_DEV} to make a BIOS Boot Partition. It will make GRUB2 happy.

Telepítsük a ZFS kezeléséhez szükséges csomagot

apt install -y zfsutils-linux

Hozza létre a telepítéshez használt cél mappát:

mkdrir -p /target

Majd a rootkánt használt eszközt, amelyet ideiglenesen a /target alá lesz becsatolva:

zpool create -o ashift=12 -O atime=off -O canmount=off -O compression=lz4 -O normalization=formD -O mountpoint=/ -R /target systempool mirror /dev/sda2 /dev/sdb2

Ha nem tükrözött lemezeket használ, akkor egy lemez blokkeszköz esetén ezt a parancsot kell kiadni, figyeni a sor végén látható blokkeszköz névre:

zpool create -o ashift=12 -O atime=off -O canmount=off -O compression=lz4 -O normalization=formD -f -O mountpoint=/ -R /target systempool /dev/sda2

Megfelelő csatolási pontok létrehozása:

zfs create -o canmount=off -o mountpoint=none systempool/ROOT
zfs create -o canmount=on -o mountpoint=/ -o exec=on -o setuid=on -o devices=on systempool/ROOT/mint
zfs mount systempool/ROOT/mint

zfs create -o canmount=off -o mountpoint=none systempool/BOOT
zfs create -o canmount=noauto -o mountpoint=/boot systempool/BOOT/mint
zfs mount systempool/BOOT/mint

zpool set bootfs=systempool/ROOT/mint systempool
zfs set exec=off systempool
zfs set setuid=off systempool
zfs set devices=off systempool

zfs create -o canmount=off systempool/var
zfs create systempool/var/lib
zfs create systempool/var/lib/apt
zfs create -o exec=on systempool/var/lib/dpkg
zfs create systempool/var/log
zfs create -o com.sun:auto-snapshot=false systempool/var/tmp
zfs create -o com.sun:auto-snapshot=false systempool/var/cache
zfs create -o com.sun:auto-snapshot=false systempool/var/cache/apt
zfs create systempool/var/spool
zfs create systempool/var/mail
zfs create -o com.sun:auto-snapshot=false -o exec=on systempool/tmp
zfs create -o exec=on systempool/root
zfs create -o mountpoint=/home systempool/home
zfs create -o mountpoint=/srv systempool/srv
zfs create -o mountpoint=/opt systempool/opt
zfs create -o exec=on systempool/usr

Előkszületek  a rendszer telepítéséhez

A tmp mappák jogosultságainak beállítása:

chmod 1777 /target/tmp
chmod 1777 /target/var/tmp

Szükséges eszközök telepítése:

apt install -y debootstrap

A bootstrapelés elvégzése:

debootstrap --include=zfsutils-linux bionic /target

A telepítéshez szükséges speciális mappák felcsatolása:

mount --rbind /dev /target/dev
mount --rbind /proc /target/proc
mount --rbind /sys /target/sys

Belépés a telepítési környezetbe:

chroot /target /bin/bash

(csomágtároló config, ha kell)
(hálózat konfig, ha kell)

A telepített környezetn alapcsomagok telepítése és konfigurálása:

apt install language-pack-hu
dpkg-reconfigure locales
dpkg-reconfigure debconf
dpkg-reconfigure tzdata

apt install -y gdisk dosfstools zfs-initramfs

Az fstabban a megfelelő indítási környezet létrehozása:

echo PARTUUID=$(blkid -s PARTUUID -o value /dev/disk/by-partlabel/sda1-EFI /boot/efi) vfat d 1 >> /etc/fstab

Az EFI mappaszerkezet létrehozása a EFI-s telepítés esetére:

mkdir /boot/efi
mkdosfs -F 32 -I /dev/sda1
mount /dev/sda1 /boot/efi

A GRUB rendszerindaító telepítése:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=linuxmint --recheck --no-floppy /dev/sda
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=linuxmint --recheck --no-floppy /dev/sdb

A GRUB menu frissítése:

 

update-grub2

 

A meglévő rendszer hibajavítása, például LIVE rendszerről indítva

Telepítsük a ZFS kezeléséhez szükséges csomagot

apt install -y zfsutils-linux zfs-initramfs

 

zpool status
zpool list
zfs list

Elvileg ezen parancsok után csak a nio pools available és a no dataset available üzenet jelenik majd meg.

zpool import -f -N -R /target systempool
zpool import -f -N -R /target/boot bootpool
zfs mount systempool/ROOT/mint
mount.zfs -o rw bootpool/BOOT/mint /target/boot

A /target/etc/fstab alapján csatoljuk el a szükséges fájlrendszereket. Ezeket a fájlrendszerekt a /tartget alá, a megfelelő helyre kell csatolni, a pédában például így:

mount.zfs systempool/usr /target/usr
mount.zfs systempool/var/log /target/var/log
mount.zfs systempool/var/spool /target/var/spool
mount.zfs systempool/var/tmp /target/var/tmp
mount.zfs systempool/tmp /target/tmp

A javításhoz ne felejük el felcsatolni az EFI partíciót sem, amennyiben van olyan a rendszeren:

mount /dev/sda1 /target/boot/efi

Ezzel a paranccsal megtudhatjuk az megadott EFI partíció UUID-ját, ami az fstab fájlban is hsználható.

echo PARTUUID=$(blkid -s PARTUUID -o value /dev/disk/by-partlabel/sda1-EFI /boot/efi)

A konfiguráláshoz, hibaelhárításhoz szükséges speciális mappák felcsatolása:

mount --rbind /dev /target/dev
mount --rbind /proc /target/proc
mount --rbind /sys /target/sys

GRUB újratelepítése:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=linuxmint --recheck --no-floppy /dev/sda

Linux inditófájlokl elkészítése:

update-initramfs -c -k all

GRUB menü beállítása:

update-grub2

vagy:

grub-mkconfig -o /boot/grub/grub.cfg