Як правильно експортувати та імпортувати акції 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.