Installa zfs su debian 9 stretch


11

Ho provato a installare zfs su debian 9.1, tuttavia sto riscontrando alcuni errori.

La mia prima installazione è stata solo di zfs-dkms, tuttavia ho letto in rete che anche lo spl-dkms è necessario per il funzionamento di zfs-dkms.


I miei passi sono stati quelli di cambiare il mio sources.list aggiungendo il contributo non libero come segue:

/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

Fatto un classico aggiornamento apt-get e quindi provato a installare zfs con il seguente:

apt-get install spl-dkms

e solo dopo

apt-get install zfs-dkms

Di conseguenza, ho questi errori:

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

Leggendo journalctl -xe come suggerito ottengo:

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.

Cosa c'è che non va qui? Ho perso qualcos'altro? In che modo il pacchetto zfs-linux è correlato all'installazione di zfs?

Qual è il modo corretto di installare zfs in debian 9?


Qual è l'output di dkms status | grep zfs?
GAD3R,

Risposte:


9

La risposta effettiva di @cas è buona ma devono essere applicate alcune correzioni.

Quindi prendiamo una nuova installazione di Debian 9 e supponiamo che anche i repository non gratuiti contrib non siano abilitati.


Passaggio 0: abilitare i repository non gratuiti contrib

Ho usato sedper trovare e sostituire la parola principale all'interno/etc/apt/sources.list

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

apt-get update

Passaggio 1: installazione di ZFS

Poiché le ultime correzioni spl-dkmssono viste correttamente come zfs-dkmsdipendenze, vengono richiamate automaticamente e non è necessario installarle manualmente prima zfs-dkms. Il collegamento simbolico è necessario a causa di un bug all'interno della distribuzione zfs in Debian, che non cerca rmbinario nella giusta posizione.

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

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

apt-get -y install zfs-dkms

Passaggio 2: riavvio di ZFS

A questo punto zfs-dkms è installato ma genera errori journalctl -xe; per avviare zfs usare correttamente:

/sbin/modprobe zfs

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

Passaggio 3: DEVI CREARE ALMENO UNO ZPOOL

A questo punto ho scoperto che TU devi creare uno zpool prima di riavviare altrimenti zfs non caricherà i moduli corretti se non ci sono zpools. È una sorta di meccanismo di risparmio delle risorse (ma anche in quel caso ciò genererà comunque degli errori journalctl -xe)

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

"Non lo stiamo facendo perché i moduli ZFS potrebbero contaminare il kernel, se non c'è zpool disponibile, non dovrebbe essere caricato."

Se ti manca questa parte, devi iniziare dal passaggio 2

Ad esempio, utilizzando l'esempio fornito da @cas, è possibile creare questo zpool basato su file o creare direttamente quelli basati su disco.

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

poi dopo reboottutto funzionerà senza errorijournalctl -xe


3

Lievi variazioni per me su Debian 9.4 - dopo l'aggiunta delle fonti 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

La cavalcatura NON era presente sospiro - scoperto che esisteva un /var/jeffcontenuto esistente - lo spostò di mezzo e fece un reboot...

Dopo il riavvio:

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

Evviva - tutti i presenti e protetti da bit-rot :)


+1 ma consigliamo vivamente di utilizzare /dev/disk/by-id/?anziché i /dev/sd?dispositivi. Utilizzare i nomi di by-id durante la creazione del pool o correggere in seguito con zpool export <pool>seguito da zpool import -d /dev/disk/by-id/ <pool>. Questi nomi, a differenza di / dev / sd *, persisteranno durante i riavvii. Inoltre, se si dispone di una stampante per etichette, è possibile stampare etichette con versioni brevi dei nomi dei dispositivi by-id (di solito c'è una parte del numero seriale del nome che rende un'etichetta valida, corta e univoca) ed etichettare le unità per renderle facile da identificare se mai devono essere sostituiti.
Cas

Ummm - ma a ZFS non importa degli alias del disco usati durante la creazione - tutte le informazioni sono scritte su zfs-part9 sul disco - e questo è ciò che viene usato per costruire l'array. Non mi interessa davvero se ciò che è stato / dev / sdb cambierà in qualcos'altro in futuro, e controllo sempre lsblk -fpoco prima di dickering con l'hardware dell'unità - per i nostri server di produzione lo strumento lampeggiante Dell HDD è utile per mettere in relazione l'attuale os- alias all'unità fisica :) - Penso che / dev / disk / by-id sia più utile per altri sistemi di montaggio che non hanno la coerenza integrata di ZFS - ad esempio fstab.
Jeff,

