Installer ZFS sur Debian 9 Stretch

11

J'ai essayé d'installer zfs sur debian 9.1, mais je rencontre quelques erreurs.

Ma première installation était uniquement de zfs-dkms mais j'ai lu sur le net que le spl-dkms est également requis pour que zfs-dkms s'exécute.


Mes étapes consistaient à changer ma source.list en ajoutant la contribution non gratuite comme suit:

/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

A fait une mise à jour apt-get classique, puis a essayé d'installer zfs avec ce qui suit:

apt-get install spl-dkms

et seulement après

apt-get install zfs-dkms

En conséquence, j'ai ces erreurs:

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

Lire journalctl -xe comme suggéré, j'obtiens:

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.

Qu'est-ce qui ne va pas ici? J'ai raté autre chose? Comment le package zfs-linux est-il lié à l'installation de zfs?

Quelle est la bonne façon d'installer zfs dans debian 9?

user3450548
la source
Quelle est la sortie de dkms status | grep zfs?
GAD3R

Réponses:

9

La réponse réelle de @cas est bonne mais a quelques corrections à appliquer.

Prenons donc une nouvelle installation de Debian 9 et en supposant que les dépôts non libres de contrib ne sont pas non plus activés.


Étape 0 - Activer les référentiels non libres de contrib

J'ai utilisé sedpour trouver et remplacer le mot principal à l' intérieur/etc/apt/sources.list

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

apt-get update

Étape 1 - Installation de ZFS

Étant donné que les derniers correctifs spl-dkmssont correctement considérés comme des zfs-dkmsdépendances, ils sont rappelés automatiquement et il n'est pas nécessaire de les installer manuellement auparavant zfs-dkms. Le lien symbolique est nécessaire en raison d'un bogue à l'intérieur de la distribution zfs dans Debian, qui ne recherche pas le rmbinaire dans la bonne position.

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

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

apt-get -y install zfs-dkms

Étape 2 - Redémarrage ZFS

À ce stade, zfs-dkms est installé mais il renvoie des erreurs journalctl -xe; pour démarrer correctement zfs, utilisez:

/sbin/modprobe zfs

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

Étape 3 - VOUS DEVEZ CRÉER AU MOINS UN ZPOOL

À ce stade, j'ai découvert que VOUS devez créer un zpool avant de redémarrer sinon zfs ne chargera pas les modules appropriés s'il n'y a pas de zpools. C'est une sorte de mécanisme d'économie de ressources (mais même dans ce cas, cela générera toujours des erreurs journalctl -xe)

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

"Nous ne faisons pas cela parce que les modules ZFS altéreraient le noyau, s'il n'y a pas de zpool disponible alors il ne devrait pas être chargé."

Si vous manquez cette partie, vous devez commencer à partir de l' étape 2

Par exemple, en utilisant l'exemple fourni par @cas, vous pouvez créer ce zpool basé sur un fichier ou créer directement ceux basés sur un disque.

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

puis après un reboottout fonctionnera sans erreurjournalctl -xe

user3450548
la source
3

Légères variations pour moi sur Debian 9.4 - après les ajouts aux sources 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 monture n'était PAS présente soupir - a découvert qu'il y avait un /var/jeffcontenu existant - a déplacé cela et a fait un reboot...

Après le redémarrage:

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

Hourra - tous présents et protégés contre la pourriture :)

Jeff
la source
+1 mais recommande fortement d'utiliser /dev/disk/by-id/?plutôt que des /dev/sd?appareils. Soit utiliser les noms by-id lors de la création du pool, soit corriger plus tard avec zpool export <pool>suivi de zpool import -d /dev/disk/by-id/ <pool>. Contrairement à / dev / sd *, ces noms persisteront lors des redémarrages. De plus, si vous avez une imprimante d'étiquettes, vous pouvez imprimer des étiquettes avec des versions courtes des noms de périphérique by-id (il y a généralement une partie de numéro de série du nom qui fait une bonne étiquette courte et unique) et étiqueter les lecteurs pour les faire facile à identifier si jamais ils doivent être remplacés.
cas
Ummm - mais ZFS ne se soucie pas des alias de disque utilisés lors de la création - toutes les informations sont écrites sur zfs-part9 sur le disque - et c'est ce qui est utilisé pour construire le tableau. Je ne me soucie pas vraiment de savoir si ce qui était / dev / sdb changera à quelque chose d'autre à l'avenir, et je vérifie toujours lsblk -fjuste avant de manipuler le matériel du lecteur - pour nos serveurs de production, l'outil de clignotement de disque dur Dell est utile pour relier le système d'exploitation actuel. alias de l'unité physique :) - Je pense que / dev / disk / by-id est plus utile pour d'autres systèmes de montage qui n'ont pas la cohérence intégrée de ZFS - par exemple fstab.
Jeff
l'utilisation de by-id vous donnera des noms significatifs / utiles (identifiant la marque, le modèle et le numéro de série de chaque lecteur) dans les zpoolcommandes comme statuset list, qui peuvent être facilement copiés-collés dans toutes les commandes zpool offline / detach / replace / etc nécessaires. sdane vous dit rien d'utile. ata-ST4000VN008-2DR166_ZDH35XXXidentifie exactement de quel type de disque il s'agit et son numéro de série. Vous pouvez toujours obtenir les si jamais vous voulez les utiliser les noms de dev courts (courants) l' -Loption avec zpool list, zpool statusetc (dans mon expérience, la plupart du temps utile avec zpool list -L -v).
cas
IME, les noms significatifs aident à réduire les erreurs humaines. Il est facile de taper mal, par exemple, sdd comme sdf. beaucoup plus difficile à taper un nom by-id.
cas
Lol - beaucoup de gens font la même recommandation - Personnellement, je trouve plus facile de se souvenir et de taper sdc sde sdf et sdg. Nous achetons des disques par lots et ils commencent tous par les mêmes 48 caractères d'ID et ont seulement des suffixes de 2 à 4 chiffres qui diffèrent. Les gens ne tapent pas de noms par identifiant - ils utilisent la complétion de tabulation - plus susceptibles de conduire à une OHO à mon humble avis. Je trouve la différenciation d'une lettre dans un caractère à trois caractères beaucoup plus facile que de 2 à 4 chiffres dans un nom à 52 caractères. Je sais que beaucoup de gens recommandent également UUID. Comme ZFS s'en fiche, je pense que je vais m'en tenir à ce que je trouve plus facile - moins c'est parfois plus :)
Jeff
3

