Instale o zfs no trecho debian 9

7

Eu tentei instalar o zfs no debian 9.1, mas estou com alguns erros.

Minha primeira instalação foi apenas do zfs-dkms, mas eu li na rede que também o spl-dkms é necessário para que o zfs-dkms seja executado.

Os meus passos foram mudar o meu sources.list adicionando o contrib non-free da seguinte forma:

/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

Concluiu uma atualização clássica do apt-get e tentou instalar o zfs com o seguinte:

apt-get install spl-dkms

e somente depois

apt-get install zfs-dkms

Como resultado, tenho estes erros:

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

Lendo journalctl -xe como sugerido, obtenho:

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.

O que há de errado aqui? Eu perdi alguma outra coisa? Como o pacote zfs-linux está relacionado à instalação do zfs?

Qual é a maneira correta de instalar o zfs no debian 9?

    
por user3450548 03.08.2017 / 00:52

3 respostas

5

A resposta real de @cas é boa, mas tem algumas correções a serem aplicadas.

Então, vamos fazer uma nova instalação do Debian 9 e assumir que os repositórios contrib non-free também não estão habilitados.

Passo 0 - Ativar os repositórios não-livres contrib

Eu usei sed para encontrar e substituir a palavra main dentro de /etc/apt/sources.list

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

apt-get update

Etapa 1 - Instalação do ZFS

Desde as últimas correções, spl-dkms é visto corretamente como zfs-dkms de dependência, por isso é recuperado automaticamente e não é necessário instalá-lo manualmente antes de zfs-dkms . O link simbólico é necessário devido a um bug dentro da distribuição do zfs no Debian, que não procura por rm binário na posição correta.

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

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

apt-get -y install zfs-dkms

Etapa 2 - Reinicialização do ZFS

Neste ponto, o zfs-dkms está instalado, mas gera erros em journalctl -xe ; para iniciar o zfs use corretamente:

/sbin/modprobe zfs

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

Passo 3 - VOCÊ DEVE CRIAR PELO MENOS UM ZPOOL

Neste ponto, descobri que você deve criar um zpool antes da reinicialização , caso contrário, o zfs não carregará os módulos apropriados se não houver zpools. É uma espécie de mecanismo de salvamento de recursos (mas, mesmo nesse caso, isso ainda lançará erros dentro de journalctl -xe )

link

" We are not doing this because ZFS modules would taint the kernel, if there's no zpool available then it shouldn't be loaded. "

Se você perder esta parte, você deve começar do Passo 2

Por exemplo, usando o exemplo fornecido por @cas, você pode criar este zpool baseado em arquivo ou criar diretamente os baseados em disco.

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

depois de um reboot , tudo funcionará sem erros em journalctl -xe

    
por 04.10.2017 / 23:30
3

Ligeiras variações para mim no Debian 9.4 - após as adições dos fontes do 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

A montagem estava NÃO suspiro presente - descobriu que havia um /var/jeff com conteúdo - moveu-se para fora do caminho e fez um reboot ...

Após a reinicialização:

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

Hooray - todos presentes e protegidos por bits:

    
por 13.04.2018 / 16:00
2

Acabei de criar uma nova VM extensível para testar isso. Instalação mínima (apenas ssh e ferramentas de sistema padrão), edite sources.list para adicionar contrib e non-free, então:

apt-get install spl-dkms zfs-dkms

Você também pode querer instalar manualmente zfsutils-linux . Ele deve ser instalado automaticamente quando você instalar zfs-dkms , mas as dependências podem variar para diferentes versões do Debian e para versões diferentes dos pacotes Debian ZoL:

apt-get install  zfsutils-linux

Parece que há um bug no arquivo de unidade do systemd para zfs-share . Ele está tentando executar /usr/bin/rm em vez de /bin/rm .

A correção rápida é executar ln -s /bin/rm /usr/bin ou, 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'

e reinicie os serviços do zfs:

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

NOTA: Eu executei manualmente modprobe zfs antes de reiniciar qualquer um dos serviços do zfs. Não tenho certeza se eles farão isso automaticamente ou não, então talvez seja necessário fazer isso também.

BTW, você provavelmente também deseja apt-get install zfs-initramfs , para garantir que o zfs seja carregado durante o initramfs.

Eu testei que isso funciona com:

# 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

O zpool está funcionando e / tank é montado automaticamente após uma reinicialização.

Conclusão: funciona agora.

BTW, essa VM estendida usa um zvol do ZFS criado no meu sistema sid principal como seu disco. Eu fiz um instantâneo se imediatamente após a instalação inicial, antes de instalar o spl-dkms e o zfs-dkms para que eu pudesse reverter rapidamente e começar de novo se algo importante desse errado.

Eu fiz primeiro o zvol com apenas 1GB e precisei aumentá-lo mais tarde para ter espaço suficiente para o 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  -

definir compression=lz4 no tank na VM é provavelmente pior do que inútil - o zvol já possui compressão lz4.

    
por 03.08.2017 / 11:52

Tags