ZFS é um sistema de arquivos avançado e um gerenciador de volume utilizado em sistemas operacionais como o Linux e o FreeBSD. Veja: O que é ZFS? Um sistema de arquivos Opensource
Conforme já falamos no post O que é ZFS? Um sistema de arquivos Opensource, há uma incompatibilidade entre as licenças CDDL(licença do zfs) e a GPL(licença do kernel Linux) que é um problema técnico e impede que o ZFS seja integrado totalmente ao kernel do Linux de forma nativa. Este é um problema complexo que não tem uma solução fácil. Como resultado, o ZFS geralmente é usado como um sistema de arquivos separado do kernel do Linux. Para isso é usado o que chamamos de DKMS, veremos mais adiante sobre isso.
Aqui entra o ZFS on Linux, ou apenas ZoL, que é um projeto financiado pelo Lawrence Livermore National Laboratory para desenvolver um módulo de kernel Linux nativo.
O ZoL (ZFS on Linux) é um projeto de código aberto que traz o ZFS, um sistema de arquivos, um gerenciador de volume e um sistema de armazenamento de dados, para o Linux. O ZoL é desenvolvido e mantido pela OpenZFS Foundation, uma organização sem fins lucrativos que promove o desenvolvimento e o uso do ZFS.
categoriaoutros
DKMS é uma estrutura que permite a instalação e atualização automática de módulos de kernel em sistemas Linux.
O DKMS é usado para compilar e instalar módulos do kernel, como o módulo ZFS, garantindo a compatibilidade entre as licenças e permitindo a utilização do ZFS no kernel Linux. Ao injetar o ZFS no kernel via DKMS, o kernel do Linux entenderá o que é ZFS.
Mas mesmo com o DKMS, o ZFS pode não funcionar 100% OK,o que pode acarretar na sua parada em casos de atualização do kernel ou até mesmo do zfs.
Uma coisa a ser observada é que esses problemas são baseados no cenários de testes realizados por mim. Isso pode significar que você tenha um cenário diferente ou que precise de procedimentos com pequenos ajustes.
Solução 01 para “The ZFS modules are not loaded”
Nessa primeira solução iremos supor que está o kernel do LInux, o ZFS e o DKMS estão todos instalados, configurados e com status OK. Mas mesmo assim quando o sistema inicia após um boot e você vai executar um zpool status o erro The ZFS modules are not loaded ocorre.
Nesse caso, simplesmente execute,
modprobe zfs
Esse é um problema comum e de fácil solução. Se sempre ocorrer após cada reinício da sua distro Linux então procure colocar para o módulo zfs iniciar junto com o sistema.
Execute o comando abaixo para fazer o módulo
Solução 02 para “The ZFS modules are not loaded”
Nessa solução 02 temos um cenário mais complicado, onde, por exemplo, após uma atualização do ZFS ou do Kernel o módulo zfs não é mais executado, nem mesmo se usarmos modprobe zfs.
Com o DKMS o ZFS funciona muito bem, mas realmente trabalha com uma única suposição: o sistema poderá gerar problemas quando reinicializado após atualizado o ZFS ou Kernel do Linux.
Então, o que acontecerá depois que você atualizar o sistema (por exemplo, kernel, ZFS em pacotes Linux) e o sistema for reinicializado? Há uma boa chance de que seu módulo ZFS não seja carregado. Na melhor das hipóteses, execute modprobe zfs e veja se terá sorte. Na pior das hipóteses, siga os procedimentos da tabela abaixo:
Obs.: o módulo SPL(SPL – Standard Portability Library) é uma biblioteca de software que fornece suporte para a portabilidade de aplicativos entre diferentes sistemas operacionais Unix-like. Ele oferece uma camada de abstração para facilitar a escrita de código portável e independente de plataforma.
Evento | O que acontecerá após a reinicialização? | O que você precisa fazer? |
Você atualiza o kernel primeiro, depois o ZFS no Linux | Antes de 12 de dezembro de 2018: seu sistema carregará os módulos ZFS. 12 de dezembro de 2018 a dezembro de 2019: Provavelmente não Depois de janeiro de 2020: 50/50 | Remova os kernels antigos do banco de dados DKMS. Recrie os módulos ZFS (e SPL se estiver executando 0.7.x) com o novo kernel no banco de dados DKMS. |
Você atualiza o ZFS no Linux primeiro, depois o kernel | Se o seu sistema inicializar no novo kernel (que é o padrão), seu sistema NÃO carregará os módulos ZFS. | Remova e instale os pacotes ZFS e DKMS. Remova os kernels antigos do banco de dados DKMS. Recrie os módulos SPL e ZFS com o novo kernel no banco de dados DKMS. |
Você atualiza o ZFS apenas no Linux. Kernel não foi atualizado. | Seu sistema carregará os módulos ZFS. | Remova os kernels antigos do banco de dados DKMS. Recrie os módulos SPL e ZFS com o novo kernel no banco de dados DKMS. |
Você atualiza o kernel apenas. O ZFS no Linux não foi atualizado. | Seu sistema carregará os módulos ZFS. | Remova os kernels antigos do banco de dados DKMS. Recrie os módulos SPL e ZFS com o novo kernel no banco de dados DKMS. |
Existem duas etapas para resgatar seus dados de volta. Começaremos removendo seu módulo DKMS primeiro. Se não funcionar, reinstalaremos os pacotes ZFS. Além disso, estou assumindo que seu sistema foi inicializado com o novo kernel. Lembre-se de que o ZFS no Linux não funciona com o kernel Linux v4 (a partir de 3 de outubro de 2019, via kernel-ml via CentOS 7 ou nativo v4 no CentOS 8). Só funciona com v3.
Se você precisar acessar seus dados, a maneira mais fácil é inicializar com o antigo kernel de trabalho. Quando estiver pronto para limpar o problema, inicialize no novo kernel e siga minhas instruções abaixo.
Passo 1: Limpe e reinstale os módulos DKMS
Na maioria das vezes, o ZFS no Linux bagunça os módulos DKMS após a atualização. Sugiro limpar e reinstalar os módulos DKMS mais uma vez. A partir de 12 de dezembro de 2018, o ZFS no Linux removerá todos os módulos DKMS sem motivo.
Primeiro, verifique o status do seu DKMS. Você precisará limpar o DKMS se estiver vazio (nada está instalado), órfão (a biblioteca está instalada, mas nenhuma delas está anexada a nenhum kernel) ou múltipla (vários kernels instalados). Se estiver limpo (somente kernel único), você pode pular esta etapa. Se você estiver usando o ZFS no Linux versão 0.7.x, seu DKMS conterá dois módulos (zfs e spl). Se você estiver usando ver. 0.8.x, seu DKMS conterá apenas um módulo (zfs).
Execute para ver o status do módulo dkms:
dkms status
Em geral, tudo o que você deseja é que apenas uma versão do modoule DKMS seja instalada e anexada a apenas um kernel. Se você vir várias versões de módulos DKMS ou vários kernels, isso é ruim.
[root@oraclelinux92 ~]# dkms status zfs/2.1.12, 5.14.0-284.25.1.0.1.el9_2.x86_64, x86_64: installed
Se a sua situação for algo como o seguinte:
Error! Could not locate dkms.conf file. File: /var/lib/dkms/zfs/0.8.2/source/dkms.conf does not exist.
Isso significa que você tem várias versões de módulos dkms-ZFS instaladas em seu sistema. no exemplo acima, o 0.8.3 está em execução e o antigo (0.8.2) ainda está disponível. Verifique a pasta (/var/lib/dkms/zfs/) para ver se alguma biblioteca antiga precisa ser removida.
[root@oraclelinux92 ~]# cd /var/lib/dkms/zfs/ [root@oraclelinux92 zfs]# ls -la total 0 drwxr-xr-x 3 root root 74 ago 7 19:09 . drwxr-xr-x 3 root root 47 ago 7 18:40 .. drwxr-xr-x 3 root root 60 ago 7 19:09 2.1.12 lrwxrwxrwx 1 root root 46 ago 7 19:09 kernel-5.14.0-284.25.1.0.1.el9_2.x86_64-x86_64 -> 2.1.12/5.14.0-284.25.1.0.1.el9_2.x86_64/x86_64
Você pode remover primeiro os módulos ZFS e SPL DKMS e depois reinstalá-los:
Execute se sua versão é 0.7.x
sudo dkms remove zfs/0.7.12 --all; sudo dkms remove spl/0.7.12 --all;
Ou se sua versão for 0.8.x
sudo dkms remove zfs/0.8.3 --all;
Às vezes, você precisará remover o kernel antigo manualmente:
sudo dkms remove zfs/0.7.12 -k 3.10.0-862.14.4.el7.x86_64; sudo dkms remove spl/0.7.12 -k 3.10.0-862.14.4.el7.x86_64;
Hora de reinstalá-los.
Se estiver usando 0.7.x
sudo dkms --force install spl/0.7.12; sudo dkms --force install zfs/0.7.12;
ou se estiver usando 0.8.3
sudo dkms --force install zfs/0.8.3;
Execute o status DKMS novamente. Você deve ver que ZPL e SPL estão anexados ao novo kernel:
Sempre observando as versões. Se for 0.7.x
spl, 0.7.12, 3.10.0-957.1.3.el7.x86_64, x86_64: installed zfs, 0.7.12, 3.10.0-957.1.3.el7.x86_64, x86_64: installed
se for 0.8.x
zfs, 0.8.3, 3.10.0-1127.el7.x86_64, x86_64: installed
Tente carregar o módulo ZFS e importar seus dados ZFS:
sudo /sbin/modprobe zfs sudo zpool import -a
Se tudo estiver bem, você pode reiniciar seu sistema e testar para ver se o ZFS é carregado automaticamente ou não. Quando tudo estiver bem, remova o kernel antigo do sistema.
sudo package-cleanup --oldkernels --count=1 -y
É isso, estamos quase prontos.
Reinstale os pacotes ZFS
Se você tentou o primeiro passo e não funcionou. Você pode querer reinstalar os pacotes ZFS. Aqui está uma mensagem de erro típica: Você tenta importar os dados do ZFS e o sistema reclama:
#zpool import -a The ZFS modules are not loaded. Try running '/sbin/modprobe zfs' as root to load them.
Então você tenta carregar o módulo ZFS e o sistema reclama novamente:
#/sbin/modprobe zfs modprobe: FATAL: Module zfs not found.
ou
modprobe: ERROR: could not insert 'zfs': Invalid argument
O que você precisa fazer é apagar todos os pacotes ZFS e relacionados:
yum erase zfs zfs-dkms libzfs2 spl spl-dkms libzpool2 -y
Reinicie o sistema. Este passo é muito importante.
reboot
Depois disso, tente instalar o ZFS novamente.
dnf install zfs -y
Se o sistema reclamar sobre pacotes dependentes incompatíveis, tente primeiro remover os pacotes afetados e execute a instalação novamente. Após a instalação, tente iniciar o módulo ZFS:
/sbin/modprobe zfs zpool import -a
Se o ZFS estiver funcionando, limpe seu DKMS a partir da etapa 1. Se ele reclamar novamente, siga as etapas abaixo:
- Reinício
- Limpe o cache do repositório yum e tente atualizar o sistema novamente. (sudo dnf clean all)
- Reinicie para o kernel mais recente Apague o ZFS e os pacotes relacionados, tente novamente.
Lembre-se de que o ZFS no Linux é baseado no DKMS, uma plataforma com muitos erros e pouco confiável. Às vezes, quando você desinstala e instala os pacotes, não espere que ele faça a mesma coisa que uma nova instalação. Antes de enviar seu servidor para o aterro sanitário, tente o seguinte:
Verifique o status do dkms:
#dkms status
para versões 0.7.x
zfs, 0.7.2: added spl, 0.7.2: added
para versões 0.8.x
zfs, 0.8.3: added
Se você vir esta mensagem, isso significa que os pacotes ZFS foram instalados, mas o DKMS não sabe como usá-los. Você precisará informar ao DKMS sobre isso:
para versões 0.7.x
dkms --force install zfs/0.7.2 dkms --force install spl/0.7.2
para versões 0.8.x
dkms --force install zfs/0.8.3
Tente agora
/sbin/modprobe zfs zpool import -a
Se você já tentou mais de 3 vezes sem sucesso, não perca tempo. Você pode querer trazer os discos ZFS para um servidor diferente. O novo servidor deve ser capaz de reconhecer os discos ZFS. Para o servidor original, você pode se conectar aos discos ZFS no novo servidor via NFS usando o caminho original. Isso minimizará o impacto das mudanças.
Lembre-se de que a versão do ZFS é muito importante. O servidor com a versão mais recente do ZFS pode ler os discos ZFS criados em versões mais antigas do ZFS. Você sempre pode verificar as versões do ZFS executando o seguinte:
Para pegar a versão do host
sudo zfs upgrade -v sudo zpool upgrade -v
ou pegar a versão dos discos ZFS
sudo zfs get version sudo zpool get version
Fonte: icesquare