Установите zfs на Debian 9 Stretch

11

Я попытался установить zfs на Debian 9.1, однако у меня возникают некоторые ошибки.

Моя первая установка была только zfs-dkms, однако я прочитал в сети, что для запуска zfs-dkms требуется также spl-dkms.


Мои шаги состояли в том, чтобы изменить мой sources.list, добавив взнос non-free следующим образом:

/etc/apt/sources.list

deb http://ftp.nl.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.nl.debian.org/debian/ stretch main contrib non-free

deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

# stretch-updates, previously known as 'volatile'
deb http://ftp.nl.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://ftp.nl.debian.org/debian/ stretch-updates main contrib non-free

Завершил классическое обновление apt-get, а затем попытался установить zfs со следующим:

apt-get install spl-dkms

и только после

apt-get install zfs-dkms

В результате у меня есть эти ошибки:

root@debian:/etc/apt# apt-get install zfs-dkms
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libnvpair1linux libuutil1linux libzfs2linux libzpool2linux zfs-zed zfsutils-linux

...

DKMS: install completed.
Setting up libzpool2linux (0.6.5.9-5) ...
Setting up libzfs2linux (0.6.5.9-5) ...
Setting up zfsutils-linux (0.6.5.9-5) ...
Created symlink /etc/systemd/system/zfs-mount.service.wants/zfs-import-cache.service â /lib/systemd/system/zfs-import-cac
Created symlink /etc/systemd/system/zfs.target.wants/zfs-import-cache.service â /lib/systemd/system/zfs-import-cache.serv
Created symlink /etc/systemd/system/zfs-share.service.wants/zfs-mount.service â /lib/systemd/system/zfs-mount.service.
Created symlink /etc/systemd/system/zfs.target.wants/zfs-mount.service â /lib/systemd/system/zfs-mount.service.
Created symlink /etc/systemd/system/zfs.target.wants/zfs-share.service â /lib/systemd/system/zfs-share.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zfs.target â /lib/systemd/system/zfs.target.
zfs-import-scan.service is a disabled or a static unit, not starting it.
Job for zfs-mount.service failed because the control process exited with error code.
See "systemctl status zfs-mount.service" and "journalctl -xe" for details.
zfs-mount.service couldn't start.
Job for zfs-share.service failed because the control process exited with error code.
See "systemctl status zfs-share.service" and "journalctl -xe" for details.
zfs-share.service couldn't start.
Setting up zfs-zed (0.6.5.9-5) ...
Created symlink /etc/systemd/system/zed.service â /lib/systemd/system/zfs-zed.service.
Created symlink /etc/systemd/system/zfs.target.wants/zfs-zed.service â /lib/systemd/system/zfs-zed.service.
Processing triggers for libc-bin (2.24-11+deb9u1) ...

Чтение journalctl -xe как предложено, я получаю:

root@debian:/etc/apt# journalctl -xe
Aug 02 23:13:13 debian systemd[1]: zfs-share.service: Main process exited, code=exited, status=1/FAILURE
Aug 02 23:13:13 debian systemd[1]: Failed to start ZFS file system shares.
-- Subject: Unit zfs-share.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-share.service has failed.
--
-- The result is failed.
Aug 02 23:13:13 debian systemd[1]: zfs-share.service: Unit entered failed state.
Aug 02 23:13:13 debian systemd[1]: zfs-share.service: Failed with result 'exit-code'.
Aug 02 23:13:13 debian systemd[1]: Starting Mount ZFS filesystems...
-- Subject: Unit zfs-mount.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-mount.service has begun starting up.
Aug 02 23:13:13 debian zfs[81481]: The ZFS modules are not loaded.
Aug 02 23:13:13 debian zfs[81481]: Try running '/sbin/modprobe zfs' as root to load them.
Aug 02 23:13:13 debian systemd[1]: zfs-mount.service: Main process exited, code=exited, status=1/FAILURE
Aug 02 23:13:13 debian systemd[1]: Failed to start Mount ZFS filesystems.
-- Subject: Unit zfs-mount.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-mount.service has failed.
--
-- The result is failed.
Aug 02 23:13:13 debian systemd[1]: zfs-mount.service: Unit entered failed state.
Aug 02 23:13:13 debian systemd[1]: zfs-mount.service: Failed with result 'exit-code'.
Aug 02 23:13:13 debian systemd[1]: Starting ZFS file system shares...
-- Subject: Unit zfs-share.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-share.service has begun starting up.
Aug 02 23:13:13 debian systemd[81483]: zfs-share.service: Failed at step EXEC spawning /usr/bin/rm: No such file or direc
-- Subject: Process /usr/bin/rm could not be executed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The process /usr/bin/rm could not be executed and failed.
--
-- The error number returned by this process is 2.

