Instalar zfs en debian 9 stretch
On febrero 18, 2021 by adminIntenté instalar zfs en debian 9.1, sin embargo, estoy experimentando algunos errores.
Mi primer la instalación fue solo de zfs-dkms, sin embargo, leí en la red que también se requiere spl-dkms para que zfs-dkms se ejecute.
Mis pasos fueron cambiar mi sources.list agregando contrib non-free 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
Realicé 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 se sugiere, obtengo:
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é ocurre 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?
Comentarios
Respuesta
La respuesta real de @cas es buena, pero se deben aplicar algunas correcciones.
Así que realicemos una nueva instalación de Debian 9 y supongamos que Los repositorios contrib non-free tampoco están habilitados.
Paso 0 – Habilite los repositorios contrib non-free
Usé sed
para buscar y reemplazar la palabra principal dentro de /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
Desde las últimas correcciones, spl-dkms
se ve correctamente como zfs-dkms
de pendiente para que se recupere automáticamente y no sea necesario instalarlo manualmente antes de zfs-dkms
. El enlace simbólico es necesario debido a un error dentro de la distribución zfs en Debian, que «no busca el binario rm
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 en 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 clasificación del mecanismo de ahorro de recursos (pero incluso en ese caso, esto arrojará errores dentro de journalctl -xe
)
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864348
«No estamos haciendo esto porque los módulos ZFS dañarían el kernel, si no hay zpool disponible, entonces no debería «cargarse».
Si se pierde esta parte, debe comenzar desde el Paso 2
Por ejemplo, utilizando el ejemplo proporcionado por @cas, puede crear este zpool basado en archivos o crear directamente sus archivos basados en disco.
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 reboot
, todo funcionará sin errores en journalctl -xe
Respuesta
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
La montura era NO suspiro presente – descubrió que había un /var/jeff
con contenido: lo quitó 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 rotura de bits 🙂
Comentarios
- +1, pero recomendamos encarecidamente utilizar dispositivos
/dev/disk/by-id/?
en lugar de/dev/sd?
. Utilice los nombres por id al crear el grupo o corríjalos más tarde conzpool export <pool>
seguido dezpool import -d /dev/disk/by-id/ <pool>
. Estos nombres, a diferencia de / dev / sd *, persistirán en los reinicios. Además, si tiene una impresora de etiquetas, puede imprimir etiquetas con versiones cortas de los nombres de los dispositivos por id (generalmente hay ‘ s una parte del número de serie del nombre que hace un buen , etiqueta corta y única) y etiquete las unidades para que sean fáciles de identificar si alguna vez necesitan ser reemplazadas. - Ummm, pero a ZFS no le importan los alias de disco utilizados durante la creación, toda la información está escrita a zfs-part9 en el disco, y eso es lo que se usa para construir la matriz.No ‘ realmente me importa si lo que era / dev / sdb cambia a otra cosa en el futuro, y siempre verifico con
lsblk -f
solo antes de discutir con el hardware de la unidad: para nuestros servidores de producción, la herramienta Dell hdd blink es útil para relacionar el alias del sistema operativo actual con la unidad física 🙂 Creo que / dev / disk / by-id es más útil para otros sistemas de montaje que no ‘ t tienen ZFS ‘ s integrado en la coherencia, p. ej. fstab. - El uso de by-id le dará nombres significativos / útiles (identificando cada marca, modelo y número de serie de ‘ s) en
zpool
comando comostatus
ylist
, que se puede copiar y pegar fácilmente en cualquier zpool sin conexión / desconexión necesario / reemplazar / etc comandos.sda
no ‘ te dice nada útil.ata-ST4000VN008-2DR166_ZDH35XXX
identifica exactamente qué tipo de unidad es y su número de serie. Aún puede obtener los nombres de desarrollo cortos (actuales) si alguna vez los desea usando la opción-L
conzpool list
,zpool status
, etc (en mi experiencia, más útil conzpool list -L -v
). - IME, los nombres significativos ayudan a reducir el error humano. Es ‘ fácil de escribir incorrectamente, por ejemplo, sdd como sdf. es mucho más difícil escribir mal un nombre de identificación.
- Lol – mucha gente hace la misma recomendación – personalmente me resulta más fácil de recordar y escribir sdc sde sdf y sdg. Compramos discos en lotes y todos comienzan con los mismos 48 caracteres por identificación y solo tienen sufijos de 2 a 4 dígitos que difieren. Las personas no ‘ t escriben nombres por ID (usan la función de completar con tabulación), lo que es más probable que genere un error en mi humilde opinión. Encuentro que diferenciar una letra en un nombre de tres caracteres es mucho más fácil que de 2 a 4 dígitos en un nombre de 52 caracteres. Sé que mucha gente también recomienda UUID. Como a ZFS no ‘ t le importa, creo que me ceñiré a lo que me resulta más fácil, a veces menos es más 🙂
Respuesta
Acabo de crear una nueva VM extensible para probar esto. Instalación mínima (solo ssh y herramientas estándar del sistema), edite sources.list para agregar contrib y non-free, luego:
apt-get install spl-dkms zfs-dkms
También puede querer manualmente instale zfsutils-linux
. Debería instalarse automáticamente cuando instale zfs-dkms
pero las dependencias pueden variar para diferentes versiones de Debian y para diferentes versiones de los paquetes Debian ZoL:
apt-get install zfsutils-linux
Parece que hay «un error en el archivo de la unidad systemd para zfs-share
. Está intentando ejecutar /usr/bin/rm
en lugar 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 reinicia los servicios de zfs:
systemctl restart zfs-import-cache systemctl restart zfs-import-scan systemctl restart zfs-mount systemctl restart zfs-share
NOTA: Ejecuté manualmente modprobe zfs
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 usted también deba hacerlo.
Por cierto, probablemente también desee apt-get install zfs-initramfs
, para asegurar 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 es funcionando y / tank se monta automáticamente después de un reinicio.
Conclusión: funciona ahora.
Por cierto, esta VM extensible usa un zvol ZFS creado en mi sid
sistema como su disco. Hice una instantánea inmediatamente después de la instalación inicial, antes de instalar spl-dkms y zfs-dkms para poder revertir 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 -
configuración compression=lz4
en el tanque en la VM es probablemente peor que inútil: el zvol ya tiene compresión lz4.
Comentarios
- Intenté instálelo en una nueva máquina virtual, pero ‘ todavía tengo problemas, supongo … algunos servicios no ‘ t se están iniciando correctamente .. Como Hasta ahora puedo ver que la lista de errores ZFS DKMS está llena de » can ‘ t instalar » informes de errores. 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 ..
- En la parte en la que pregunta por el directorio de cd, quiso decir: / etc / systemd / system /? porque / etc / systemd / service no existe … también tengo este mensaje: » No se pudo reiniciar zfs-import-mount.service: Unit zfs-import-mount.service not encontrado. » y » Error al reiniciar zfs-import-share.service: Unidad zfs-import-share.servicio no encontrado. »
- 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]: No se pudo inicializar libzfs 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service : Proceso principal salido, código = salido, estado = 1 / FALLO 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 ‘ exit-code ‘.
- ¿Han cambiado o mejorado las cosas con Debian 10? Y si es así, ¿debería publicar una pregunta separada para Debian 10?
dkms status | grep zfs
?