Instale o zfs no debian 9 stretch

11

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

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


Minhas etapas foram alterar meu sources.list adicionando o contrib não-livre da seguinte maneira:

/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

Faça uma atualização clássica do apt-get e tente 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:

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? Perdi outra coisa? Como o pacote zfs-linux está relacionado à instalação do zfs?

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

user3450548
fonte
Qual é a saída de dkms status | grep zfs?
GAD3R 3/17/17

Respostas:

9

A resposta real por @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 não-livres também não estão habilitados.


Etapa 0 - Habilite os repositórios contrib não-livres

Eu costumava sedencontrar e substituir a palavra principal por dentro/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

Como as últimas correções spl-dkmssão vistas corretamente como zfs-dkmsdependência, elas são recuperadas automaticamente e não é necessário instalá-las manualmente antes zfs-dkms. O link simbólico é necessário devido a um bug dentro da distribuição zfs no Debian, que não procura rmbiná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 journalctl -xe; Para iniciar o zfs corretamente, use:

/sbin/modprobe zfs

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

Etapa 3 - VOCÊ DEVE CRIAR PELO MENOS UM ZPOOL

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

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

"Não estamos fazendo isso porque os módulos ZFS contaminam o kernel, se não houver zpool disponível, ele não deverá ser carregado."

Se você perder esta parte, terá que começar a partir da Etapa 2

Por exemplo, usando o exemplo fornecido pelo @cas, você pode criar esse 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 reboottudo tudo funcionará sem erros nojournalctl -xe

user3450548
fonte
3

Pequenas variações para mim no Debian 9.4 - após as adições das 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 NÃO estava presente suspiro - descobriu que havia um /var/jeffconteúdo existente - moveu isso para fora do caminho e fez uma 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 os presentes e protegidos contra a podridão de bits :)

Jeff
fonte
+1, mas recomendamos vivamente a utilização /dev/disk/by-id/?de /dev/sd?dispositivos. Use os nomes dos by-ids ao criar o pool ou corrija posteriormente com zpool export <pool>seguido de zpool import -d /dev/disk/by-id/ <pool>. Esses nomes, ao contrário de / dev / sd *, persistirão durante as reinicializações. Além disso, se você tiver uma impressora de etiquetas, poderá imprimir etiquetas com versões curtas dos nomes dos dispositivos com ID (geralmente, há uma parte do número de série do nome que cria uma etiqueta boa, curta e exclusiva) e rotular as unidades para fazê-las fácil identificar se eles precisam ser substituídos.
18718
Ummm - mas o ZFS não se importa com os aliases de disco usados ​​durante a criação - todas as informações são gravadas no zfs-part9 no disco - e é isso que é usado para construir a matriz. Eu realmente não me importo se o que foi / dev / sdb muda para outra coisa no futuro, e eu sempre verifico lsblk -fantes de mexer no hardware da unidade - para nossos servidores de produção, a ferramenta piscar em hdd da Dell é útil para relacionar os atuais alias para a unidade física :) - Eu acho que o / dev / disk / by-id é mais útil para outros sistemas de montagem que não têm a consistência integrada do ZFS - por exemplo, fstab.
19418 Jeff
usar by-id fornecerá nomes úteis / significativos (identificando a marca, modelo e número de série de cada unidade) em zpoolcomandos como statuse list, que podem ser facilmente copiados e colados em qualquer comando zpool offline / desconect / replace / etc necessário. sdanão diz nada de útil. ata-ST4000VN008-2DR166_ZDH35XXXidentifica exatamente que tipo de unidade é e seu número de série. Você ainda pode obter os nomes (correntes) dev curtas se você quiser-los usando a -Lopção com zpool list, zpool status, etc (em minha experiência, principalmente útil com zpool list -L -v).
cas
IME, os nomes significativos ajudam a reduzir o erro humano. É fácil digitar errado, por exemplo, sdd como sdf. muito mais difícil digitar um nome de by-id.
19418
Lol - muitas pessoas fazem a mesma recomendação - eu pessoalmente acho mais fácil lembrar e digitar sdc sde sdf e sdg. Compramos discos em lotes e todos começam com os mesmos caracteres de 48 bytes ou mais e apenas possuem sufixos de 2 a 4 dígitos que diferem. As pessoas não digitam nomes de identificação com ID - usam preenchimento de tabulação - com maior probabilidade de levar a um IMHO oops. Acho que diferenciar uma letra em três caracteres muito mais fácil do que 2-4 dígitos em um nome de 52 caracteres. Eu sei que muitas pessoas também recomendam UUID. Como ZFS não se importa, eu acho que vai ficar com o que eu acho mais fácil - menos às vezes é mais :)
Jeff
3

Acabei de criar uma nova VM trecho para testar isso. Instalação mínima (apenas ssh e ferramentas padrão do sistema), edite o sources.list para adicionar contrib e não-livre, depois:

apt-get install spl-dkms zfs-dkms

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

apt-get install  zfsutils-linux

Parece que há um erro no arquivo da unidade systemd zfs-share. Está tentando rodar em /usr/bin/rmvez de /bin/rm.

A solução rápida é executar ln -s /bin/rm /usr/binou, 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, em seguida, reinicie os serviços zfs:

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

NOTA: Executei manualmente modprobe zfsantes de reiniciar qualquer um dos serviços zfs. Não tenho certeza se eles farão isso automaticamente ou não, então você pode precisar fazer isso também.

BTW, você provavelmente apt-get install zfs-initramfstambém deseja 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 ZFS zvol criado no meu sidsistema principal como disco. Fiz uma captura instantânea imediatamente após a instalação inicial, antes de instalar spl-dkms e zfs-dkms, para que eu pudesse rapidamente reverter e iniciar novamente se algo importante desse errado.

Primeiro criei o zvol com apenas 1 GB e precisava 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  -

a configuração compression=lz4no tanque na VM provavelmente é pior do que inútil - o zvol já tem compressão lz4.

cas
fonte
Eu tentei instalá-lo em uma nova vm nova, mas ainda estou com problemas, acho. Alguns serviços não estão sendo iniciados corretamente. relatórios. Gostaria de saber se é normal que os desenvolvedores deixar passar meses após tais muitos pedidos bugfix reprodutíveis apenas com o apt-get install ZFS-dkms ..
user3450548
Na parte em que você solicitou o diretório do CD, quis dizer: / etc / systemd / system /? porque / etc / systemd / service não existe .. também tenho esta mensagem: "Falha ao reiniciar o zfs-import-mount.service: Unidade zfs-import-mount.service não encontrada." e "Falha ao reiniciar o zfs-import-share.service: Unidade zfs-import-share.service não encontrada."
user3450548
Parece que também tenho problemas com o serviço ZFS-ZED lendo 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]: falha ao inicializar o libzfs 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service: Processo principal encerrado, código = encerrado, status = 1 / FAILURE 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service: a unidade entrou no estado de falha. 11 de agosto 23:03:23 debian systemd [1]: zfs-zed.service: Falha no resultado 'código de saída'.
user3450548