Installera zfs på debian 9 stretch
On februari 18, 2021 by adminJag försökte installera zfs på debian 9.1, men jag upplever några fel.
Mitt första installationen var bara av zfs-dkms men jag läste på nätet att även spl-dkms krävs för att zfs-dkms ska kunna köras.
Mina steg var att ändra min sources.list lägga till bidrag icke-gratis enligt följande:
/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
Gjorde en klassisk apt-get-uppdatering och försökte sedan installera zfs med följande:
apt-get install spl-dkms
och först efter
apt-get install zfs-dkms
Som ett resultat har jag följande fel:
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 föreslagit får jag:
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.
Vad är fel här? Jag saknade något annat? Hur är zfs-linux -paketet relaterat till installationen av zfs?
Vad är rätt sätt att installera zfs i debian 9?
Kommentarer
Svar
Det faktiska svaret från @cas är bra men har några korrigeringar som ska tillämpas.
Så låt oss ta en ny installation av Debian 9 och antar att icke-fria bidrag -förråd är inte heller aktiverade.
Steg 0 – Aktivera icke-fria förvar-förlag
Jag använde sed
för att hitta och ersätta ordet main inuti /etc/apt/sources.list
sed -i "s/main/main contrib non-free/g" /etc/apt/sources.list apt-get update
Steg 1 – ZFS-installation
Eftersom de senaste korrigeringarna spl-dkms
ses korrekt som zfs-dkms
de hängande så att det återkallas automatiskt och det är inte nödvändigt att installera det manuellt innan zfs-dkms
. Den symboliska länken behövs på grund av ett fel inuti zfs-distributionen i Debian, som inte letar efter rm
binär i rätt position.
apt -y install linux-headers-$(uname -r) ln -s /bin/rm /usr/bin/rm apt-get -y install zfs-dkms
Steg 2 – ZFS-omstart
Vid denna tidpunkt är zfs-dkms installerat men det kastar fel i journalctl -xe
; för att starta zfs ordentligt använder:
/sbin/modprobe zfs systemctl restart zfs-import-cache systemctl restart zfs-import-scan systemctl restart zfs-mount systemctl restart zfs-share
Steg 3 – DU MÅSTE SKAPA MINST EN ZPOOL
Vid denna punkt upptäckte jag att DU måste skapa en zpool innan du startar om annars laddar inte zfs rätt moduler om det inte finns några zpools. Det är en sort för att spara resursmekanismen (men även i så fall kommer detta fortfarande att kasta fel inuti journalctl -xe
)
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864348
”Vi gör inte detta eftersom ZFS-moduler skulle skämma bort kärnan, om det inte finns någon zpool tillgänglig ska den inte laddas. ”
Om du saknar den här delen måste du börja från Steg 2
Till exempel, genom att använda exemplet från @cas kan du skapa den här filbaserade zpoolen eller direkt skapa dina diskbaserade.
truncate -s 100M /root/z1 truncate -s 100M /root/z2 zpool create tank /root/z1 /root/z2 zpool scrub tank zpool status
sedan efter en reboot
fungerar allt utan fel i journalctl -xe
Svar
Små variationer för mig på Debian 9.4 – efter Apt-källtilläggen:
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
Fästet var INTE närvarande suck – upptäckte att det fanns en befintlig /var/jeff
med innehåll – flyttade det ur vägen och gjorde en reboot
…
Efter omstart:
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 – alla närvarande och bitrotna skyddade 🙂
Kommentarer
- +1 men rekommenderar starkt att du använder
/dev/disk/by-id/?
istället för/dev/sd?
enheter. Använd antingen by-id-namnen när du skapar poolen eller fixa senare medzpool export <pool>
följt avzpool import -d /dev/disk/by-id/ <pool>
. Dessa namn kommer, till skillnad från / dev / sd *, att bestå omstart. Om du har en etikettskrivare kan du också skriva ut etiketter med korta versioner av by-id-enhetsnamnen (det ’ är vanligtvis en serienummerdel av namnet som gör en bra , kort, unik etikett) och märka enheterna så att de är lätta att identifiera om de någonsin behöver bytas ut. - Ummm – men ZFS bryr sig inte om diskaliasen som används under skapandet – all information är skriven till zfs-part9 på disken – och det är vad som används för att konstruera arrayen.Jag bryr mig inte ’ om det som var / dev / sdb ändras till något annat i framtiden, och jag kollar alltid med
lsblk -f
bara innan dickering med enhetshårdvara – för våra produktionsservrar är Dell hdd-blinkverktyget användbart för att relatera det nuvarande os-alias till den fysiska enheten 🙂 – Jag tror att / dev / disk / by-id är mer användbart för andra monteringssystem som inte ’ t har ZFS ’ inbyggd konsistens – t.ex. fstab. - med hjälp av by-id ger dig meningsfulla / användbara namn (identifierar varje enhet ’ s märke, modell och serienummer) i
zpool
kommando somstatus
ochlist
, som enkelt kan kopieras och klistras in i alla nödvändiga zpool offline / lossa / ersätt / etc-kommandon.sda
säger ’ inte något användbart.ata-ST4000VN008-2DR166_ZDH35XXX
identifierar exakt vilken typ av enhet det är och dess serienummer. Du kan fortfarande få (nuvarande) korta dev-namn om du någonsin vill ha dem med alternativet-L
medzpool list
,zpool status
, etc (enligt min erfarenhet, mest användbar medzpool list -L -v
). - IME, de meningsfulla namnen hjälper till att minska mänskliga fel. Det är ’ lätt att skriva fel, t.ex. sdd som sdf. mycket svårare att skriva ett by-id-namn fel.
- Lol – många människor ger samma rekommendation – personligen tycker jag att det är lättare att komma ihåg och skriva sdc sde sdf och sdg. Vi köper skivor i satser och de börjar alla med samma 48 eller så by-id-tecken och har bara 2-4 siffriga suffix som skiljer sig åt. Människor skriver inte ’ för att by-id-namn – de använder tab-komplettering – mer sannolikt att de leder till en oops IMHO. Jag tycker att det är mycket lättare att skilja en bokstav i en tre-karaktär än 2-4 siffror i ett 52-karaktärsnamn. Jag vet att många människor också rekommenderar UUID. Eftersom ZFS inte ’ bryr sig, tror jag att jag kommer att hålla mig till vad jag tycker är lättare – mindre är ibland mer 🙂
Svar
Jag skapade precis en helt ny stretch-VM för att testa detta. Minimal installation (bara ssh och standard systemverktyg), redigera sources.list för att lägga till bidrag och icke-gratis, sedan:
apt-get install spl-dkms zfs-dkms
Du kanske också vill manuellt installera zfsutils-linux
. Den bör installeras automatiskt när du installerar zfs-dkms
men beroenden kan variera för olika Debian-utgåvor och för olika versioner av Debian ZoL-paketen:
apt-get install zfsutils-linux
Det ser ut som om det finns ”en bugg i systemd-enhetsfilen för zfs-share
. Den försöker köra /usr/bin/rm
istället för /bin/rm
.
Snabbfixet är att köra 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`
och starta sedan om zfs-tjänsterna:
systemctl restart zfs-import-cache systemctl restart zfs-import-scan systemctl restart zfs-mount systemctl restart zfs-share
OBS: Jag körde modprobe zfs
innan du startar om någon av zfs-tjänsterna. Jag är inte säker på om de kommer att göra det automatiskt eller inte, så du kan behöva göra det också.
BTW, du vill antagligen apt-get install zfs-initramfs
också , för att säkerställa att zfs laddas under initramfs.
Jag testade att detta fungerar 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
Zpoolen är working och / tank automatiseras efter en omstart.
Slutsats: det fungerar nu.
BTW, den här VM-sträckan använder en ZFS zvol skapad på mitt huvud sid
-systemet som disk. Jag tog en ögonblicksbild av den direkt efter den första installationen, innan jag installerade spl-dkms och zfs-dkms så att jag snabbt kunde återgå och börja om om något större gick fel.
Jag gjorde först zvol med bara 1 GB och behövde öka den senare för att ha tillräckligt med utrymme för build-essential, linux-headers-amd64 etc:
# 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 -
inställning compression=lz4
på tanken i den virtuella datorn är förmodligen värre än värdelös – zvol har redan lz4-komprimering på den.
Kommentarer
- Jag försökte installera den på en ny ny vm men jag ’ jag har fortfarande problem antar jag .. vissa tjänster är inte ’ t börjar korrekt .. Som långt kan jag se ZFS DKMS bug-lista är fylld med ” kan ’ t installera ” felrapporter. Jag undrar om det är normalt att utvecklare låter månader gå efter så många bugfix-förfrågningar reproducerbara bara med apt-get install zfs-dkms ..
- På den del där du ber om cd-katalogen menade du: / etc / systemd / system /? eftersom / etc / systemd / service inte existerar .. också har jag det här meddelandet: ” Det gick inte att starta om zfs-import-mount.service: Enheten zfs-import-mount.service inte hittades. ” och ” Det gick inte att starta om zfs-import-share.service: Enhet zfs-import-share.tjänsten hittades inte. ”
- Det verkar som att jag också har problem med ZFS-ZED-tjänsten genom att läsa 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]: Det gick inte att initiera libzfs 11 aug 23:03:23 debian systemd [1]: zfs-zed.service : Huvudprocessen avslutad, kod = avslutad, status = 1 / FAILURE 11 aug 23:03:23 debian systemd [1]: zfs-zed.service: Enheten angav misslyckat tillstånd. 11 aug 23:03:23 debian systemd [1]: zfs-zed.service: Misslyckades med resultatet ’ exit-code ’.
- Har saker förändrats / förbättrats med Debian 10? Och i så fall ska jag skicka en separat fråga till Debian 10?
dkms status | grep zfs
?