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