ZFS
Links[Bearbeiten]
Kommandos[Bearbeiten]
# RAM-Belegung von ZFS Anzeigen: echo $(( `cat /proc/spl/kmem/slab | tail -n +3 | awk '{ print $3 }' | tr "\n" "+" | sed "s/$/0/"` )) # RAID1 einrichten: zpool create my-samsung-mirror1 mirror /dev/sda1 /dev/db1 # RAID10 einrichten: zpool create my-samsung-mirror2 mirror /dev/DISK1 /dev/disk/DISK2 mirror /dev/DISK3 /dev/DISK4 # RAID5 einrichten: zpool create meinRAIDZ raidz /dev/disk/by-id/DISK1 /dev/disk/by-id/DISK2 /dev/disk/by-id/DISK3 zpool list zpool status # Pool testen: zpool scrub mypool # ZFS-Dateisystem einrichten: mkdir -p /media/db/mysql /media/db/pg zfs create -o acltype=posixacl -o compression=zstd-3 -o dnodesize=auto -o normalization=formD -o relatime=on -o mountpoint=/media/db/mysql db/mysql zfs create -o acltype=posixacl -o compression=zstd-3 -o dnodesize=auto -o normalization=formD -o relatime=on -o mountpoint=/media/db/pg db/pg zfs list # Quota: zfs set quota=10G meinPool/FS1 zfs get atime # readonly: available compressratio creation guid mounted snapshot_count type used written zfs set compression=zlib-3 # rw: atime checksum compression dedup mountpoint quota readonly relatime utf8only
Mounten[Bearbeiten]
zfs get mountpoint meinPool/FS1 zfs set mountpoint=/media/meinPool_FS1 meinPool/FS1 # Wenn man mount/umount verwenden will: Legacy-Einhängepunkte zfs set mountpoint=legacy meinPool/FS1
- ZFS-Dateisysteme können nur mit Legacy-Dienstprogrammen verwaltet werden (indem Sie die Eigenschaft „mountpoint“ auf „legacy“ setzen)
- Dann sind die Befehle mount und umount sowie die Datei /etc/vfstab relevant.
- ZFS hängt Legacy-Dateisysteme beim Systemstart nicht automatisch ein, die ZFS-Befehle zfs mount und zfs umount funktionieren nicht!
Snapshots[Bearbeiten]
zfs list -t snapshot # Sortiert nach Name, Erzeugung zfs list -t snapshot -o name,creation -s creation # Erzeugen: als */.zfs/snapshot/Sun zfs snapshot -r meinPool/FS1@Sun zfs rollback -r meinPool/FS1@Sun zfs destroy meinPool/FS1@Sun zfs diff meinPool/FS1@snapshot1 meinPool/FS1@Sat
- im normalen Mountverzeichnis gibt es den unsichtbaren Ordner .zfs. Auch wenn dieser Ordner auch mit ls -la nicht sichtbar ist, so kann dennoch hinein gewechselt werden. Dieses Verhalten ist praktisch damit tools wie rsync nicht versehentlich snapshots mitkopieren.
Snapshots übertragen[Bearbeiten]
# Initial: zfs send meinPool/FS1@snap1 | ssh root@$Zielhost zfs recv meinBACKUPPool/FS1 # Ändern: dd if=/dev/zero bs=1024000 count=1024 >> /meinPool/FS1/test2 # Snapshot anlegen: zfs snapshot -r meinPool/FS1@snap2 # Snapshot inkrementell senden (lt. ifconfig werden 1G übertragen): zfs send -i meinPool/FS1@snap1 meinPool/FS1@snap2 | ssh root$Zielhost zfs recv meinBACKUPPool/FS1
ZFS Clones[Bearbeiten]
Ein ZFS clone ist eine schreibbare Kopie eines Snapshots. Der Snapshot kann so lange nicht gelöscht werden wie der Clone besteht.
zfs snapshot -r meinPool/FS1@snapshot1 zfs clone meinPool/FS1@snapshot1 meinPool/FS2
[Bearbeiten]
- Shares sind NFS oder SMB-Freigaben
zfs create rpool/fs1 zfs set share=name=fs1,path=/rpool/fs1,prot=nfs rpool/fs1 zfs set share=name=pp,path=/pub,prot=nfs,sec=sys,rw=*,public rpool/public zfs set sharenfs=on rpool/fs1 cat /etc/dfs/sharetab # /rpool/fs1 fs1 nfs sec=sys,rw
- Optionen:
- description=string rw=host1:host2:host3 rw=* ro=host1:host2 root=root
- prot: nfs|smb
- sec: sys|dh|krb5
- NFS-Optionen (zwischen prot= ... und sec=...:
- anon=user-name|uid nosub=true|false nosuid=true|false aclok=true|false
- public=true|false index=filename log=TYPE_LOGTAG cksum=TYPE_STRINGSET
- SMB-Optionen:
- ad-container=string abe=[true|false] csc=[disabled|manual|auto|vdo]
- catia=[true|false] guestok=[true|false] ro=access-list rw=access-list none=access-list
- Infos:
zfs get sharenfs rpool/fs1 zfs get share rpool/fs1
- Entfernen:
# Namen ermitteln: zfs get share # rpool/ds share name=ds,path=/ds,prot=nfs local # Entfernen: zfs set -c share=name=ds rpool/ds
ZFS Volumes[Bearbeiten]
Statt Dateisystemen kann ZFS auch volumes anlegen, das sind Blockgeräte die z.B. in virtualisierten Gästen verwendet werden können.
Aufruf ist wie beim Dateisystem anlegen, nur zusätzlich mit dem Parameter „-V $Größe“:
zfs create -V 2G tank/volumes/v2
Das Volume steht dann unter /dev/tank/volumes/v2 zur Verfügung und kann normal wie blockdevice verwendet werden.
Pool zu RAID1 umwandeln[Bearbeiten]
# Pool ohne RAID anlegen:
zpool create pdata /dev/nvme0n1p6
zfs create -o acltype=posixacl -o compression=zstd-3 -o dnodesize=auto -o normalization=formD \
-o relatime=on -o mountpoint=/media/fs.many data/fs.many
...
# Pool erweitern:
zpool attach pdata /dev/nvme0n1p6 /dev/sda6
- Wenn die Meldung kommt: new device has a different optimal sector size; use the option '-o ashift=N'...
zdb pdata | grep -i ashift
# ashift: 9
zpool attach pdata /dev/nvme0n1p6 /dev/sda6 -o ashift=9
Konfiguration[Bearbeiten]
- /etc/modprobe.d/zfs.conf
# RAM auf 8 G beschränken: options zfs zfs_arc_max=8589934592
Fehlerfall[Bearbeiten]
zpool status # === pool: rpool state: ONLINE scan: ... config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 nvme-eui.0000000001000000e4d25c68508e5101-part3 ONLINE 0 0 0 ata-CT1000MX500SSD1_2009E2901DCE-part6 ONLINE 0 0 0 # === zpool detach rpool /dev/disk/by-id/ata-CT1000MX500SSD1_2009E2901DCE-part3 # Platte tauschen, dann: zpool attach rpool /dev/disk/by-id/nvme-eui.0000000001000000e4d25c68508e5101-part3 /dev/disk/by-id/ata-SAMSUNGxxxx_3B99E2901D77-part6 # Danach Kontrolle des "Resilver"-Status mit: zpool status rpool ... scan: resilvered 1.07G in 0 days 00:00:03 with 0 errors on Sat Feb 19 06:20:02 2022
Fehler vom Feb. 2023[Bearbeiten]
- Meldung von Smartctl:
Device: /dev/sdc [SAT], 5 Offline uncorrectable sectors Device info: HGST HDN726060ALE610, S/N:NAHNMT7Y, WWN:5-000cca-242d7792f, FW:APGNT517, 6.00 TB
- zpool status
NAME STATE READ WRITE CKSUM pbag ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 wwn-0x5000cca24dc4109c-part4 ONLINE 0 0 0 wwn-0x5000cca242d7792f-part4 ONLINE 0 0 0
- Kontrolle: ls -ld /dev/disk/by-id/wwn-0x5000cca242d7792f-part4
lrwxrwxrwx 1 root root 10 Feb 25 17:08 /dev/disk/by-id/wwn-0x5000cca242d7792f-part4 -> ../../sdc4
- Daraus ergibt sich:
zpool detach rpool /dev/disk/by-id/wwn-0x5000cca242d7792f-part4