l'utilizzo di by-id ti darà nomi utili / utili (identificando la marca, il modello e il numero di serie di ogni unità) in zpoolcomandi simili statuse list, che possono essere facilmente incollati e incollati in qualsiasi comando zpool offline / staccare / sostituisci / etc necessario. sdanon ti dice niente di utile. ata-ST4000VN008-2DR166_ZDH35XXXidentifica esattamente che tipo di unità è e il suo numero di serie. È ancora possibile ottenere le (attuali) nomi dev brevi se volete mai utilizzando l' -Lopzione con zpool list, zpool statusecc (nella mia esperienza, per lo più utile con zpool list -L -v).
CAS

IME, i nomi significativi aiutano a ridurre l'errore umano. È facile digitare male, ad esempio, sdd come sdf. molto più difficile digitare in modo errato un nome by-id.
Cas

Lol - molte persone fanno la stessa raccomandazione - Personalmente trovo più facile da ricordare e digitare sdc sde sdf e sdg. Acquistiamo dischi in batch e iniziano tutti con gli stessi 48 caratteri di by-id e hanno solo suffissi a 2-4 cifre che differiscono. Le persone non digitano i nomi per ID - usano il completamento con tabulazione - hanno maggiori probabilità di generare un IMHO oops. Trovo che differenziare una lettera in tre caratteri sia molto più semplice di 2-4 cifre in un nome di 52 caratteri. So che molte persone raccomandano anche UUID. Poiché a ZFS non importa, penso che mi atterrò a ciò che trovo più facile - meno è a volte di più :)
Jeff

3

Ho appena creato un nuovissimo tratto VM per testarlo. Installazione minima (solo strumenti di sistema standard e ssh), modifica sources.list per aggiungere contrib e non-free, quindi:

apt-get install spl-dkms zfs-dkms

Potresti anche voler installare manualmente zfsutils-linux. Dovrebbe essere installato automaticamente quando si installa, zfs-dkmsma le dipendenze possono variare per le diverse versioni di Debian e per le diverse versioni dei pacchetti Debian ZoL:

apt-get install  zfsutils-linux

Sembra che ci sia un bug nel file di unità di systemd per zfs-share. Sta cercando di eseguire /usr/bin/rminvece di /bin/rm.

La soluzione rapida è eseguire ln -s /bin/rm /usr/bin, o in alternativa:

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

e quindi riavviare i servizi zfs:

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

NOTA: ho eseguito manualmente modprobe zfsprima di riavviare uno dei servizi zfs. Non sono sicuro che lo faranno automaticamente o no, quindi potrebbe essere necessario farlo anche tu.

A proposito, probabilmente lo vorrai apt-get install zfs-initramfsanche tu , per assicurarti che zfs sia caricato durante initramfs.


Ho provato che funziona con:

# 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

Lo zpool funziona e / il serbatoio viene montato automaticamente dopo un riavvio.

Conclusione: funziona ora.


A proposito, questa VM stretch utilizza uno zvol ZFS creato sul mio sidsistema principale come disco. Ho fatto un'istantanea se immediatamente dopo l'installazione iniziale, prima di installare spl-dkms e zfs-dkms in modo da poter tornare rapidamente e ricominciare se qualcosa di grave è andato storto.

Per prima cosa ho creato lo zvol con solo 1 GB e avevo bisogno di aumentarlo in seguito per avere abbastanza spazio per build-essential, linux-headers-amd64 ecc:

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

l'impostazione compression=lz4sul serbatoio nella VM è probabilmente peggiore che inutile: lo zvol ha già una compressione lz4.


Ho provato a installarlo su una nuova vm nuova ma sto ancora riscontrando problemi .. alcuni servizi non si avviano correttamente .. Per quanto posso vedere l'elenco dei bug DFS di ZFS è pieno di bug "impossibile installare" rapporti. Mi chiedo se sia normale che gli sviluppatori lascino passare i mesi dopo così tante richieste di correzione di bug riproducibili solo con apt-get install zfs-dkms ..
user3450548

Nella parte in cui chiedi la directory cd intendevi: / etc / systemd / system /? perché / etc / systemd / service non esiste .. inoltre ho questo messaggio: "Impossibile riavviare zfs-import-mount.service: unità zfs-import-mount.service non trovata." e "Impossibile riavviare zfs-import-share.service: unità zfs-import-share.service non trovata."
user3450548

Sembra che abbia anche problemi con il servizio ZFS-ZED leggendo journalctl -xe: 11 agosto 23:03:23 debian zed [70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11 agosto 23:03:23 debian zed [70734]: Inizializzazione di libzfs non riuscita 11 ago 23:03:23 debian systemd [1]: zfs-zed.service: processo principale chiuso, codice = uscito, stato = 1 / GUASTO 11 agosto 23:03:23 debian systemd [1]: zfs-zed.service: unità inserita in stato non riuscito. 11 ago 23:03:23 debian systemd [1]: zfs-zed.service: errore con il codice 'exit-code'.
user3450548
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.