Zainstaluj zfs na Debianie 9 stretch
On 18 lutego, 2021 by adminPróbowałem zainstalować zfs na Debianie 9.1, ale mam kilka błędów.
Mój pierwszy instalacja obejmowała tylko zfs-dkms, ale przeczytałem w sieci, że do działania zfs-dkms wymagany jest również spl-dkms.
Moje kroki polegały na zmianie mojego sources.list dodając wkład niewolny 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 spróbowano zainstalować zfs w następujący sposób:
apt-get install spl-dkms
i dopiero po
apt-get install zfs-dkms
W rezultacie mam następujące 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ą:
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? Przegapiłem coś 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?
Komentarze
Odpowiedź
Właściwa odpowiedź @cas jest dobra, ale należy wprowadzić pewne poprawki.
Weźmy więc nową instalację Debiana 9 i zakładając, że niewolne repozytoria Contribution również nie są włączone.
Krok 0 – Włącz repozytoria niewolnych kontrybucji
Użyłem sed
, aby znaleźć i zamienić słowo główne wewnątrz /etc/apt/sources.list
sed -i "s/main/main contrib non-free/g" /etc/apt/sources.list apt-get update
Krok 1 – instalacja ZFS
Od czasu ostatnich poprawek spl-dkms
jest poprawnie wyświetlany jako zfs-dkms
de pendency, więc jest wywoływana automatycznie i nie ma potrzeby instalowania go ręcznie przed zfs-dkms
. Dowiązanie symboliczne jest potrzebne z powodu błędu w dystrybucji zfs w Debianie, który nie szuka pliku binarnego rm
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 – Restart ZFS
W tym momencie zfs-dkms jest zainstalowany, ale generuje błędy w 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 STWORZYĆ CO NAJMNIEJ JEDNEGO ZPOOLA
W tym momencie odkryłem że musisz utworzyć zpool przed ponownym uruchomieniem , w przeciwnym razie zfs nie załaduje odpowiednich modułów, jeśli nie ma zpoolów. To jest sortowanie mechanizmu oszczędzania zasobów (ale nawet w tym przypadku będzie to nadal powodować błędy wewnątrz 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 należy go ładować.
Jeśli przegapisz tę część, musisz zacząć od Krok 2
Na przykład korzystając z przykładu dostarczonego przez @cas, możesz utworzyć zpool na podstawie tego pliku lub bezpośrednio utworzyć zpool na dysku.
truncate -s 100M /root/z1 truncate -s 100M /root/z2 zpool create tank /root/z1 /root/z2 zpool scrub tank zpool status
następnie po reboot
wszystko będzie działać bez błędów w journalctl -xe
Odpowiedź
Drobne różnice w moim przypadku 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
Montaż był NIE obecne westchnienie – odkryto, że istnieje /var/jeff
z zawartością – usunąłem to z drogi i wykonałem 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
Hurra – wszyscy obecni i zabezpieczeni przed gniciem 🙂
Komentarze
- +1, ale zdecydowanie zalecamy używanie
/dev/disk/by-id/?
zamiast urządzeń/dev/sd?
. Użyj nazw by-id podczas tworzenia puli lub napraw później, używajączpool export <pool>
, a następniezpool import -d /dev/disk/by-id/ <pool>
. Nazwy te, w przeciwieństwie do / dev / sd *, BĘDĄ utrzymywać się po ponownym uruchomieniu. Ponadto, jeśli masz drukarkę etykiet, możesz drukować etykiety z krótkimi wersjami nazw urządzeń według identyfikatora (tam ' jest zwykle częścią numeru seryjnego nazwy, co jest dobrym , krótka, unikalna etykieta) i oznacz dyski, aby ułatwić ich identyfikację, jeśli kiedykolwiek będą wymagały wymiany. - Ummm – ale ZFS nie dba o aliasy dysków używane podczas tworzenia – wszystkie informacje są zapisywane do zfs-part9 na dysku – i to jest to, co jest używane do konstruowania tablicy.Nie ' nie obchodzi mnie, czy / dev / sdb zmieni się na coś innego w przyszłości i zawsze sprawdzam
lsblk -f
po prostu przed dychaniem ze sprzętem napędowym – w przypadku naszych serwerów produkcyjnych narzędzie Dell hdd blink jest przydatne do powiązania aktualnego aliasu systemu operacyjnego z jednostką fizyczną 🙂 – Myślę, że / dev / disk / by-id jest bardziej przydatne dla innych systemów montowania, które nie ' nie ma wbudowanej spójności ZFS ' – np. fstab. - użycie by-id da ci znaczące / przydatne nazwy (identyfikujące markę, model i numer seryjny każdego dysku ') w
zpool
, takie jakstatus
ilist
, które można łatwo skopiować i wkleić do dowolnego niezbędnego zpool w trybie offline / odłącz / replace / etc polecenia.sda
nie ' nie mówi nic użytecznego.ata-ST4000VN008-2DR166_ZDH35XXX
określa dokładnie, jakiego rodzaju jest to dysk i jego numer seryjny. Nadal możesz uzyskać (aktualne) krótkie nazwy programistów, jeśli kiedykolwiek zechcesz, używając opcji-L
zzpool list
,zpool status
, itp. (z mojego doświadczenia wynika, że są przydatne głównie zzpool list -L -v
). - IME, znaczące nazwy pomagają zmniejszyć liczbę błędów ludzkich. ' łatwo się pomylić, np. Sdd jako sdf. znacznie trudniej jest błędnie wpisać nazwę według identyfikatora.
- Lol – wielu ludzi ma to samo zalecenie – osobiście łatwiej jest mi zapamiętać i wpisać sdc sde sdf i sdg. Kupujemy dyski partiami i wszystkie zaczynają się od tych samych 48 lub więcej znaków by-id i mają tylko 2-4-cyfrowe sufiksy, które się różnią. Ludzie nie ' nie wpisują nazw według identyfikatora – używają uzupełniania tabulatorami – co jest bardziej prawdopodobne, że doprowadzi to do błędu IMHO. Uważam, że rozróżnienie jednej litery w trzyznakowym jest znacznie łatwiejsze niż 2-4 cyfry w 52-znakowej nazwie. Wiem, że wielu ludzi również poleca UUID. Ponieważ ZFS nie ' nie obchodzi, myślę, że będę trzymać się tego, co uważam za łatwiejsze – mniej czasami znaczy więcej 🙂
Odpowiedź
Właśnie utworzyłem zupełnie nową maszynę wirtualną stretch, aby to przetestować. Minimalna instalacja (tylko ssh i standardowe narzędzia systemowe), edytuj pliki sources.list, aby dodać wkład i niewolne, a następnie:
apt-get install spl-dkms zfs-dkms
Możesz też chcieć ręcznie zainstaluj zfsutils-linux
. Powinien zostać zainstalowany automatycznie podczas instalacji zfs-dkms
, ale zależności mogą się różnić dla różnych wydań Debiana i różnych wersji pakietów Debian ZoL:
apt-get install zfsutils-linux
Wygląda na to, że w pliku jednostki systemowej zfs-share
jest błąd. Próbuje uruchomić /usr/bin/rm
zamiast /bin/rm
.
Szybką naprawą jest uruchomienie ln -s /bin/rm /usr/bin
lub 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 ponownie uruchom usługi zfs:
systemctl restart zfs-import-cache systemctl restart zfs-import-scan systemctl restart zfs-mount systemctl restart zfs-share
UWAGA: ręcznie uruchomiłem modprobe zfs
przed ponownym uruchomieniem którejkolwiek z usług zfs. Nie jestem pewien, czy zrobią to automatycznie, czy też nie, więc być może będziesz musiał to zrobić.
Przy okazji, prawdopodobnie chcesz też apt-get install zfs-initramfs
, aby upewnić się, że zfs jest ładowany podczas initramfs.
Sprawdziłem, czy to działa 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 jest działa i / tank jest automatycznie montowany po restarcie.
Wniosek: teraz działa.
Przy okazji, ta maszyna wirtualna stretch używa ZFS zvol utworzonego na moim głównym jako dysk. Zrobiłem migawkę natychmiast po początkowej instalacji, przed zainstalowaniem spl-dkms i zfs-dkms, aby móc szybko powrócić i zacząć od nowa, jeśli coś pójdzie nie tak.
Najpierw utworzyłem zvol z tylko 1 GB i trzeba było go później zwiększyć, aby mieć wystarczająco dużo miejsca na build-essential, 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=lz4
na zbiorniku w maszynie wirtualnej jest prawdopodobnie gorszy niż bezużyteczny – zvol ma już kompresję lz4.
Komentarze
- Próbowałem zainstalować go na nowej, nowej maszynie wirtualnej, ale ' nadal mam problemy. Niektóre usługi nie ' nie uruchamiają się poprawnie. Jak daleko widzę, że lista błędów ZFS DKMS jest wypełniona ” czy ' t zainstalować ” raporty o błędach. Zastanawiam się, czy to normalne, że programiści pozwalają mijać miesiące po tak wielu żądaniach naprawienia błędów, które można odtworzyć tylko za pomocą apt-get install zfs-dkms ..
- W części, w której pytasz o katalog cd, który miałeś na myśli: systemd / system /? ponieważ / etc / systemd / service nie istnieje .. również mam ten komunikat: ” Nie udało się zrestartować zfs-import-mount.service: Unit zfs-import-mount.service not znaleziono. ” i ” Nie udało się ponownie uruchomić zfs-import-share.service: Jednostka zfs-import-share.nie znaleziono usługi. ”
- Wygląda na to, że mam również problemy z usługą ZFS-ZED czytając dziennik journalctl -xe: 11 sierpnia 23:03:23 debian zed [ 70734]: Demon zdarzenia ZFS 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 proces główny, kod = zakończono, status = 1 / FAILURE 11 sierpnia 23:03:23 debian systemd [1]: zfs-zed.service: Jednostka wprowadzona jako błąd. 11 sierpnia 23:03:23 debian systemd [1]: zfs-zed.service: Błąd z wynikiem ' kod wyjścia '.
- Czy coś się zmieniło / poprawiło w Debianie 10? A jeśli tak, czy powinienem zadać osobne pytanie dotyczące Debiana 10?
dkms status | grep zfs
?