ZFS краткие заметки
zdb
zfs_arc_max
zfs encryption
zfs
magic number
ZFS краткие заметки
Установка ограничения по используемой RAM
### Limit ZFS memory consumption to 1/8 total RAM
TRAM=`cat /proc/meminfo | head -n 1 | awk '{ print $2}'`
ZRAM=`expr totram / 8`
echo "options zfs zfs_arc_max=$ZRAM" | sudo tee -a /etc/modprobe.d/zfs.conf
https://blog.programster.org/zfs-on-linux-running-out-of-memory
Зависимости для установки в Debian/Ubuntu
sudo apt-get install build-essential autoconf libtool gawk alien fakeroot linux-headers-$(uname -r)
sudo apt-get install zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libssl-dev
sudo apt-get install parted lsscsi ksh
Шифрованная ZFS
Шифрование на собственном уровне поддерживается только с 7-ой версии zfs
Ее нет в репозиториях даже для последней версии Debian 9.7 проверено 27.01.19
Соответственно, надо компилировать из исходников.
Официальное рабочее описание процедуры здесь:
https://github.com/zfsonlinux/zfs/wiki/Building-ZFS
cd /opt
git clone https://github.com/zfsonlinux/zfs
cd ./zfs
git checkout master
sh autogen.sh
./configure
make -s -j$(nproc)
После make надо выполнить от root
make install
modprobe zfs
27.01.18 установил версию 0.8.0-rc3_24_gc853f382d
Если не запускается - проверить и удалить модуль spl - он не нужен.
Еще надо отметить, что начиная с версии 7.1 библиотека SPL входит в единый пакет исходников, вместе с ZFS. Для версий \<= 7.0 эти пакеты шли по отдельности.
rmmod /lib/modules/4.9.0-8-amd64/extra/spl/spl.ko
Создание шифрованной файловой системы:
zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt -o utf8only=on -o atime=off -o compression=lz4 sigma/encrypted
Монтирование шифрованной ФС:
zfs mount -l sigma/encrypted
Алиасы дисковых устройств
Использовать уникальные длинные имена дисковых устройств из каталогов /dev/disk/by-* вовсе не обязательно каждый диск знает состав пула по wwn.
Для удобства можно определить алиасы в файле /etc/zfs/vdev_id.conf :
alias disk1 wwn-0x5000c50045957af3-part2
alias disk2 wwn-0x50004cf20b0d7fa0-part2
Если используете multipath, в том же файле добавьте следующие опции:
multipath yes
# PCI_ID HBA PORT CHANNEL NAME
channel 85:00.0 1 A
channel 85:00.0 0 B
channel 86:00.0 1 A
channel 86:00.0 0 B
Добавление зеркала к существующему пулу
Смотрим текущее состояние пула:
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
errors: No known data errors
Добавляем:
# zpool add tank mirror c0t3d0 c1t3d0
# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
c0t3d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
errors: No known data errors
https://blog.fosketts.net/2017/12/11/add-mirror-existing-zfs-drive/
Проверка и лечение отказавшего пула
Для проверки состояния пула можно использовать утилиту zdb Display zpool debugging and consistency information.
zdb gamma | grep txg
и попробовать импортировать раннюю группу в режиме чтения
zpool -T txg -o readonly=on gamma
#покажет «лишние» блоки
zdb -bb gamma
#покажет, если остались какие следы файлов
zdb -dd gamma
Если на помогает ключ -f, то для задействования дисков надо переписать “magic number” на них.
Например так:
dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc
https://serverfault.com/questions/842955/restoring-data-after-zfs-destroy
Репликация снепшота в другую ФС:
Реплицирование набора данных на другую машину выполняется так:
# zfs send datapool/docs@today | ssh server_other zfs recv backuppool/backup
А если на той же машине - в другой пул, то так:
zfs send datapool/docs@today | zfs receive backuppool/backup