Як правильно експортувати та імпортувати акції NFS, які також мають підкаталоги як точки монтажу?


21

AКаталог експорту сервера /srvчерез NFS з опцією nohide. Підкаталог всередині /srv, /srv/foo- це точка монтування для іншого місця на сервері NFS з використанням --bindпараметра, наприклад

server# mount --bind /bar/foo/ /srv/foo/

Клієнт Bімпортує A:/srvта /mnt/srvвикористовує його за допомогою NFS. Зміст /mnt/srv- це зміст A:/srv.

Проблема в тому, що /mnt/srv/fooвона порожня, тоді як я очікую побачити вміст A:/bar/foo/там.

Як правильно експортувати та імпортувати акції NFS, які також мають підкаталоги як точки монтажу?


Можливо, простіше просто використовувати символьне посилання на A від /srv/foo --> /bar/foo?
ckhan

1
Я спробував це. Це намагатиметься потрапити /bar/fooна клієнтську машину B, а не на сервер A.
mbaitoff

Відповіді:



10

Я натрапив на цю проблему, дотримуючись керівництва Diskless Arch , і це дійсно сповільнило мене. Я збираюся поділитися своїми висновками тут, оскільки мені цікаво, чи вдасться це комусь іншому.

Відповідно до керівництва Diskless, я маю кореневу файлову систему клієнта без диску (фактичні дані, які мені потрібно експортувати) у зображенні з циклічним зворотним зв'язком, яке було встановлено на /srv/des1:

/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)

Потім я створив точку /nfs/des1монтажу, потім запустіть кріплення і підтверджую, що я все бачу:

# mkdir -p /nfs/des1 
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin  boot  dev  usr  #[SNIP]

Посилаючись на посібник з Arch NFS , я поміщаю /etc/exportsна сервер таке:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)

Потім я запустив exportfs -ravна сервері застосувати ці зміни.

Однак я змонтував частку на тестовому клієнті за допомогою: mount server:/des1 /mnt/tmpлише щоб знайти це порожній каталог, коли я очікував, що там буде розміщена файлова система без диску (root).

На цьому етапі я намагався майже все, поки щось не призвело мене до цього варіанту на 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. 

Тож спробувавши все інше, я поміняв це навколо, щоб моє /etc/exportsвиглядало так:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)

Прочитавши запис чоловічої сторінки, ви подумаєте, що це матиме такий же ефект, як і попередній код, але коли я exportfs -ravзнову побіг зареєструвати зміни, то спробував перерахувати клієнт, і це спрацювало!


8

Схоже, кожну підпункт кріплення необхідно експортувати сервером NFS, щоб бути видимим для клієнтів. У ситуації над /etc/exportsфайлом має виглядати наступне:

/srv        *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo    *(rw,nohide,no_subtree_check)

Тоді імпорт /srvна клієнта з опцією -t nfsзробить і те, /srvі /srv/fooналежним чином доступним.

редагувати ОП

ця лінія

    /srv/foo    *(rw,fsid=0,nohide,no_subtree_check)

працював у моєму випадку замість

    /srv/foo    *(rw,nohide,no_subtree_check) 

1
crossmnt на корені?
meffect

2

Я теж хотів це зробити, але, схоже, є проблеми з цією ідеєю, оскільки клієнти NFS очікують, що кількість файлів inode буде унікальною в уявленні клієнта про єдине кріплення.

Проблеми детально описані в цій публікації блогу (не мені): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Я вирішив монтувати файлові системи окремо і символізувати їх разом, що має працювати для всіх клієнтів NFS.


1
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
slm

0

ПРИМІТКА. Увімкнено лише одного користувача

Додано це набір змін на стороні сервера та клієнта. На стороні сервера /etc/exportsта /etc/fstabна стороні клієнта.

Сторона сервера

  • Linux Mint 18.3 32-розрядний Сильвія
  • Ядро Linux 4.4.0-138-generic i686
  • Asus eeepc

    $ cat /etc/exports 
    #insert shares (one for each mounted partition sub-folder):      
    /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
    /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check)
    /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check)   
    
    $ cat /etc/fstab  
    #shared media files on /media/ed/
    /media/ed/ /nfsshare/ nfs bind 0 0
    /media/ed/media/ /nfsshare/media/ nfs bind 0 0
    /media/ed//extra /nfsshare/extra/ nfs bind 0 0
    

Сторона клієнта

  • Linux Mint 19 Tara 64-розрядний
  • Ядро Linux 4.15.0-38-generic x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    

1
Що це? Це один файл? Багато файлів? Будь ласка, використовуйте інструменти форматування, щоб відформатувати свою відповідь для ясності. Чи можете ви відредагувати та пояснити, як ваша відповідь відповідає на питання?
тердон

(1) Використовуйте свої слова. (2) Що означає ця пропозиція, яка ще не була представлена?
G-Man каже: "Відновіть Моніку"

вибачте за це.
Ед Іглехарт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.