Instalar zfs en debian 9 stretch

11

Intenté instalar zfs en Debian 9.1, sin embargo, estoy experimentando algunos errores.

Mi primera instalación fue solo de zfs-dkms, sin embargo, leí en la red que también se requiere spl-dkms para que se ejecute zfs-dkms.


Mis pasos fueron cambiar mi sources.list agregando el contrib no libre de la siguiente manera:

/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

Hice una actualización clásica de apt-get y luego intenté instalar zfs con lo siguiente:

apt-get install spl-dkms

y solo después

apt-get install zfs-dkms

Como resultado, tengo estos errores:

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

Leyendo journalctl -xe como sugerí me sale:

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é pasa aquí? Me perdí algo más? ¿Cómo se relaciona el paquete zfs-linux con la instalación de zfs?

¿Cuál es la forma correcta de instalar zfs en debian 9?

usuario3450548
fuente
¿Cuál es la salida de dkms status | grep zfs?
GAD3R

Respuestas:

9

La respuesta real de @cas es buena, pero se deben aplicar algunas correcciones.

Así que tomemos una nueva instalación de Debian 9 y supongamos que los repositorios contributivos no libres tampoco están habilitados.


Paso 0: habilite los repositorios contrib no libres

Solía sedencontrar y reemplazar la palabra principal dentro/etc/apt/sources.list

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

apt-get update

Paso 1 - Instalación de ZFS

Dado que las últimas correcciones spl-dkmsse ven correctamente como una zfs-dkmsdependencia, se recupera automáticamente y no es necesario instalarlo manualmente antes zfs-dkms. El enlace simbólico es necesario debido a un error dentro de la distribución zfs en Debian, que no busca rmbinarios en la posición correcta.

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

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

apt-get -y install zfs-dkms

Paso 2: reinicio de ZFS

En este punto, zfs-dkms está instalado pero arroja errores journalctl -xe; para iniciar zfs correctamente use:

/sbin/modprobe zfs

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

Paso 3: DEBE CREAR AL MENOS UN ZPOOL

En este punto descubrí que USTED debe crear un zpool antes de reiniciar; de lo contrario, zfs no cargará los módulos adecuados si no hay zpools. Es una especie de mecanismo de ahorro de recursos (pero incluso en ese caso, todavía arrojará errores journalctl -xe)

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

"No estamos haciendo esto porque los módulos ZFS contaminan el núcleo, si no hay zpool disponible, entonces no debería cargarse".

Si se pierde esta parte, debe comenzar desde el Paso 2

Por ejemplo, al usar el ejemplo proporcionado por @cas, puede crear este zpool basado en archivo o directamente crear sus discos basados.

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

luego, después de reboottodo, todo funcionará sin errores enjournalctl -xe

usuario3450548
fuente
3

Ligeras variaciones para mí en Debian 9.4 - después de las adiciones de fuentes 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

El monte NO estaba presente suspiro - descubrió que había un /var/jeffcontenido existente - movió eso fuera del camino e hizo un reboot...

Después de reiniciar:

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 - todos los presentes y protegidos contra la putrefacción de bits

