Eu encontrei este 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 qualquer outra pessoa.
De acordo com o guia Diskless, eu tenho o sistema de arquivos raiz do cliente sem disco (os dados reais que eu 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)
Em seguida, criei um ponto de montagem /nfs/des1
, em seguida, executei a montagem e confirme que consigo 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 Arch NFS , coloco o seguinte em /etc/exports
no 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 descobrir que é um diretório vazio, quando esperava que o sistema de arquivos raiz-sem disco estivesse presente.
Nesta fase, experimentei quase tudo até que algo me levasse a essa opção na página exports
man:
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, depois de ter tentado todo o resto, eu troquei isso, então meu /etc/exports
ficou assim:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
Após ler a entrada da página de manual, você poderia pensar que isso teria o mesmo efeito que o código anterior, mas quando eu executei exportfs -rav
novamente para registrar as alterações, tentei remontar do cliente e funcionou!