ZFS kasutamine operatsioonisüsteemiga Debian v. 11

Allikas: Imre kasutab arvutit
Redaktsioon seisuga 15. mai 2022, kell 23:49 kasutajalt Imre (arutelu | kaastöö) (→‎Misc)
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

TODO

Paigaldamine

2021 aasta talvel on root-on-zfs debian 11 tekitamiseks üks suhteliselt mugav võimalus

# zpool upgrade rpool

hn kasutaja skript töötab, aga tulemus erineb oluliselt https://openzfs.github.io/openzfs-docs/Getting%20Started/Debian/Debian%20Buster%20Root%20on%20ZFS.html juhendis kirjeldatud viisil saadud süsteemist

  • fdisk layout
  • dataset layout
  • /tmp kataloog on no-exec
  • ei ole eraldi bpool ja rpool, on kasutusel ainult rpool
  • jne

Debian v. 11 zfs omadusel 2021 talvel

  • sisaldab zfs v. 2.0 tarkvara
  • os intalleris puudub zfs tugi
  • zfs ja os vaheline integratsioon puudub (a la ubuntu zsys, zsysctl jms)

zfs põhine dual boot

zfs põhise sama pool datasettide abil tehtud dual boot kasutamiseks sobib

  • lähtepunktiks on töötav süsteem
  • moodustada juurfailisüsteemile vastavast datasetist snapshot ja kloon
# zfs snapshot rpool/ROOT/debian-buster@ss
# zfs list -t snapshot
# zfs clone rpool/ROOT/debian-buster@ss rpool/ROOT/debian-tmp
  • grub bootloaderis muuta rpool/ROOT/debian-buster -> rpool/ROOT/debian-tmp (kahes kohas)
  • bootida break=mount abil initramfs prompti
  • eemaldada käesoleval juurikal mountpoint
zpool import rpool
zfs set mountpoint=none rpool/ROOT/debian-buster
  • lisada uuelda juurikale mountpoint
zfs set mountpoint=/ rpool/ROOT/debian-tmp
zpool export rpool
  • kuna /etc/fstab peale pole zfs ühenduskohta kirjeldatud, siis fstab failis muudatusi pole vaja teha
  • bootida arvutit edasi, ctrl-d
  • klooni jäädavalt kasutama jäädes tuleks teha promote ning eemaldada kloon ja snapshot
# zfs promote rpool/ROOT/debian-tmp

Tulemusena saab sisse logida, kasutada jne.

df -h vs zfs list

zpool list väljund

root@deb11-tookoht:~# zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
bpool   480M   153M   327M        -         -    13%    31%  1.00x    ONLINE  -
rpool  62.5G  58.4G  4.07G        -         -    84%    93%  1.00x    ONLINE  -

zfs list väljund

root@deb11-tookoht:~# zfs list
NAME                USED  AVAIL     REFER  MOUNTPOINT
bpool               152M   200M       96K  /
bpool/BOOT          151M   200M       96K  none
bpool/BOOT/debian   151M   200M      112M  legacy
rpool              59.4G  1.11G       96K  /
rpool/ROOT         31.3G  1.11G       96K  none
rpool/ROOT/debian  31.3G  1.11G     30.7G  /
rpool/home         18.2G  1.11G      584M  /home
rpool/home/imre    17.5G  1.11G     17.5G  /home/imre
rpool/home/root    94.2M  1.11G     94.2M  /root
rpool/swap         4.25G  2.12G     3.24G  -
rpool/var          5.68G  1.11G       96K  /var
rpool/var/cache    5.58G  1.11G     5.58G  /var/cache
rpool/var/lib        96K  1.11G       96K  /var/lib
rpool/var/log       109M  1.11G      109M  legacy
rpool/var/spool     120K  1.11G      120K  legacy

kus

  • rpool kõigi non-volume tüüpi datasettide jaoks on sama palju vaba ruumi kuna zfs nö olemus mõttes asuvad nad ühe nö juur-dataset all
  • rpool/swap on volume tüüpi dataset ja seetõttu eristub
  • dataset USED tulba väärtus sisaldab kõigi alla jäävate datasettide väärtuste summat

Esitada ainult volume tüüpi datasetid

root@deb11-tookoht:~# zfs list -t volume
NAME         USED  AVAIL     REFER  MOUNTPOINT
rpool/swap  4.25G  2.12G     3.24G  -

