Zainstaluj ZFS na Debian 9 Stretch

11

Próbowałem zainstalować ZFS na Debianie 9.1, jednak występują pewne błędy.

Moja pierwsza instalacja dotyczyła tylko zfs-dkms, ale przeczytałem w sieci, że do uruchomienia zfs-dkms wymagany jest również spl-dkms.


Moje kroki polegały na zmianie źródła.list dodając contrib non-free w następujący sposób:

/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

Wykonano klasyczną aktualizację apt-get, a następnie próbowałem zainstalować ZFS z następującymi elementami:

apt-get install spl-dkms

i dopiero po

apt-get install zfs-dkms

W rezultacie mam te błędy:

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) ...

Czytanie Journalctl -xe zgodnie z sugestią dostaję:

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.

Co tu jest nie tak? Brakowało mi czegoś innego? W jaki sposób pakiet zfs-linux jest powiązany z instalacją zfs?

Jaki jest prawidłowy sposób instalacji ZFS w Debianie 9?

użytkownik3450548
źródło
Jaka jest wydajność dkms status | grep zfs?
GAD3R

Odpowiedzi:

9

Rzeczywista odpowiedź @cas jest dobra, ale należy wprowadzić pewne poprawki.

Więc weźmy świeżą instalację Debiana 9 i zakładając, że niewolne repozytoria contrib również nie są włączone.


Krok 0 - Włącz niewolne repozytoria contrib

Kiedyś sedznajdowałem i zamieniałem słowo główne w środku/etc/apt/sources.list

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

apt-get update

Krok 1 - Instalacja ZFS

Ponieważ ostatnie poprawki spl-dkmssą poprawnie postrzegane jako zfs-dkmszależność, dlatego są przywoływane automatycznie i nie trzeba wcześniej instalować go ręcznie zfs-dkms. Dowiązanie symboliczne jest potrzebne z powodu błędu w dystrybucji zfs w Debianie, który nie szuka pliku rmbinarnego we właściwej pozycji.

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

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

apt-get -y install zfs-dkms

Krok 2 - Uruchom ponownie ZFS

W tym momencie zfs-dkms jest zainstalowany, ale powoduje błędy journalctl -xe; aby poprawnie uruchomić ZFS użyj:

/sbin/modprobe zfs

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

Krok 3 - MUSISZ TWORZYĆ CO NAJMNIEJ JEDEN ZPOOL

W tym momencie odkryłem, że TY musisz utworzyć Zpool przed ponownym uruchomieniem, w przeciwnym razie ZFS nie załaduje odpowiednich modułów, jeśli nie ma Zpool. Jest to rodzaj mechanizmu oszczędzania zasobów (ale nawet w takim przypadku nadal będzie to powodować błędy journalctl -xe)

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

„Nie robimy tego, ponieważ moduły ZFS skaziłyby jądro, jeśli nie ma dostępnego zpool, nie powinno się go ładować.”

Jeśli tęsknisz za tą częścią, musisz zacząć od kroku 2

Na przykład, korzystając z przykładu podanego przez @cas, możesz utworzyć ten plik zpool lub bezpośrednio utworzyć dysk oparty na dysku.

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

wtedy po rebootwszystkim wszystko będzie działać bez błędów wjournalctl -xe

użytkownik3450548
źródło
3

Nieznaczne wersje dla mnie w Debianie 9.4 - po dodaniu źródeł 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

Wierzchowiec NIE był obecny westchnienie - odkrył, że istnieje coś /var/jeffz zawartością - usunął to z drogi i zrobił reboot...

Po ponownym uruchomieniu:

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

Brawo - wszystkie obecne i chronione przed gniciem :)

Jeff
źródło
+1, ale zdecydowanie zalecamy używanie /dev/disk/by-id/?zamiast /dev/sd?urządzeń. Podczas tworzenia puli użyj nazw by-id lub napraw później, a zpool export <pool>następnie zpool import -d /dev/disk/by-id/ <pool>. Te nazwy, w przeciwieństwie do / dev / sd *, BĘDĄ utrzymywać się podczas ponownego uruchamiania. Ponadto, jeśli masz drukarkę etykiet, możesz drukować etykiety z krótkimi wersjami nazw urządzeń pomocniczych (zwykle nazwa zawiera część numeru seryjnego, która tworzy dobrą, krótką, unikalną etykietę) i oznaczać dyski, aby je wykonać łatwe do zidentyfikowania, czy kiedykolwiek trzeba je wymienić.
cas
Ummm - ale ZFS nie przejmuje się aliasami dysku używanymi podczas tworzenia - wszystkie informacje są zapisywane w zfs-part9 na dysku - i to jest to, co jest używane do budowy tablicy. Naprawdę nie dbam o to, czy to, co było / dev / sdb, zmieni się na coś innego w przyszłości, i zawsze sprawdzam to lsblk -ftuż przed zakłóceniem sprzętem napędu - w przypadku naszych serwerów produkcyjnych narzędzie mrugania HDD firmy Dell jest przydatne w odniesieniu do aktualnego systemu operacyjnego. alias do jednostki fizycznej :) - Myślę, że / dev / disk / by-id jest bardziej przydatny dla innych systemów montażowych, które nie mają wbudowanej spójności ZFS - np. fstab.
Jeff
użycie by-id da ci sensowne / przydatne nazwy (identyfikujące markę, model i numer seryjny każdego napędu) w zpoolpoleceniu podobnym do statusi list, które można łatwo wkleić i wkleić w dowolne niezbędne polecenia zpool offline / detach / replace / etc. sdanic ci nie mówi. ata-ST4000VN008-2DR166_ZDH35XXXdokładnie określa, jaki to rodzaj napędu i jego numer seryjny. Nadal można dostać (bieżącego) krótkich nazw dev jeśli kiedykolwiek chcesz je za pomocą -Lopcji z zpool list, zpool statusitp (z mojego doświadczenia, głównie z użytecznego zpool list -L -v).
cas
IME, znaczące nazwy pomagają zmniejszyć błąd ludzki. Łatwo jest pomylić, np. Sdd jako sdf. o wiele trudniej wpisać błędne imię i nazwisko.
cas
Lol - wielu ludzi robi tę samą rekomendację - osobiście łatwiej mi zapamiętać i napisać sdc sde sdf i sdg. Kupujemy dyski partiami i wszystkie zaczynają się od tych samych 48 znaków typu by-id i mają tylko 2-4-cyfrowe sufiksy, które się różnią. Ludzie nie wpisują nazw by-id - używają uzupełniania tabulatorami - istnieje większe prawdopodobieństwo, że doprowadzą do wyskakującego IMHO. Rozróżnianie jednej litery w trzyznakowym znaku jest o wiele łatwiejsze niż 2-4 cyfry w nazwie 52-znakowej. Wiem, że wielu ludzi również poleca UUID. Ponieważ ZFS to nie obchodzi, myślę, że będę trzymać się tego, co uważam za łatwiejsze - mniej znaczy czasem więcej :)
Jeff
3

