OpenZFs Backed NFS Server Part 1 - Criando um servidor

OpenZFs Backed NFS Server Part 1 - Criando um servidor
Se você está familiarizado com o OpenZFS, sabe tudo sobre sua interface rica em recursos, arquitetura flexível, somas de verificação confiáveis ​​e mecanismos de vaca. Talvez você também queira na sua área de trabalho, mas não deseja reformatar seus discos e partições existentes. Talvez você esteja usando o Windows 10, o que não suporta o OpenZFS. Bem, nesta postagem do blog, discutirei como você pode criar um sistema de arquivos de rede ou NFS, executando em um servidor separado. Este dispositivo NFS pode então ser montado em sua estação de trabalho na área de trabalho. Dessa forma, você pode ter a confiabilidade e a robustez do ZFS com a facilidade de uso do seu sistema operacional favorito da área de trabalho, já que o NFS está disponível em todas as plataformas.

Detalharei a criação do NFS Mount Point em um cliente do Windows 10 na parte 2 desta série. Por enquanto, vamos nos concentrar em um servidor Ubuntu, oferecendo armazenamento NFS e um cliente do Ubuntu tentando se conectar a ele.

A configuração

Meu servidor NFS será baseado no Ubuntu 18.04 LTS. Você pode usar sua distração Linux favorita ou FreeBSD, ou qualquer outro sistema operacional que suporta o OpenZFS. Meu motivo para usar o Ubuntu 18.04 é que é bastante popular e reduziria consideravelmente a barreira de entrada.

O NFS deve estar disponível apenas na minha LAN, que tem a máscara de sub -rede de 255.255.255.0 e 192.168.0.1 como seu gateway padrão. Em inglês simples, isso significa que todos os dispositivos conectados à minha rede doméstica (WiFi e Ethernet, et al) terão endereços IP que variam de 192.168.0.2 a 192.168.0.254.

O servidor NFS será configurado para permitir que apenas dispositivos com apenas o endereço IP mencionado tenha acesso ao servidor NFS. Isso garantiria que apenas dispositivos que se conectaram à minha LAN estejam acessando meus arquivos e o mundo exterior não pode acessar. Se você tiver uma configuração 'wifi aberto' ou se a segurança no ponto final do seu roteador for duvidosa, isso não garantiria nenhuma segurança.

Eu não recomendaria executar o NFS pela Internet pública sem medida de segurança adicional.

Por fim, os comandos que estão sendo executados no servidor NFS têm o prompt, o servidor $ e os comandos a serem executados no lado do cliente têm o cliente prompt $ $

Criação de pool e conjunto de dados OpenZFS

1. Criando zpool

Se você já tem um zpool em funcionamento, pule esta etapa. No meu servidor NFS, que está executando o Ubuntu 18.04 LTS Server, eu instalei primeiro o OpenZFS.

Servidor $ sudo apt install zfsutils-linux

Em seguida, listaremos todos os dispositivos de bloco disponíveis, para ver os novos discos (e partições) esperando para serem formatados com ZFS.

$ lsblk
Nome Maj: Min RM Size RO Tipo MountPoint
loop0 7: 0 0 89.5m 1 loop/snap/core/6130
Loop1 7: 1 0 86.9m 1 loop/snap/core/4917
loop2 7: 2 0 91.1m 1 loop/snap/core/6259
SDA 8: 0 0 50G 0 disco
├─sda1 8: 1 0 1m 0 parte
└─sda2 8: 2 0 50g 0 Parte /
SDB 8:16 0 931G 0 disco
SDC 8:32 0 931G 0 disco
SR0 11: 0 1 1024M 0 ROM

Um exemplo típico é mostrado acima, mas sua convenção de nomenclatura pode ser muito diferente. Você terá que usar seu próprio julgamento e ter muito cuidado com isso. Você não quer formatar acidentalmente seu disco do sistema operacional. Por exemplo, a partição SDA1 claramente tem o sistema de arquivos raiz como seu ponto de montagem, para que não seja aconselhável tocá -lo. Se você está usando novos discos, é provável que eles não tenham um ponto de montagem ou qualquer tipo de partição.

Depois de saber o nome de seus dispositivos, usaremos o comando ZPOOL CREATE para formatar alguns desses dispositivos de bloco (chamados SDB e SDC) em um ZPool com um único VDev que é composto de dois disco espelhado.

