Como reorganizar uma árvore de arquivos e depois exportá-la pelo NFS?

3

Eu tenho um servidor de backup que armazena backups incrementais em uma árvore como esta:

/backups       
   hourly.0
      server 1
      server 2
   hourly.1
      server 1
      server 2
   hourly.2
      server 1
      server 2
   daily.0
      server 1
      server 2
   etc...

Sem alterar a árvore de origem com os backups reais, gostaria de criar uma árvore reorganizada com esta aparência:

/share
   server1/1 Hour Ago -> /backups/hourly.0/server1
   server1/2 Hours Ago -> /backups/hourly.1/server1
   server2/1 Hour Ago -> /backups/hourly.0/server2
   server2/2 Hours Ago -> /backups/hourly.1/server2
   ...

... e depois exportar esta árvore como uma montagem NFS única .

O cliente NFS deve ver:

/backups       
   server 1
      1 Hour Ago
      2 Hours Ago
   server 2
      1 Hour Ago
      2 Hours Ago

Tentativa falhada # 1 - usar links simbólicos

Isso não funciona, porque os links simbólicos são relevantes para a máquina cliente do NFS e não para o servidor. Tentar abrir "1 Hour Ago" em um cliente tenta acessar /backups/hourly.0/server1 no cliente que não existe.

Falha na tentativa # 2 - usar o BIND em / etc / fstab

ou seja:

/backup/hourly.0/server1/ "/share/server1/1 Hour Ago" none ro,bind,defaults 0 0

Isso me permite criar a árvore que eu queria, que estava visível nos clientes NFS, mas não consegui ver nada dentro das pastas. Isso é presumivelmente porque o NFS não abrange sistemas de arquivos e o NFS vê um ponto de montagem de ligação como um novo sistema de arquivos.

Existe alguma maneira de conseguir isso?

    
por Nick 29.05.2012 / 21:17

1 resposta

3

Não, isso não é possível com uma única exportação NFS no servidor nfs baseado em kernel.

Como exports(5) manual diz:

The file /etc/exports contains a table of local physical file systems on an NFS server that are accessible to NFS clients.

No entanto, você pode exportar partes da árvore e remontá-las nos clientes com bind.

Links simbólicos

Outro paliativo é usar links simbólicos:

/server_1
  hourly.0 -> /backups/hourly.0/server\ 1
  hourly.1 -> /backups/hourly.1/server\ 1
  ...
/server_2
  hourly.0 -> /backups/hourly.0/server\ 2
  hourly.1 -> /backups/hourly.1/server\ 2
  ...

Para isso funcionar, você teria que exportar toda a árvore de backups, bem como os diretórios do servidor. Isso significa que, com links simbólicos, cada servidor verá os backups dos outros servidores.

opção nohide

Existem nohide e crossmount opções no arquivo exports . Só funciona para exportações de servidor único. Eu nunca usei isso por causa dos muitos avisos que acompanham esta opção nos documentos, como a possibilidade de conflito de número de inode .

Como você está exportando árvores de diretórios do mesmo sistema de arquivos físico, nunca encontrará este conflito de inode number ou o deadlock causado por um servidor intermediário morto que pode ocorrer ao exportar a subárvore montada pelo NFS.

Eu não acho que o servidor NFS do kernel Linux deixaria os sistemas de arquivos montados com a opção bind visível no nohide.

Fazendo o contrário

Eu estava pensando sobre a questão e percebi que provavelmente o caminho certo para abordar isso é fazê-lo ao contrário. Isso é fazer com que as árvores de diretórios de cada servidor sejam exportadas. Mova os dados para os locais apropriados e remonte a árvore / backups com mount -o bind .

Esse é o seu sistema de arquivos que se parece com

/share/server1/1_Hour_Ago
               2_Hour_Ago
               ...
/share/server2/1_Hour_Ago
               2_Hour_Ago
               ...

Seu fstab seria

/share/server1/1_Hour_Ago /backups/hourly.0/server_1 none rw,bind 0 0 
/share/server1/2_Hour_Ago /backups/hourly.1/server_1 none rw,bind 0 0
...
/share/server2/1_Hour_Ago /backups/hourly.0/server_2 none rw,bind 0 0 
/share/server2/2_Hour_Ago /backups/hourly.1/server_2 none rw,bind 0 0
...

Seu exports seria apenas

/share/server1 server1(rw,no_subtree_check) 
/share/server2 server2(rw,no_subtree_check)
    
por 29.05.2012 / 21:20