Eu li muitas declarações controversas sobre o ZFS em sistemas com pouca memória na Internet, mas a maioria dos casos de uso foi para armazenamento de dados de alto desempenho.
Quero usar o ZFS não por motivos de desempenho, mas porque ele suporta compactação e desduplicação transparentes (a última pode ser opcional) e ainda parece mais maduro que o BTRFS. Não quero usar nenhuma configuração RAID.
Quero usá-lo em um laptop, para sistema de arquivos raiz e doméstico, e espaço de armazenamento e segurança de dados (capacidade de recuperação após perda de energia ou outras inconsistências aleatórias, risco muito baixo de corrupção devido à pouca RAM, etc.) é mais importante do que desempenho do disco. Quero segurança comparável à fornecida por ext2/3/4.
Eu gostaria de usar o ext4 em cima de um ZVOL.
Então, as perguntas são:
- O ZFS pode ser configurado para funcionar?de forma confiávelcom "pouca RAM" se o desempenho/cache de IO não for motivo de preocupação e nenhuma funcionalidade RAID for desejada?
- Como a RAM necessária muda se eu não uso o ZFS como sistema de arquivos, mas apenas uso ZVOLs onde coloco outro sistema de arquivos?
- Como a RAM precisa ser alterada com a desduplicação ativada? Se a desduplicação estiver ativada e a RAM começar a ficar baixa, ainda é seguro - o ZFS pode simplesmente suspender a desduplicação e usar menos RAM?
- É possível desativar a desduplicação automática, mas executá-la manualmente de vez em quando?
- O ext4 em cima de um ZVOL pode armazenar meus dados de forma confiável, mesmo em situações de pouca RAM, e se ocorrerem inconsistências, as chances de sucesso para reparos são altas (como acontece com o ext2/3/4)? O ext4 no topo de um ZVOL aumenta a robustez porque adiciona a robustez do ext4 ou os dados são tão robustos quanto o ZVOL subjacente?
Especificações do sistema:
- Linux
- 8 GiB de RAM (compartilhada com a placa gráfica), mas a maior parte (pelo menos 7 GiB) deve estar disponível para software de espaço do usuário,
- cerca de 700 GiB de armazenamento SSD para usar no ZFS,
- talvez em outro sistema 128 GiB de eMMC para usar no ZFS.
Uso atual do disco (
du -sh
dos diretórios maiores em/
) (/ é ext4, /var montado no topo é reiserfs) (deseja mover isso para um armazenamento com compactação transparente):74M /etc 342G /home 5.0G /opt 1.5G /root 261M /tmp 35G /usr 30G /var
OU, basta usar o BTRFS (li que pode ocorrer perda de dados grave/difícil de recuperar devido a "bugs", mas isso é tudo controverso ...)?
Responder1
Resposta curta:
- Sim, é possível usar pouca RAM (~ 1 GB) com ZFS com sucesso.
- Você não deve usar desduplicação, mas RAID e compactação geralmente são adequados.
- Depois de ativar a duplicação, ela funcionará para todos os dados recém-gravados e você não poderá se livrar deles facilmente.
- Você não pode ativar a eliminação de duplicação retroativa, porque ela funciona apenas com dados on-line.
- Sua ideia é desnecessariamente complexa sem um bom motivo, então eu recomendaria apenas usar o ZFS e encerrar o dia.
Resposta longa:
O ZFS pode ser configurado para funcionar de maneira confiável com "pouca RAM" se o desempenho/cache de IO não for preocupante e nenhuma funcionalidade RAID for desejada?
Sim, mesmo com os recursos RAID ativados. Você precisa de muito menos do que as pessoas afirmam na rede, por exemplo, veja esse cara que executa um servidor de arquivos rápido com FreeBSD, 2 núcleos e768MBvirtualizado. Ou dê uma olhada no Guia SolarisInternals (atualmente disponível apenas em archive.org), onde 512 MB são mencionados como o mínimo, 1 GB como recomendação mínima e 2 GB como recomendação completa.
Eu ficaria longe da desduplicação, no entanto. Não porque seja lento por causa da memória de paginação, mas porque você não pode voltar ao estado não desduplicado se o sistema parar. Além disso, é uma troca entre RAM e discos, e em um sistema econômico você não tem nenhum dos dois, então não ganhará muito.
Como a RAM necessária muda se eu não uso o ZFS como sistema de arquivos, mas apenas uso ZVOLs onde coloco outro sistema de arquivos?
Você precisaria de memória adicional para o segundo sistema de arquivos e para a camada acima do ZFS, dependendo de como você planeja acessá-lo (virtualização como KVM, FUSE, iSCSI etc.)
Como a RAM precisa ser alterada com a desduplicação ativada? Se a desduplicação estiver ativada e a RAM começar a ficar baixa, ainda é seguro - o ZFS pode simplesmente suspender a desduplicação e usar menos RAM?
Você não pode suspender a desduplicação, mas seus dados ainda estarão seguros. Haverá muita troca e espera de memória, então pode não ser muito utilizável. A desduplicação está on-line, portanto, para desativá-la, você precisará desativar a desduplicação e gravar todos os dados novamente (o que basicamente copia todos os dados para um novo sistema de arquivos e destrói o antigo).
É possível desativar a desduplicação automática, mas executá-la manualmente de vez em quando?
Não, porque não afeta os dados em repouso. Se você tiver desduplicado e quiser gravar um bloco, o ZFS verificará se ele está presente na tabela de desduplicação. Se sim, a gravação será descartada e uma referência será adicionada à tabela de desduplicação. Se não, escreve-se e acrescenta-se a primeira referência. Isso significa que seus dados antigos não são afetados pela desduplicação e ativá-los sem gravar nenhum bloco novo não faz nada em relação ao tamanho usado dos dados antigos.
O ext4 em cima de um ZVOL pode armazenar meus dados de forma confiável, mesmo em situações de pouca RAM, e se ocorrerem inconsistências, as chances de sucesso para reparos são altas (como acontece com o ext2/3/4)? O ext4 no topo de um ZVOL aumenta a robustez porque adiciona a robustez do ext4 ou os dados são tão robustos quanto o ZVOL subjacente?
A meu ver, isso é uma complexidade desnecessária, pois você não obteria novos recursos (como no caso inverso com ext4 abaixo e ZFS na parte superior, por exemplo, instantâneos) e, além disso, obteria algumas novas responsabilidades, como fsck
mais fdisk
exercícios de formatação.
O único caso de uso em que eu faria algo assim seria se tivesse um aplicativo especial que exigisse recursos de baixo nível de um sistema de arquivos específico ou tivesse suposições codificadas (felizmente, esse comportamento parece ter morrido nos últimos tempos).
Responder2
user121391 fez um ótimo trabalho ao fornecer boas informações, então vou abordar apenas suas preocupações com a memória.
No que diz respeito à memória, sim, o ZFS pode consumir muita memória. Ele utilizará a memória livre do sistema para armazenamento em cache. Ao longo dos anos, a Sun, agora a Oracle, fez ajustes, melhorando o desempenho, a confiabilidade e melhorando o uso da memória. Você pode verificar o site do guia de ajuste interno/malvado do ZFS ouBlog do ZFSpara detalhes. No entanto, a maioria desses ajustes e recursos só podem ser encontrados na versão Solaris 11.x do ZFS.
Se você está realmente preocupado com a memória, não vai querer usar a desduplicação, pois ela requer uma quantidade razoável de memória, pois as desduplicações são ativas e precisam manter a tabela de desduplicação na memória.