Installieren Sie zfs auf Debian 9 Stretch

11

Ich habe versucht, zfs unter Debian 9.1 zu installieren, es treten jedoch einige Fehler auf.

Meine erste Installation war nur von zfs-dkms, aber ich habe im Internet gelesen, dass auch die spl-dkms erforderlich sind, damit zfs-dkms ausgeführt werden kann.


Meine Schritte bestanden darin, meine Quellenliste zu ändern und den nicht freien Beitrag wie folgt hinzuzufügen :

/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

Ich habe ein klassisches apt-get-Update durchgeführt und dann versucht, zfs wie folgt zu installieren:

apt-get install spl-dkms

und erst danach

apt-get install zfs-dkms

Infolgedessen habe ich folgende Fehler:

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

Wenn ich journalctl -xe wie vorgeschlagen lese, bekomme ich:

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.

Was ist hier los? Ich habe etwas anderes verpasst? Wie hängt das zfs-linux- Paket mit der zfs-Installation zusammen?

Was ist der richtige Weg, um zfs in Debian 9 zu installieren?

user3450548
quelle
Was ist die Ausgabe von dkms status | grep zfs?
GAD3R

Antworten:

9

Die tatsächliche Antwort von @cas ist gut, es müssen jedoch einige Korrekturen vorgenommen werden.

Nehmen wir also eine Neuinstallation von Debian 9 und gehen wir davon aus, dass die nicht freien Contrib- Repositorys ebenfalls nicht aktiviert sind.


Schritt 0 - Aktivieren Sie die beitragsfreien Repositorys

Ich habe seddas Wort main im Inneren gefunden und ersetzt/etc/apt/sources.list

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

apt-get update

Schritt 1 - ZFS-Installation

Da die letzten Korrekturen spl-dkmskorrekt als zfs-dkmsAbhängigkeit angesehen werden, werden sie automatisch abgerufen und müssen zuvor nicht manuell installiert werden zfs-dkms. Der symbolische Link wird aufgrund eines Fehlers in der zfs-Distribution in Debian benötigt, der nicht rman der richtigen Position nach Binärdateien sucht .

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

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

apt-get -y install zfs-dkms

Schritt 2 - ZFS-Neustart

Zu diesem Zeitpunkt ist zfs-dkms installiert, es werden jedoch Fehler ausgegeben journalctl -xe. Um zfs richtig zu starten, verwenden Sie:

/sbin/modprobe zfs

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

Schritt 3 - Sie müssen mindestens eine ZPOOL erstellen

Zu diesem Zeitpunkt habe ich festgestellt, dass SIE vor dem Neustart einen Zpool erstellen müssen, da sonst zfs nicht die richtigen Module lädt, wenn keine Zpools vorhanden sind. Es ist eine Art Mechanismus zum Speichern von Ressourcen (aber selbst in diesem Fall wirft dies immer noch Fehler nach innen journalctl -xe).

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

"Wir tun dies nicht, weil ZFS-Module den Kernel beschädigen würden. Wenn kein Zpool verfügbar ist, sollte er nicht geladen werden."

Wenn Sie diesen Teil verpassen, müssen Sie mit Schritt 2 beginnen

Mithilfe des von @cas bereitgestellten Beispiels können Sie beispielsweise diesen dateibasierten Zpool erstellen oder direkt Ihre festplattenbasierten Zpools erstellen.

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

dann wird nach einem rebootalles fehlerfrei funktionierenjournalctl -xe

user3450548
quelle
3

Leichte Variationen für Debian 9.4 - nach den Ergänzungen der Apt-Quellen:

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

Das Reittier war NICHT anwesend Seufzer - entdeckte, dass es einen /var/jeffmit Inhalt existierenden gab - schob das aus dem Weg und machte einen reboot...

Nach dem Neustart:

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 - alles vorhanden und bit-rot geschützt :)

Jeff
quelle
+1, empfehle jedoch dringend die Verwendung /dev/disk/by-id/?anstelle von /dev/sd?Geräten. Verwenden Sie entweder die Namen der By-IDs beim Erstellen des Pools oder korrigieren Sie sie später mit zpool export <pool>gefolgt von zpool import -d /dev/disk/by-id/ <pool>. Diese Namen bleiben im Gegensatz zu / dev / sd * bei Neustarts erhalten. Wenn Sie über einen Etikettendrucker verfügen, können Sie auch Etiketten mit kurzen Versionen der By-ID-Gerätenamen drucken (normalerweise gibt es einen Teil der Seriennummer des Namens, der ein gutes, kurzes und eindeutiges Etikett ergibt) und die Laufwerke beschriften, um sie zu erstellen leicht zu identifizieren, wenn sie jemals ersetzt werden müssen.
Cas
Ummm - aber ZFS kümmert sich nicht um die beim Erstellen verwendeten Festplatten-Aliase - alle Informationen werden in zfs-part9 auf der Festplatte geschrieben - und das wird zum Erstellen des Arrays verwendet. Es ist mir eigentlich egal, ob sich das, was / dev / sdb war, in Zukunft zu etwas anderem ändert, und ich überprüfe es immer lsblk -fkurz bevor ich mich mit der Laufwerkshardware beschäftige - für unsere Produktionsserver ist das Dell HDD-Blink-Tool hilfreich, um die aktuellen Betriebssysteme in Beziehung zu setzen. Alias ​​für die physische Einheit :) - Ich denke, die Datei / dev / disk / by-id ist nützlicher für andere Montagesysteme, in die keine ZFS-Konsistenz integriert ist - z. B. fstab.
Jeff
by-id verwendet werden Sie sinnvoll / nützliche Namen geben (jeder Automarke, Modell und Seriennummer identifiziert) zpoolBefehl wie statusund list, die leicht in jede notwendige kopier eingefügt werden kann zpool offline / detach / Ersetzen / etc Befehle. sdasagt dir nichts Nützliches. ata-ST4000VN008-2DR166_ZDH35XXXIdentifiziert genau die Art des Laufwerks und seine Seriennummer. Sie können immer noch die (aktuellen) kurzen dev Namen, wenn man sie jemals mit der will -Lmit der Option zpool list, zpool statususw. (in meiner Erfahrung, vor allem nützlich bei zpool list -L -v).
Cas
IME, die aussagekräftigen Namen helfen, menschliches Versagen zu reduzieren. Es ist leicht, z. B. sdd als sdf zu tippen. Es ist viel schwieriger, einen By-ID-Namen falsch einzugeben.
Cas
Lol - viele Leute machen die gleiche Empfehlung - ich persönlich finde es einfacher, sich zu erinnern und sdc sde sdf und sdg einzugeben. Wir kaufen Datenträger in Stapeln und alle beginnen mit denselben 48 oder so By-ID-Zeichen und haben nur 2-4-stellige Suffixe, die sich unterscheiden. Leute geben keine By-ID-Namen ein - sie verwenden Tab-Vervollständigung - was eher zu einem Hoppla führt, IMHO. Ich finde es viel einfacher, einen Buchstaben in einem Drei-Zeichen-Namen zu unterscheiden als 2-4 Ziffern in einem 52-Zeichen-Namen. Ich weiß, dass viele Leute auch UUID empfehlen. Da es ZFS egal ist, denke ich, dass ich mich an das halten werde, was ich einfacher finde - weniger ist manchmal mehr :)
Jeff
3

