Installer zfs på debian 9 stretch
On februar 18, 2021 by adminJeg forsøgte at installere zfs på debian 9.1, men jeg oplever nogle fejl.
Min første installationen var kun af zfs-dkms, men jeg læste på nettet, at også spl-dkms er påkrævet for at zfs-dkms skal køre.
Mine trin var at ændre min sources.list tilføjelse af bidrag ikke-fri som følger:
/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
Udført en klassisk apt-get-opdatering og forsøgte derefter at installere zfs med følgende:
apt-get install spl-dkms
og kun efter
apt-get install zfs-dkms
Som et resultat har jeg disse fejl:
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) ...
Læser journalctl -xe som foreslået får jeg:
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.
Hvad er der galt her? Jeg savnede noget andet? Hvordan er zfs-linux pakke relateret til zfs installation?
Hvad er den korrekte måde at installere zfs i debian 9 på?
Kommentarer
Svar
Det faktiske svar fra @cas er godt, men har nogle rettelser, der skal anvendes.
Så lad os tage en ny installation af Debian 9 og antage, at bidrag ikke-fri repositories er heller ikke aktiveret.
Trin 0 – Aktivér de contrib non-free repositories
Jeg brugte sed
til at finde og erstatte ordet main inde i /etc/apt/sources.list
sed -i "s/main/main contrib non-free/g" /etc/apt/sources.list apt-get update
Trin 1 – ZFS-installation
Siden de sidste rettelser ses spl-dkms
korrekt som zfs-dkms
de pendens, så det tilbagekaldes automatisk, og det er ikke nødvendigt at installere det manuelt før zfs-dkms
. Det symbolske link er nødvendigt på grund af en fejl inde i zfs-distributionen i Debian, der ikke ser efter rm
binær i den rigtige position.
apt -y install linux-headers-$(uname -r) ln -s /bin/rm /usr/bin/rm apt-get -y install zfs-dkms
Trin 2 – ZFS genstart
På dette tidspunkt er zfs-dkms installeret, men det kaster fejl i journalctl -xe
; for at starte zfs korrekt brug:
/sbin/modprobe zfs systemctl restart zfs-import-cache systemctl restart zfs-import-scan systemctl restart zfs-mount systemctl restart zfs-share
Trin 3 – DU SKAL OPRETTE MINST EN ZPOOL
På dette tidspunkt opdagede jeg at DU skal oprette en zpool inden genstart ellers vil zfs ikke indlæse de rigtige moduler, hvis der ikke er nogen zpools. Det er en slags for at gemme ressourcemekanismen (men selv i så fald vil dette stadig kaste fejl inde i journalctl -xe
)
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864348
“Vi gør ikke dette, fordi ZFS-moduler ville beskadige kernen, hvis der ikke er nogen zpool tilgængelig, skal den ikke indlæses. “
Hvis du savner denne del, skal du starte fra Trin 2
F.eks. ved at bruge eksemplet fra @cas kan du oprette denne filbaserede zpool eller direkte oprette dine diskbaserede.
truncate -s 100M /root/z1 truncate -s 100M /root/z2 zpool create tank /root/z1 /root/z2 zpool scrub tank zpool status
så efter en reboot
fungerer alt uden fejl i journalctl -xe
Svar
Små variationer for mig på Debian 9.4 – efter tilføjelser af Apt-kilder:
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
Monteringen var IKKE nuværende sukk – opdagede, at der var en eksisterende /var/jeff
med indhold – flyttede det ud af vejen og gjorde en reboot
…
Efter genstart:
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 – alle til stede og bit-rot beskyttet 🙂
Kommentarer
- +1 men anbefaler kraftigt at bruge
/dev/disk/by-id/?
i stedet for/dev/sd?
enheder. Brug enten by-id-navne, når du opretter puljen, eller rett senere medzpool export <pool>
efterfulgt afzpool import -d /dev/disk/by-id/ <pool>
. Disse navne, i modsætning til / dev / sd *, VIL fortsætte på tværs af genstart. Hvis du har en etiketprinter, kan du også udskrive etiketter med korte versioner af by-id-enhedsnavne (der ‘ er normalt en serienummerdel af navnet, der gør en god , kort, unik etiket) og mærk drevene for at gøre dem lette at identificere, om de nogensinde skal udskiftes. - Ummm – men ZFS er ligeglad med diskaliaserne, der bruges under oprettelsen – al information er skrevet til zfs-part9 på disken – og det er det, der bruges til at konstruere arrayet.Jeg bryder mig ikke ‘ om hvad der var / dev / sdb ændres til noget andet i fremtiden, og jeg tjekker altid med
lsblk -f
bare inden dickering med drevhardware – til vores produktions-servere er Dell hdd-blinkværktøjet nyttigt til at relatere det aktuelle OS-alias til den fysiske enhed 🙂 – Jeg tror / dev / disk / by-id er mere nyttigt til andre monteringssystemer, der har ‘ ikke ZFS ‘ s indbygget i konsistens – f.eks. fstab. - ved hjælp af by-id giver dig meningsfulde / nyttige navne (identificering af hvert drev ‘ s mærke, model og serienummer) i
zpool
kommando somstatus
oglist
, som let kan kopieres og indsættes i ethvert nødvendigt zpool offline / detach / udskift / etc kommandoer.sda
fortæller dig ikke ‘ noget nyttigt.ata-ST4000VN008-2DR166_ZDH35XXX
identificerer nøjagtigt, hvilken type drev det er og dets serienummer. Du kan stadig få de (aktuelle) korte dev-navne, hvis du nogensinde vil have dem ved hjælp af-L
medzpool list
,zpool status
osv. (efter min erfaring er det mest nyttigt medzpool list -L -v
). - IME hjælper de meningsfulde navne med at reducere menneskelige fejl. Det ‘ er let at skrive forkert, f.eks. Sdd som sdf. meget sværere at skrive et by-id navn forkert.
- Lol – mange mennesker giver den samme anbefaling – jeg personligt finder det lettere at huske og skrive sdc sde sdf og sdg. Vi køber diske i batches, og de starter alle med de samme 48 eller derom ved-id-tegn og har bare 2-4-cifrede suffikser, der adskiller sig. Folk skriver ikke ‘ t-by-id-navne – de bruger tab-udfyldning – mere sandsynligt at føre til en Oops IMHO. Jeg finder det meget nemmere at differentiere et bogstav med tre tegn end 2-4 cifre i et navn på 52 tegn. Jeg ved, at mange mennesker også anbefaler UUID. Da ZFS ikke ‘ er ligeglad, tror jeg, at jeg vil holde mig til det, jeg finder lettere – mindre er undertiden mere 🙂
Svar
Jeg har lige oprettet en helt ny stretch-VM for at teste dette. Minimal installation (bare ssh og standard systemværktøjer), rediger sources.list for at tilføje bidrag og ikke-fri, derefter:
apt-get install spl-dkms zfs-dkms
Du vil muligvis også manuelt installer zfsutils-linux
. Det skal installeres automatisk, når du installerer zfs-dkms
, men afhængighederne kan variere for forskellige Debian-udgivelser og for forskellige versioner af Debian ZoL-pakkerne:
apt-get install zfsutils-linux
Det ser ud som om der er “en fejl i systemd-enhedsfilen til zfs-share
. Den prøver at køre /usr/bin/rm
i stedet for /bin/rm
.
Den hurtige løsning er at køre ln -s /bin/rm /usr/bin
, eller alternativt:
cd /etc/systemd/system cp -a /lib/systemd/system/zfs-share.service . edit zfs-share.service and change `/usr/bin/rm` to `/bin/rm`
og genstart derefter zfs-tjenesterne:
systemctl restart zfs-import-cache systemctl restart zfs-import-scan systemctl restart zfs-mount systemctl restart zfs-share
BEMÆRK: Jeg løb manuelt modprobe zfs
før du genstarter nogen af zfs-tjenesterne. Jeg er ikke sikker på, om de vil gøre det automatisk eller ej, så du bliver muligvis også nødt til at gøre det.
BTW, du vil sandsynligvis også apt-get install zfs-initramfs
, for at sikre, at zfs indlæses under initramfs.
Jeg testede, at dette fungerer med:
# 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 er arbejder og / tanken er automatisk monteret efter en genstart.
Konklusion: det fungerer nu.
BTW, denne stretch-VM bruger en ZFS zvol oprettet på min hoved sid
system som disk. Jeg lavede et øjebliksbillede af det umiddelbart efter den første installation, inden jeg installerede spl-dkms og zfs-dkms, så jeg hurtigt kunne vende tilbage og starte igen, hvis noget større gik galt.
Jeg lavede først zvol med kun 1 GB og havde brug for at øge det senere for at have nok plads til build-essential, linux-headers-amd64 osv:
# 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 -
indstilling compression=lz4
på tanken i VM er sandsynligvis værre end ubrugelig – zvol har allerede lz4-kompression på den.
Kommentarer
- Jeg forsøgte at installer det på et nyt nyt VM, men jeg ‘ Jeg har stadig problemer, tror jeg .. nogle tjenester er ikke ‘ starter ikke korrekt .. Som langt kan jeg se, at ZFS DKMS-buglisten er fyldt med ” kan ‘ t installerer ” fejlrapporter. Jeg spekulerer på, om det er normalt, at udviklere lader måneder gå efter så mange bugfix-anmodninger, der kan reproduceres bare med apt-get install zfs-dkms ..
- På den del, hvor du beder om cd-biblioteket, mente du: / etc / systemd / system /? fordi / etc / systemd / service ikke eksisterer .. også har jeg denne besked: ” Kunne ikke genstarte zfs-import-mount.service: Enhed zfs-import-mount.service ikke fundet. ” og ” Zfs-import-share.service kunne ikke genstartes: Enhed zfs-import-share.tjenesten blev ikke fundet. ”
- Det ser ud til, at jeg også har problemer med ZFS-ZED-tjenesten ved at læse journalctl -xe: 11. aug. 23:03:23 debian zed [ 70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11. aug 23:03:23 debian zed [70734]: Kunne ikke initialisere libzfs 11. aug 23:03:23 debian systemd [1]: zfs-zed.service : Hovedproces afsluttet, kode = afsluttet, status = 1 / FEJL 11. aug 23:03:23 debian systemd [1]: zfs-zed.service: Enhed indtastet mislykket tilstand. 11. aug 23:03:23 debian systemd [1]: zfs-zed.service: Mislykkedes med resultatet ‘ exit-code ‘.
- Er tingene ændret / forbedret med Debian 10? Og i så fald skal jeg stille et separat spørgsmål til Debian 10?
dkms status | grep zfs
?