zfs list -o space väljund

root@deb11-tookoht:~# zfs list -o space
NAME               AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
bpool               200M   152M        0B     96K             0B       152M
bpool/BOOT          200M   151M        0B     96K             0B       151M
bpool/BOOT/debian   200M   151M     38.9M    112M             0B         0B
rpool              1.11G  59.4G        0B     96K             0B      59.4G
rpool/ROOT         1.11G  31.3G        0B     96K             0B      31.3G
rpool/ROOT/debian  1.11G  31.3G      596M   30.7G             0B         0B
rpool/home         1.11G  18.2G        0B    584M             0B      17.6G
rpool/home/imre    1.11G  17.5G        0B   17.5G             0B         0B
rpool/home/root    1.11G  94.2M        0B   94.2M             0B         0B
rpool/swap         2.12G  4.25G        0B   3.24G          1.01G         0B
rpool/var          1.11G  5.68G        0B     96K             0B      5.68G
rpool/var/cache    1.11G  5.58G        0B   5.58G             0B         0B
rpool/var/lib      1.11G    96K        0B     96K             0B         0B
rpool/var/log      1.11G   109M        0B    109M             0B         0B
rpool/var/spool    1.11G   120K        0B    120K             0B         0B

kus

  • lisaks eelmisele 'zfs list' väljundile esitatakse '-o space' suvandi kasutamisel põhjalikum info

df -h väljund

root@deb11-tookoht:~# df -h
Filesystem         Size  Used Avail Use% Mounted on
udev               5.9G     0  5.9G   0% /dev
tmpfs              1.2G  1.3M  1.2G   1% /run
rpool/ROOT/debian   32G   31G  1.2G  97% /
tmpfs              5.9G  572M  5.3G  10% /dev/shm
tmpfs              5.0M  4.0K  5.0M   1% /run/lock
tmpfs              4.0M     0  4.0M   0% /sys/fs/cgroup
rpool/var/spool    1.2G  128K  1.2G   1% /var/spool
rpool/var/log      1.3G  109M  1.2G   9% /var/log
bpool/BOOT/debian  312M  113M  200M  37% /boot
/dev/vda2          505M  5.3M  499M   2% /boot/efi
tmpfs              5.9G  715M  5.2G  12% /tmp
rpool/home         1.7G  585M  1.2G  34% /home
rpool/home/root    1.3G   95M  1.2G   8% /root
rpool/var/cache    6.7G  5.6G  1.2G  84% /var/cache
rpool/home/imre     19G   18G  1.2G  95% /home/imre
tmpfs              1.2G   68K  1.2G   1% /run/user/1000

kus

  • klassikalise df utiliidi väljund ei sobi hästi kõigi zfs detailide esitamiseks, aga ülevaate saab
  • Size tulba väärtuseks esitatakse Used + Avail summa (mis on vastavalt zfs list -o space väljundi USEDDS + AVAIL)

2022 kevadel zfs kasutamine

Kasutada olevad plokkseadmed

# lsscsi -s
[0:0:0:0]    disk    ATA      Samsung SSD 860  2B6Q  /dev/sda   1.00TB
[1:0:0:0]    disk    ATA      Samsung SSD 860  2B6Q  /dev/sdb   1.00TB
[2:0:0:0]    disk    ATA      Samsung SSD 870  1B6Q  /dev/sdc   4.00TB
[3:0:0:0]    disk    ATA      Samsung SSD 870  1B6Q  /dev/sdd   4.00TB
[N:0:4:1]    disk    Samsung SSD 970 EVO Plus 2TB__1            /dev/nvme0n1  2.00TB
[N:1:4:1]    disk    Samsung SSD 970 EVO Plus 2TB__1            /dev/nvme1n1  2.00TB

kus

# ls -l /dev/disk/by-id/ata-Samsung_SSD_870_EVO_4TB_S6BCNS0RB016*
lrwxrwxrwx 1 root root 9 May 14 10:22 /dev/disk/by-id/ata-Samsung_SSD_870_EVO_4TB_S6BCNS0RB01688K -> ../../sdd
lrwxrwxrwx 1 root root 9 May 14 10:22 /dev/disk/by-id/ata-Samsung_SSD_870_EVO_4TB_S6BCNS0RB01694L -> ../../sdc