Ich habe gerade eine brandneue Stretch-VM erstellt, um dies zu testen. Minimale Installation (nur SSH und Standard-Systemtools), bearbeiten Sie die Datei "sources.list", um Contrib und Non-Free hinzuzufügen. Dann:

apt-get install spl-dkms zfs-dkms

Möglicherweise möchten Sie auch manuell installieren zfsutils-linux. Es sollte bei der Installation automatisch installiert werden, zfs-dkmsaber die Abhängigkeiten können für verschiedene Debian-Versionen und für verschiedene Versionen der Debian ZoL-Pakete variieren:

apt-get install  zfsutils-linux

Es sieht so aus, als ob es einen Fehler in der systemd-Einheitendatei für gibt zfs-share. Es versucht zu rennen /usr/bin/rmstatt /bin/rm.

Die schnelle Lösung besteht darin, auszuführen ln -s /bin/rm /usr/binoder alternativ:

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

und starten Sie dann die zfs-Dienste neu:

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

HINWEIS: Ich habe modprobe zfsvor dem Neustart eines der zfs-Dienste manuell ausgeführt . Ich bin mir nicht sicher, ob sie das automatisch tun oder nicht, also müssen Sie das möglicherweise auch tun.

Übrigens möchten Sie wahrscheinlich apt-get install zfs-initramfsauch, um sicherzustellen, dass zfs während des initramfs geladen wird.


Ich habe getestet, dass dies funktioniert mit:

# 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

Der zpool funktioniert und / tank wird nach einem Neustart automatisch montiert.

Fazit: es funktioniert jetzt.


Übrigens verwendet diese Stretch-VM ein auf meinem Hauptsystem erstelltes ZFS-Zvol sidals Festplatte. Ich habe einen Snapshot erstellt, wenn dieser unmittelbar nach der Erstinstallation erstellt wurde, bevor spl-dkms und zfs-dkms installiert wurden, damit ich schnell zurückkehren und neu starten konnte, wenn ein wichtiger Fehler auftrat.

Ich habe das zvol zuerst mit nur 1 GB erstellt und musste es später vergrößern, um genügend Speicherplatz für Build-Essential, Linux-Header-AMD64 usw. zu haben:

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

Die Einstellung compression=lz4des Tanks in der VM ist wahrscheinlich schlechter als nutzlos - der zvol verfügt bereits über eine lz4-Komprimierung.

cas
quelle
Ich habe versucht, es auf einer neuen VM zu installieren, aber ich denke, es treten immer noch Probleme auf. Einige Dienste werden nicht richtig gestartet. Soweit ich sehen kann, ist die ZFS DKMS-Fehlerliste mit Fehlern gefüllt, die nicht installiert werden können Berichte. Ich frage mich, ob es normal ist, dass Entwickler Monate vergehen lassen, nachdem so viele Bugfix-Anfragen nur mit apt-get install zfs-dkms reproduzierbar sind.
user3450548
In dem Teil, in dem Sie nach dem CD-Verzeichnis fragen, meinten Sie: / etc / systemd / system /? weil / etc / systemd / service nicht vorhanden ist .. auch ich habe diese Meldung: "Fehler beim Neustart von zfs-import-mount.service: Einheit zfs-import-mount.service nicht gefunden." und "Fehler beim Neustart von zfs-import-share.service: Einheit zfs-import-share.service nicht gefunden."
user3450548
Es scheint, dass ich auch Probleme mit dem ZFS-ZED-Dienst habe, indem ich journalctl -xe lese: 11. August 23:03:23 debian zed [70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11. August 23:03:23 debian zed [70734]: Fehler beim Initialisieren von libzfs 11. August 23:03:23 debian systemd [1]: zfs-zed.service: Hauptprozess beendet, Code = beendet, Status = 1 / FAILURE 11. August 23:03:23 debian systemd [1]: zfs-zed.service: Gerät ist in den Fehlerzustand eingetreten. 11. August 23:03:23 debian systemd [1]: zfs-zed.service: Fehler mit Ergebnis 'Exit-Code'.
user3450548