Servidor $ sudo zpool crie espelho de tanque sdb sdc
Servidor $ sudo zpool status tanque
tanque de status do zpool
Piscina: Tank
Estado: online
Digitalização: nenhum solicitado
Config:
Nome Estado Leia Write Cksum
tanque online 0 0 0
espelho-0 online 0 0 0
sdb online 0 0 0
sdc online 0 0 0
Erros: nenhum erro de dados conhecido

Avançando, você pode adicionar discos em conjuntos de dois (chamados vdev) para aumentar o tamanho deste zpool, os novos discos aparecerão como espelho-1, espelho-2 etc. Você não precisa criar seu zpool do jeito que eu fiz, pode usar o espelhamento com mais discos, você pode usar o striping sem redundância, mas melhor desempenho, ou pode usar Raidz. No final do dia, o que importa é que criamos um zpool chamado Tank. Sobre o qual o NFS compartilhado viverá. Vamos criar um conjunto de dados que será compartilhado. Primeiro, verifique se a piscina, chamada 'Tank', está montada. O ponto de montagem padrão é '/tanque' .

servidor $ sudo zfs tank de montagem
Servidor $ sudo zfs crie tank/nfssshare #crete um novo conjunto de dados no topo da piscina

Definindo permissões

Ao compartilhar um diretório NFS, o superusuário no sistema de clientes não tem acesso a nada no compartilhamento. Enquanto o superusuário do lado do cliente é capaz de fazer qualquer coisa na máquina cliente, a montagem NFS tecnicamente não faz parte da máquina cliente. Portanto, permitir operações em nome do superusuário do lado do cliente mapeado como superusuário do lado do servidor pode resultar em problemas de segurança. Por padrão, o NFS mapeia as ações do superusuário do lado do cliente para ninguém: Nogroup User and User Group. Se você pretende acessar os arquivos montados como root, o conjunto de dados em nosso servidor NFS também deve ter as mesmas permissões,

Servidor $ sudo chown Ninguém: Nogroup /Tank /NfSshare

O servidor NFS executará qualquer ação pela raiz do lado do cliente como usuário ninguém, então a permissão acima permitirá que as operações sejam.

Se você estiver usando um nome de usuário diferente (regular), muitas vezes é conveniente ter um usuário com o mesmo nome de usuário exato de ambos os lados.

Criando compartilhamento de NFS

Depois de criar o ZPOOL, você deve instalar o pacote de servidor NFS no seu gerenciador de pacotes:

Servidor $ sudo apt install nfs-kernel-server

Tradicionalmente, o NFS Server Usa /etc /exporta o arquivo para obter como lista de clientes aprovados e os arquivos aos quais eles terão acesso. No entanto, usaremos o recurso embutido do ZFS para alcançar o mesmo.

Basta usar o comando:

Servidor $ sudo zfs define sharenfs = ”em” /tank /nfSshare

Antes, aludi a dar apenas certo IPS o acesso. Você pode fazer isso como seguinte:

Servidor $ sudo zfs define sharenfs = "rw [email protected]/24 "Tank/NfSshare

O 'RW' significa Permissões de leitura e gravação, e isso é seguido pela faixa de IPS. Certifique -se de que a porta número 111 e 2049 esteja aberta no seu firewall. Se você estiver usando o UFW, pode verificar isso em execução:

Servidor $ UFW Status

Anote o IP do seu servidor na LAN, usando o comando ifconfig ou ip addr. Vamos chamá -lo de servidor.IP

Montagem do lado do cliente

Depois que o compartilhamento for criado, você pode montá -lo em sua máquina cliente, executando o comando:

Cliente $ Mount -t NFS Server.ip:/tank/nfssshare/mnt

Isso montará a pasta NFS compartilhará na /MNT, mas você pode ter facilmente escolhido qualquer outro ponto de montagem de sua escolha.

Conclusão

O compartilhamento de arquivos é provavelmente o aspecto mais importante da administração do sistema. Está melhora sua compreensão da pilha de armazenamento, rede, permissões de usuário e privilégios. Você rapidamente perceberá a importância do princípio do menor privilégio - ou seja, apenas dê a um usuário o melhor acesso possível que ele precisa para o seu trabalho.

Você também aprenderá sobre a interoperabilidade entre diferentes sistemas operacionais. Os usuários do Windows podem acessar arquivos NFS, assim como os usuários de Mac e BSD. Você não pode se restringir a um sistema operacional ao lidar com uma rede de máquinas, todas com suas próprias convenções e vernáculos. Então vá em frente e experimente seu compartilhamento de NFS. Espero que você tenha aprendido algo.