{{tag>[zfs libvirt]}}
====== ZFS ======
apt install zfsutils-linux
sudo zfs list
create filesystem '''lab''' on '''LXD''' pool
sudo zfs create LXD/lab
sudo zfs set mountpoint=/lab LXD/lab
sudo zfs destroy LXD/lab
===== create pool =====
Pool can be created on disk or partition. In case of partition this is an example
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 # ???
zpool create lxd /dev/sda4
===== docker =====
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
/etc/docker/daemon.json
{
"default-address-pools":
[
{"base":"172.16.0.0/21","size":26}
],
"storage-driver": "zfs",
"features": {
"buildkit" : true
}
}
===== libvirt =====
add ZFS pool to libvirt
# 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
create volume (not possibile in virt-manager)
virsh vol-create-as --pool zfspool --name maas2 --capacity 10G
destroy volume
virsh vol-delete --pool zfspool maas2
add volume to instance
create file mydevice.xml
add volume
virsh attach-device --config juju-controller mydevice.xml
===== virtualbox =====
create volume
zfs create -V 50G rpool/win7
create vmdk file that point /dev/zvol/rpool/win7 (/opt/vms/win7.vmdk keeps little)
VBoxManage internalcommands createrawvmdk -filename /opt/vms/win7.vmdk -rawdisk /dev/zvol/rpool/win7
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/
vfs.zfs.l2arc_noprefetch=0
===== zfs root from live system =====
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
===== remote replication =====
in origin make a snapshot of volume
zfs snap storage/cimiteriali@snap1
destination volume cannot be exists
zfs send -R storage/cimiteriali@snap1 | pv | ssh zfs1 zfs recv -F -u rpool/cimiteriali
# zfs destroy storage/cimiteriali@snap1
on destination destroy snapshot to have volume
zfs destroy rpool/cimiteriali@snap1
# volsize ?
zfs get volsize,reservation rpool/cimiteriali
zfs set volsize=20G rpool/cimiteriali
zfs get volsize,reservation rpool/cimiteriali
==== syncoid ====
* https://github.com/jimsalterjrs/sanoid
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
using from server zfs1 (to server zfs2)
syncoid rpool/share-os root@zfs2:rpool/share-os
===== incremental backup =====
consider a FS rpool/test
FS=rpool/test
# make a first snapshot
zfs snapshot rpool/test@snap01
if files are added to FS used space of FS grow
sync && zfs list -t all -r $FS
GROW --->rpool/test 200M 138G 200M /test
rpool/test@01 64K - 100M -
if files are changed in FS used space of SNAP grow
sync && zfs list -t all -r $FS
rpool/test 200M 138G 200M /test
GROW --->rpool/test@01 100M - 100M -
------> CRYPTOLOCKER grows SNAP
check crypto locker every day
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
===== swap =====
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
echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab
swapon -av