Show pageOld revisionsBacklinksAdd to bookExport to PDFBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{tag>[zfs libvirt]}} ====== ZFS ====== <code bash> apt install zfsutils-linux </code> <code> sudo zfs list </code> create filesystem '''lab''' on '''LXD''' pool <code> sudo zfs create LXD/lab sudo zfs set mountpoint=/lab LXD/lab </code> <code> sudo zfs destroy LXD/lab </code> ===== create pool ===== Pool can be created on disk or partition. In case of partition this is an example <code> Number Start (sector) End (sector) Size Code Name 1 1026048 74426367 35.0 GiB 8300 Linux filesystem 2 2048 1026047 500.0 MiB EF02 3 74426368 76474367 1000.0 MiB 8200 4 76474368 976756735 429.3 GiB BF01 # <------- zfs 5 976756736 976773119 8.0 MiB BF07 # ??? </code> <code> zpool create lxd /dev/sda4 </code> ===== docker ===== <code> systemctl stop docker rm -fR /var/lib/docker zfs create -o mountpoint=/var/lib/docker rpool/docker-root zfs create -o mountpoint=/var/lib/docker/volumes rpool/docker-volumes systemctl start docker </code> /etc/docker/daemon.json <code> { "default-address-pools": [ {"base":"172.16.0.0/21","size":26} ], "storage-driver": "zfs", "features": { "buildkit" : true } } </code> ===== libvirt ===== add ZFS pool to libvirt <code> # in bionic apt install libvirt-daemon-driver-storage-zfs && systemctl restart libvirtd # create zfs filesystem zfs create rpool/libvirt virsh pool-define-as --name zfspool --source-name rpool/libvirt --type zfs virsh pool-start zfspool virsh pool-autostart zfspool </code> create volume (not possibile in virt-manager) <code> virsh vol-create-as --pool zfspool --name maas2 --capacity 10G </code> destroy volume <code> virsh vol-delete --pool zfspool maas2 </code> add volume to instance create file mydevice.xml <code> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/zvol/rpool/libvirt/juju-controller'/> <target dev='vda' bus='virtio'/> </disk> </code> add volume <code> virsh attach-device --config juju-controller mydevice.xml </code> ===== virtualbox ===== create volume <code bash> zfs create -V 50G rpool/win7 </code> create vmdk file that point /dev/zvol/rpool/win7 (/opt/vms/win7.vmdk keeps little) <code> VBoxManage internalcommands createrawvmdk -filename /opt/vms/win7.vmdk -rawdisk /dev/zvol/rpool/win7 </code> now use /opt/vms/win7.vmdk file as virtual hard disk for virtualbox guest ===== tuning ===== pool on SSD https://storagetuning.wordpress.com/2011/12/01/zfs-tuning-for-ssds/ <file yaml /etc/systctl.conf> vfs.zfs.l2arc_noprefetch=0 </file> ===== zfs root from live system ===== <code bash> zpool export rpool zpool import -R /mnt rpool umount everything inside /mnt zfs mount rpool/ROOT/ubuntu zfs set devices=off rpool mount --rbind /dev /mnt/dev mount --rbind /proc /mnt/proc mount --rbind /sys /mnt/sys chroot /mnt /bin/bash --login ... work here exit mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {} zpool export rpool reboot </code> ===== remote replication ===== in origin make a snapshot of volume <code bash> zfs snap storage/cimiteriali@snap1 </code> destination volume cannot be exists <code bash> zfs send -R storage/cimiteriali@snap1 | pv | ssh zfs1 zfs recv -F -u rpool/cimiteriali # zfs destroy storage/cimiteriali@snap1 </code> on destination destroy snapshot to have volume <code bash> zfs destroy rpool/cimiteriali@snap1 # volsize ? zfs get volsize,reservation rpool/cimiteriali zfs set volsize=20G rpool/cimiteriali zfs get volsize,reservation rpool/cimiteriali </code> ==== syncoid ==== * https://github.com/jimsalterjrs/sanoid <code> apt install pv lzop mbuffer wget https://raw.githubusercontent.com/jimsalterjrs/sanoid/master/syncoid -O /usr/local/bin/syncoid chmod +x /usr/local/bin/syncoid </code> using from server zfs1 (to server zfs2) <code> syncoid rpool/share-os root@zfs2:rpool/share-os </code> ===== incremental backup ===== consider a FS rpool/test <code bash> FS=rpool/test # make a first snapshot zfs snapshot rpool/test@snap01 </code> if files are added to FS used space of FS grow <code bash> sync && zfs list -t all -r $FS GROW --->rpool/test 200M 138G 200M /test rpool/test@01 64K - 100M - </code> if files are changed in FS used space of SNAP grow <code bash> sync && zfs list -t all -r $FS rpool/test 200M 138G 200M /test GROW --->rpool/test@01 100M - 100M - </code> ------> CRYPTOLOCKER grows SNAP check crypto locker every day <code bash> LIMIT_MB=100 FS=rpool/test USED=$(zfs get -Hp used $FS@01 | cut -f3) if [ $USED -gt $(($LIMIT_MB*1000*1000)) ]; then echo "CRYPTOLOCKER detected" fi </code> ===== swap ===== <code> zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \ -o logbias=throughput -o sync=always \ -o primarycache=metadata -o secondarycache=none \ -o com.sun:auto-snapshot=false rpool/swap mkswap -f /dev/zvol/rpool/swap </code> <code> echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab swapon -av </code> tips/zfs.txt Last modified: 2023/01/18 11:22by sscipioni