Что здесь не так? Я что-то пропустил? Как пакет zfs-linux связан с установкой zfs?

Как правильно установить zfs в Debian 9?

user3450548
источник
Какой выход dkms status | grep zfs?
GAD3R

Ответы:

9

Фактический ответ @cas хороший, но есть некоторые исправления, которые необходимо применить.

Итак, давайте возьмем новую установку Debian 9 и предположим, что не бесплатные репозитории contrib также не включены.


Шаг 0 - Включите репозитории non-free contrib

Я использовал, sedчтобы найти и заменить слово главное внутри/etc/apt/sources.list

sed -i 's/main/main contrib non-free/g' /etc/apt/sources.list

apt-get update

Шаг 1 - Установка ZFS

Поскольку последние исправления spl-dkmsправильно рассматриваются как zfs-dkmsзависимости, поэтому они вызываются автоматически, и нет необходимости устанавливать их вручную zfs-dkms. Символьная ссылка необходима из-за ошибки в дистрибутиве zfs в Debian, которая не ищет rmдвоичный файл в правильной позиции.

apt -y install linux-headers-$(uname -r)

ln -s /bin/rm /usr/bin/rm

apt-get -y install zfs-dkms

Шаг 2 - Перезапуск ZFS

В этот момент zfs-dkms установлен, но выдает ошибки journalctl -xe; чтобы правильно запустить zfs, используйте:

/sbin/modprobe zfs

systemctl restart zfs-import-cache
systemctl restart zfs-import-scan
systemctl restart zfs-mount
systemctl restart zfs-share

Шаг 3 - ВЫ ДОЛЖНЫ СОЗДАТЬ, КАК МИНИМУМ, ОДИН ZPOOL

В этот момент я обнаружил, что вы должны создать zpool перед перезагрузкой, иначе zfs не загрузит нужные модули, если zpools нет. Это своего рода механизм экономии ресурсов (но даже в этом случае он все равно будет выдавать ошибки journalctl -xe)

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864348

«Мы этого не делаем, потому что модули ZFS испортили бы ядро. Если zpool недоступен, его не следует загружать».

Если вы пропустите эту часть, вы должны начать с шага 2

Например, используя пример, предоставленный @cas, вы можете создать этот файл на основе zpool или напрямую создать свой диск на основе.

truncate -s 100M /root/z1
truncate -s 100M /root/z2
zpool create tank /root/z1 /root/z2
zpool scrub tank
zpool status

тогда после rebootвсе будет работать без ошибок вjournalctl -xe

user3450548
источник
3

Небольшие изменения для меня в Debian 9.4 - после добавления источников в Apt:

apt-get install linux-headers-amd64       # not tied to specific kernel version
apt-get install zfs-dkms zfsutils-linux   # my apt recommends is off

lsblk                                     # double-check which disks to pool

zpool create -f jeff -o ashift=12 -o autoexpand=on -o autoreplace=on mirror sdb sdd
zfs set mountpoint=/var/jeff jeff
zfs set compression=lz4 jeff
zfs create jeff/blog
zfs create jeff/docs
zfs create jeff/pics
zfs set compression=off jeff/pics

df -h

Гора НЕ присутствовала, вздохнула - обнаружила, что существует существующее /var/jeffс контентом - убрала это с пути и сделала reboot...