Właśnie stworzyłem zupełnie nową maszynę VM do testowania tego. Minimalna instalacja (tylko ssh i standardowe narzędzia systemowe), edytuj sources.list, aby dodać contrib i non-free, a następnie:

apt-get install spl-dkms zfs-dkms

Możesz także chcieć zainstalować ręcznie zfsutils-linux. Powinien zostać zainstalowany automatycznie podczas instalacji, zfs-dkmsale zależności mogą się różnić dla różnych wydań Debiana i dla różnych wersji pakietów Debian ZoL:

apt-get install  zfsutils-linux

Wygląda na to, że w pliku jednostki systemowej występuje błąd zfs-share. Próbuje uruchomić /usr/bin/rmzamiast /bin/rm.

Szybką poprawką jest uruchomienie ln -s /bin/rm /usr/binlub alternatywnie:

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

a następnie uruchom ponownie usługi ZFS:

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

UWAGA: Uruchomiłem ręcznie modprobe zfsprzed ponownym uruchomieniem dowolnej usługi ZFS. Nie jestem pewien, czy zrobią to automatycznie, czy nie, więc być może będziesz musiał to zrobić.

BTW, zapewne też chcesz apt-get install zfs-initramfs, aby upewnić się, że zfs jest ładowany podczas initramfs.


Testowałem, że działa to z:

# 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 działa i / tank jest automatycznie montowany po restarcie.

Wniosek: teraz działa.


BTW, ta rozciągliwa VM używa dysku ZFS utworzonego w moim głównym sidsystemie jako dysku. Zrobiłem migawkę, jeśli natychmiast po pierwszej instalacji, przed zainstalowaniem spl-dkms i zfs-dkms, dzięki czemu mogłem szybko przywrócić i zacząć od nowa, jeśli coś poważnego pójdzie nie tak.

Najpierw zrobiłem zvol z zaledwie 1 GB i musiałem go później zwiększyć, aby mieć wystarczająco dużo miejsca na niezbędne do zbudowania, Linux-headers-amd64 itp .:

# 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  -

ustawienie compression=lz4na czołgu w VM jest prawdopodobnie gorsze niż bezużyteczne - zvol ma już na sobie kompresję LZ4.

cas
źródło
Próbowałem zainstalować go na nowej nowej maszynie wirtualnej, ale wciąż mam problemy. Myślę, że niektóre usługi nie uruchamiają się poprawnie. Jak dotąd widzę, że lista błędów ZFS DKMS jest pełna błędów „nie można zainstalować” raporty. Zastanawiam się, czy to normalne, że programiści niech miesięcy upłynęło wiele wniosków naprawiające błędy takie powtarzalne tylko z apt-get install ZFS-dkms ..
user3450548
W części, w której pytasz o katalog cd, miałeś na myśli: / etc / systemd / system /? ponieważ / etc / systemd / service nie istnieje .. mam również następujący komunikat: „Nie można zrestartować zfs-import-mount.service: Nie znaleziono jednostki zfs-import-mount.service.” i „Nie można zrestartować zfs-import-share.service: Nie znaleziono jednostki zfs-import-share.service.”
user3450548,
Wygląda na to, że mam również problemy z usługą ZFS-ZED, czytając dziennikctl -xe: 11 sierpnia 23:03:23 debian zed [70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11 sierpnia 23:03:23 debian zed [70734]: Nie udało się zainicjować libzfs 11 sierpnia 23:03:23 debian systemd [1]: zfs-zed.service: Zakończono główny proces, kod = zakończono, status = 1 / AWARIA 11 sierpnia 23:03:23 debian systemd [1]: zfs-zed.service: Jednostka weszła w stan awarii. 11 sierpnia 23:03:23 debian systemd [1]: zfs-zed.service: Błąd wyniku „kod-wyjścia”.
user3450548,