Moodustatakse ssd 870 seadmetest 2-way mirror

# zpool create -o ashift=13 zp_evo_870 mirror /dev/disk/by-id/ata-Samsung_SSD_870_EVO_4TB_S6BCNS0RB01688K /dev/disk/by-id/ata-Samsung_SSD_870_EVO_4TB_S6BCNS0RB01694L
# zpool set autoexpand=on zp_evo_870
# zfs set compression=zstd zp_evo_870
# zfs set mountpoint=none zp_evo_870

kus

ZFS failisüsteem on liiga täis ja läks katki

Peale küllaltki täis failisüsteemi otsas rekursiivse snapshot ütlemist

# zfs snapshot -r sn_zfs_ssd@replica20220515

ütleb failisüsteemi vastu nii

# zfs destroy sn_zfs_ssd/vm-1125-disk-0@replica20220515
internal error: cannot destroy snapshots: Channel number out of range
Aborted

kusjuures lisaks sellele, et ta on täis

# zpool list
NAME         SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
sn_zfs_ssd  1.81T   953G   903G        -         -    44%    51%  1.00x  DEGRADED  -

# zfs list sn_zfs_ssd -o space
NAME        AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
sn_zfs_ssd     0B  2.14T        0B     96K             0B      2.14T

on ta veel mirror-0 ja on katki ka

# zpool status -v
  pool: sn_zfs_ssd
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
  scan: scrub repaired 0B in 00:22:56 with 0 errors on Sun Feb 13 00:46:58 2022
config:

        NAME                      STATE     READ WRITE CKSUM
        sn_zfs_ssd                DEGRADED     0     0     0
          wwn-0x5002538e40a0eb32  DEGRADED     3     0    37  too many errors
          wwn-0x5002538e40a05fa2  DEGRADED     3     2 1.39K  too many errors

errors: Permanent errors have been detected in the following files:

        sn_zfs_ssd/vm-102-disk-5:<0x1>

Tundub, et selles olukorras võib olla abi sellisest protsetuurist

  • tekitada vabale meediale, nt lvm volume peale vastavatest scsi seadmetest dd abil plokkseadme tasemel koopiad

fff

  • tekitada proxmox arvutit (nt virtuaalne) ja võtta seal külge koopiaid sisaldav failisüsteem ja lisaks veel suurem muu failisüsteem
  • moodustada virtuaalne arvuti ja teha talle kõik seadmed (kokku neli) nähtavaks
  • teha zpool import
  • teha ühe kaupa zpool seadme asendus suurema vastu (toimub resilvering)
# zpool replace sn_zfs_ssd /dev/vdb /dev/vdd
# zpool replace sn_zfs_ssd /dev/vdc /dev/vde

# zpool status
  pool: sn_zfs_ssd
 state: ONLINE
  scan: resilvered 445G in 00:44:11 with 0 errors on Sun May 15 23:06:07 2022
config:

	NAME        STATE     READ WRITE CKSUM
	sn_zfs_ssd  ONLINE       0     0     0
	  vdd       ONLINE       0     0     0
	  vde       ONLINE       0     0     0
<pre>

* paistab, et süsteem on oluliselt paranenud, nüüd saab öelda edasi zfs online -e sn_zfs_ssd /dev/vdd ja zpool online -e sn_zfs_ssd /dev/vde

===Misc===

suuruste arvutamine

<pre>
# a=0; poolname="sn_zfs_ssd"; for i in `zfs list -H -r $poolname -o name,used -p | grep "^$poolname/" | awk {'print $2'}`; do a=`echo $a + $i | bc`; done; sumg=`echo $a/1024^3 | bc`; echo $sumg
1645

# a=0; poolname="zp_evo_870"; for i in `zfs list -H -r $poolname -o name,used -p | grep "^$poolname/" | awk {'print $2'}`; do a=`echo $a + $i | bc`; done; sumg=`echo $a/1024^3 | bc`; echo $sumg
783

kopeerimine, variant 1

# for i in `zfs list -t volume -r sn_zfs_ssd | grep ^sn | awk {'print $1'} | cut -d "/" -f 2`; do echo $i; zfs send sn_zfs_ssd/$i | zfs receive zp_evo_870/$i; echo $?; done

kopeerimine, variant 2

Kasulikud lisamaterjalid

  • TODO