После перезагрузки:

df -htzfs
Filesystem        Size  Used Avail Use% Mounted on
jeff              849G  128K  849G   1% /var/jeff
jeff/blog         850G  128K  849G   1% /var/jeff/blog
jeff/docs         856G  128K  849G   1% /var/jeff/docs
jeff/pics         850G  128K  849G   1% /var/jeff/pics

Ура - все настоящее и защищенное от гниения :)

Джефф
источник
+1, но настоятельно рекомендую использовать, /dev/disk/by-id/?а не /dev/sd?устройства. Либо используйте имена by-id при создании пула, либо исправьте позже с zpool export <pool>последующим zpool import -d /dev/disk/by-id/ <pool>. Эти имена, в отличие от / dev / sd *, сохранятся при перезагрузке. Кроме того, если у вас есть принтер этикеток, вы можете печатать этикетки с короткими версиями имен устройств by-id (обычно это часть с серийным номером имени, которая делает хорошую короткую уникальную этикетку) и маркировать диски, чтобы сделать их легко определить, если они когда-либо должны быть заменены.
Cas
Хммм - но ZFS не заботится о псевдонимах диска, используемых во время создания - вся информация записывается в zfs-part9 на диске - и это то, что используется для создания массива. Мне действительно все равно, изменится ли то, что было / dev / sdb, на что-то другое в будущем, и я всегда проверяю lsblk -fэто перед тем, как сходить с аппаратным обеспечением привода - для наших производственных серверов инструмент Dell hdd blink полезен в отношении текущих псевдоним физического блока :) - Я думаю, что / dev / disk / by-id более полезен для других систем монтирования, которые не имеют встроенной согласованности ZFS - например, fstab.
Джефф
Использование by-id даст вам значимые / полезные имена (идентифицирующие марку, модель и серийный номер каждого диска) в zpoolкомандах like statusи list, которые можно легко скопировать в любые необходимые команды zpool offline / detach / replace / etc. sdaне говорит вам ничего полезного. ata-ST4000VN008-2DR166_ZDH35XXXточно определяет, что это за диск и его серийный номер. Вы все еще можете получить (текущие) короткие имена разработчиков, если хотите, чтобы они использовались с -Lопциями zpool list, zpool statusи т. Д. (По моему опыту, в основном полезно с zpool list -L -v).
Cas
IME, значимые имена помогают уменьшить человеческую ошибку. Это легко напечатать, например, sdd как sdf. Гораздо сложнее набрать неверное имя.
Cas
Lol - многие люди дают одну и ту же рекомендацию - мне лично легче запомнить и набрать sdc sde sdf и sdg. Мы покупаем диски партиями, и все они начинаются с одинаковых приблизительно 48 символов и имеют только суффиксы из 2-4 цифр, которые различаются. Люди не вводят имена по идентификаторам - они используют завершение табуляции - с большей вероятностью приведут к ой IMHO. Я считаю, что различать одну букву в трехзначном коде гораздо проще, чем 2-4-значную в названии из 52 символов. Я знаю, что многие люди также рекомендуют UUID. Поскольку ZFS это не волнует, я думаю, что буду придерживаться того, что нахожу легче - чем меньше, тем лучше :)
Джефф
3

Я только что создал совершенно новую стрейч ВМ, чтобы проверить это. Минимальная установка (только ssh и стандартные системные инструменты), отредактируйте sources.list для добавления contrib и non-free, затем:

apt-get install spl-dkms zfs-dkms

Вы также можете установить вручную zfsutils-linux. Он должен быть установлен автоматически при установке, zfs-dkmsно зависимости могут отличаться для разных выпусков Debian и для разных версий пакетов Debian ZoL:

apt-get install  zfsutils-linux

Похоже, что в файле системного модуля есть ошибка zfs-share. Он пытается запустить /usr/bin/rmвместо /bin/rm.

Быстрое решение заключается в запуске ln -s /bin/rm /usr/binили, альтернативно:

cd /etc/systemd/system
cp -a /lib/systemd/system/zfs-share.service .
edit zfs-share.service and change `/usr/bin/rm` to `/bin/rm`

и затем перезапустите сервисы zfs:

systemctl restart zfs-import-cache
systemctl restart zfs-import-scan
systemctl restart zfs-mount
systemctl restart zfs-share

ПРИМЕЧАНИЕ. Я вручную запустил modprobe zfsперед перезапуском любую из служб zfs. Я не уверен, сделают ли они это автоматически или нет, так что, возможно, вам придется сделать это тоже.

Кстати, вы, вероятно, apt-get install zfs-initramfsтоже хотите , чтобы гарантировать, что zfs загружается во время initramfs.


Я проверил, что это работает с:

# truncate -s 100M /root/z1
# truncate -s 100M /root/z2
# zpool create tank mirror /root/z1 /root/z2 

# zfs set compression=lz4 tank
# rsync -ax /etc /tank/
# du -sch /etc /tank/etc/
3.5M    /etc
825K    /tank/etc/
4.3M    total

# zpool scrub tank
# zpool status
  pool: tank
 state: ONLINE
  scan: scrub repaired 0 in 0h0m with 0 errors on Thu Aug  3 19:28:21 2017
config:

    NAME          STATE     READ WRITE CKSUM
    tank          ONLINE       0     0     0
      mirror-0    ONLINE       0     0     0
        /root/z1  ONLINE       0     0     0
        /root/z2  ONLINE       0     0     0

errors: No known data errors

Zpool работает и / tank автоматически устанавливается после перезагрузки.

Вывод: это работает сейчас.


Кстати, эта виртуальная машина в качестве диска использует ZFS zvol, созданный в моей основной sidсистеме. Я сделал снимок, если он был сделан сразу после первоначальной установки, перед установкой spl-dkms и zfs-dkms, чтобы я мог быстро вернуться и начать заново, если что-то пошло не так.

Сначала я сделал zvol только с 1 ГБ, а позже мне потребовалось увеличить его, чтобы было достаточно места для build-essential, linux-headers-amd64 и т. Д .:

# zfs list -r -t all export/volumes/stretch
NAME                                         USED  AVAIL  REFER  MOUNTPOINT
export/volumes/stretch                      6.25G   834G  1.77G  -
export/volumes/stretch@2017-08-03-18:31:04   279M      -  1.09G  -

установка compression=lz4на танке в ВМ, вероятно, хуже, чем бесполезная - у zvol уже есть сжатие lz4.

саз
источник
Я попытался установить его на новую новую виртуальную машину, но у меня все еще проблемы, я думаю ... некоторые службы не запускаются правильно .. Насколько я вижу, список ошибок ZFS DKMS заполнен ошибками "не удается установить" отчеты. Интересно, нормально ли, что разработчики пропускают месяцы после стольких запросов на исправление ошибок, воспроизводимых просто с помощью apt-get install zfs-dkms ..
user3450548
В части, где вы просите каталог cd, вы имели в виду: / etc / systemd / system /? потому что / etc / systemd / service не существует .. также у меня есть это сообщение: «Не удалось перезапустить zfs-import-mount.service: модуль zfs-import-mount.service не найден». и «Не удалось перезапустить zfs-import-share.service: модуль zfs-import-share.service не найден».
user3450548
Кажется, у меня также есть проблемы со службой ZFS-ZED, прочитав journalctl -xe: 11 августа 23:03:23 debian zed [70734]: демон событий ZFS 0.6.5.9-5 (PID 70734) 11 августа 23:03:23 debian zed [70734]: не удалось инициализировать libzfs 11 авг. 23:03:23 debian systemd [1]: zfs-zed.service: основной процесс завершен, код = завершен, status = 1 / FAILURE 11 августа 23:03:23 debian systemd [1]: zfs-zed.service: модуль вошел в состояние отказа. 11 августа, 23:03:23 debian systemd [1]: zfs-zed.service: не удалось с результатом 'код выхода'.
user3450548