Je viens de créer une toute nouvelle VM extensible pour tester cela. Installation minimale (juste ssh et outils système standard), éditez sources.list pour ajouter contrib et non-free, puis:

apt-get install spl-dkms zfs-dkms

Vous pouvez également souhaiter installer manuellement zfsutils-linux. Il doit être installé automatiquement lors de l'installation, zfs-dkmsmais les dépendances peuvent varier pour différentes versions de Debian et pour différentes versions des paquets Debian ZoL:

apt-get install  zfsutils-linux

Il semble qu'il y ait un bogue dans le fichier d'unité systemd pour zfs-share. Il essaie de courir /usr/bin/rmau lieu de /bin/rm.

La solution rapide consiste à exécuter ln -s /bin/rm /usr/bin, ou bien:

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

puis redémarrez les services zfs:

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

REMARQUE: j'ai exécuté manuellement modprobe zfsavant de redémarrer l'un des services zfs. Je ne sais pas s'ils le feront automatiquement ou non, vous devrez peut-être le faire aussi.

BTW, vous le voudrez probablement apt-get install zfs-initramfsaussi, pour vous assurer que zfs est chargé pendant les initramfs.


J'ai testé que cela fonctionne avec:

# 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

Le zpool fonctionne et / tank est monté automatiquement après un redémarrage.

Conclusion: ça marche maintenant.


BTW, cette VM extensible utilise un zvol ZFS créé sur mon sidsystème principal comme son disque. J'ai fait un instantané si c'est immédiatement après l'installation initiale, avant d'installer spl-dkms et zfs-dkms afin que je puisse rapidement revenir en arrière et recommencer en cas de problème majeur.

J'ai d'abord créé le zvol avec seulement 1 Go et j'ai dû l'augmenter plus tard pour avoir suffisamment d'espace pour 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  -

le réglage compression=lz4sur tank dans la VM est probablement pire qu'inutile - le zvol a déjà une compression lz4 dessus.

cas
la source
J'ai essayé de l'installer sur un nouveau vm frais mais je rencontre toujours des problèmes je suppose .. certains services ne démarrent pas correctement .. Pour autant que je puisse voir, la liste des bogues ZFS DKMS est remplie de bogues "ne peut pas installer" rapports. Je me demande s'il est normal que les développeurs laissent passer des mois après autant de demandes de correction de bugs reproductibles juste avec apt-get install zfs-dkms ..
user3450548
Sur la partie où vous demandez le répertoire cd, vous vouliez dire: / etc / systemd / system /? car / etc / systemd / service est inexistant. J'ai également ce message: "Impossible de redémarrer zfs-import-mount.service: unité zfs-import-mount.service introuvable." et "Impossible de redémarrer zfs-import-share.service: unité zfs-import-share.service introuvable."
user3450548
Il semble que j'ai également des problèmes avec le service ZFS-ZED en lisant journalctl -xe: 11 août 23:03:23 debian zed [70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11 août 23:03:23 debian zed [70734]: Échec de l'initialisation de libzfs 11 août 23:03:23 debian systemd [1]: zfs-zed.service: Processus principal terminé, code = quitté, statut = 1 / ÉCHEC 11 août 23:03:23 debian systemd [1]: zfs-zed.service: l'unité est entrée en état d'échec. 11 août 23:03:23 debian systemd [1]: zfs-zed.service: échec avec le résultat 'exit-code'.
user3450548