Jeff
fuente
+1 pero recomiendo usar en /dev/disk/by-id/?lugar de /dev/sd?dispositivos. Utilice los nombres de by-id al crear el grupo o corríjalo más adelante con zpool export <pool>seguido de zpool import -d /dev/disk/by-id/ <pool>. Estos nombres, a diferencia de / dev / sd *, persistirán durante los reinicios. Además, si tiene una impresora de etiquetas, puede imprimir etiquetas con versiones cortas de los nombres de dispositivo by-id (generalmente hay una parte del número de serie del nombre que hace una etiqueta buena, corta y única) y etiquetar las unidades para hacerlas fácil de identificar si alguna vez necesitan ser reemplazados.
cas
Ummm, pero a ZFS no le importan los alias de disco utilizados durante la creación, toda la información se escribe en zfs-part9 en el disco, y eso es lo que se usa para construir la matriz. Realmente no me importa si lo que fue / dev / sdb cambia a otra cosa en el futuro, y siempre lsblk -fverifico justo antes de jugar con el hardware del disco: para nuestros servidores de producción, la herramienta de parpadeo del disco duro de Dell es útil para relacionar el sistema operativo actual. alias a la unidad física :) - Creo que / dev / disk / by-id es más útil para otros sistemas de montaje que no tienen la coherencia integrada de ZFS, por ejemplo, fstab.
Jeff
el uso de by-id le dará nombres significativos / útiles (que identifican la marca, el modelo y el número de serie de cada unidad) en zpoolcomandos como statusy list, que se pueden copiar y pegar fácilmente en cualquier comando necesario de zpool offline / detach / replace / etc. sdano te dice nada útil. ata-ST4000VN008-2DR166_ZDH35XXXidentifica exactamente qué tipo de unidad es y su número de serie. Usted todavía puede obtener los nombres (actuales) dev cortos si alguna vez quiere que el uso de la -Lopción con zpool list, zpool status, etc (en mi experiencia, sobre todo útil con zpool list -L -v).
cas
IME, los nombres significativos ayudan a reducir el error humano. Es fácil escribir mal, por ejemplo, sdd como sdf. es mucho más difícil escribir mal un nombre de by-id.
cas
Lol: mucha gente hace la misma recomendación: personalmente me resulta más fácil recordar y escribir sdc sde sdf y sdg. Compramos discos en lotes y todos comienzan con los mismos 48 caracteres por ID y solo tienen sufijos de 2-4 dígitos que difieren. Las personas no escriben los nombres por identificación, usan la finalización de tabulación, es más probable que conduzcan a una OMI en mi humilde opinión. Encuentro diferenciar una letra en tres caracteres mucho más fácil que 2-4 dígitos en un nombre de 52 caracteres. Sé que mucha gente también recomienda UUID. Como a ZFS no le importa, creo que me atendré a lo que encuentro más fácil: menos es a veces más :)
Jeff
3

Acabo de crear una nueva máquina virtual elástica para probar esto. Instalación mínima (solo herramientas de sistema estándar y ssh), edite sources.list para agregar contrib y non-free, luego:

apt-get install spl-dkms zfs-dkms

También puede instalarlo manualmente zfsutils-linux. Debe instalarse automáticamente cuando realiza la instalación, zfs-dkmspero las dependencias pueden variar para diferentes versiones de Debian y para diferentes versiones de los paquetes de Debian ZoL:

apt-get install  zfsutils-linux

Parece que hay un error en el archivo de la unidad systemd zfs-share. Está tratando de correr en /usr/bin/rmlugar de /bin/rm.

La solución rápida es ejecutar ln -s /bin/rm /usr/bin, o alternativamente:

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

y luego reinicie los servicios zfs:

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

NOTA: modprobe zfsEjecuté manualmente antes de reiniciar cualquiera de los servicios de zfs. No estoy seguro de si lo harán automáticamente o no, por lo que es posible que deba hacerlo también.

Por cierto, probablemente también quieras apt-get install zfs-initramfs, para asegurarte de que zfs se cargue durante initramfs.


Probé que esto funciona 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

El zpool funciona y / tank se monta automáticamente después de un reinicio.

Conclusión: funciona ahora.


Por cierto, este tramo VM utiliza un ZFS Zvol creado en mi sidsistema principal como su disco. Hice una instantánea si fue inmediatamente después de la instalación inicial, antes de instalar spl-dkms y zfs-dkms para poder volver rápidamente y comenzar de nuevo si algo importante salía mal.

Primero hice el zvol con solo 1GB y necesitaba aumentarlo más tarde para tener suficiente espacio para 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  -

La configuración compression=lz4del tanque en la máquina virtual es probablemente peor que inútil: el zvol ya tiene compresión lz4.

cas
fuente
Traté de instalarlo en una nueva máquina virtual nueva, pero sigo teniendo problemas, supongo ... algunos servicios no se inician correctamente ... Hasta donde puedo ver, la lista de errores de ZFS DKMS está llena de errores "no se pueden instalar" informes. Me pregunto si es normal que los desarrolladores dejen pasar meses después de tantas solicitudes de corrección de errores reproducibles solo con apt-get install zfs-dkms ..
user3450548
En la parte en la que solicita el directorio de CD que quería decir: / etc / systemd / system /? porque / etc / systemd / service no existe ... también tengo este mensaje: "No se pudo reiniciar zfs-import-mount.service: no se encontró la unidad zfs-import-mount.service". y "Error al reiniciar zfs-import-share.service: Unidad zfs-import-share.service no encontrada".
user3450548
Parece que también tengo problemas con el servicio ZFS-ZED leyendo journalctl -xe: 11 de agosto 23:03:23 debian zed [70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11 de agosto 23:03:23 debian zed [70734]: Error al inicializar libzfs 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service: Proceso principal salido, código = salido, estado = 1 / FALLA 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service: la unidad entró en estado fallido. 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service: Error con el resultado 'código de salida'.
user3450548