Eu me deparei com esse problema enquanto seguia o guia Diskless Arch , e isso realmente me atrasou. Vou compartilhar minhas descobertas aqui, pois estou curioso para saber se isso funcionará para mais alguém.
De acordo com o guia Diskless, eu tenho o sistema de arquivos raiz do cliente sem disco (os dados reais que preciso exportar) em uma imagem de loopback, que foi montada em /srv/des1
:
/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)
Criei um ponto de montagem /nfs/des1
, execute o mount e confirmo que posso ver tudo:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
Referindo-me ao guia NFS do Arch , coloco o seguinte no /etc/exports
servidor:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
Em seguida, executei um exportfs -rav
no servidor para aplicar essas alterações.
No entanto, montei o compartilhamento no cliente de teste com: mount server:/des1 /mnt/tmp
apenas para encontrar um diretório vazio, quando esperava que o sistema de arquivos raiz sem disco estivesse lá.
Nesta fase, tentei quase tudo até que algo me levasse a essa opção na exports
página do manual:
crossmnt
This option is similar to nohide but it makes it possible for clients
to move from the filesystem marked with crossmnt to exported filesystems
mounted on it. Thus when a child filesystem "B" is mounted on a parent "A",
setting crossmnt on "A" has the same effect as setting "nohide" on B.
Então, tendo tentado tudo o resto, troquei isso para /etc/exports
ficar assim:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
Depois de ler a entrada da página de manual, você pensaria que isso teria o mesmo efeito que o código anterior, mas quando eu corri exportfs -rav
novamente para registrar as alterações, tentei remontar do cliente e funcionou!
/srv/foo --> /bar/foo
?