Network File System (NFS) – мережна файлова система. Мережева файлова служба

#image.jpgНепоганого часу, читачі та гості мого блогу. Дуже велика перерва між постами була, але я знову в бою). У сьогоднішній статті розгляну роботу протоколу NFS, а також налаштування сервера NFS та клієнта NFS на Linux.

Вступ до NFS

NFS (Network File System- мережна файлова система) на мою думку - ідеальне рішення в локальній мережі, де потрібен швидкий (швидший у порівнянні з SAMBA і менш ресурсомісткий в порівнянні з віддаленими файловими системами з шифруванням - sshfs, SFTP, etc ...) обмін даними на чолі кута не стоїть безпека переданої інформації. Протокол NFSдозволяє монтувати видалені файлові системи через мережу в локальне дерево каталогів, як це була примонтована дискова файлова система.

Тим самим локальні програми можуть працювати з віддаленою файловою системою, як з локальною. Але потрібно бути обережним (!) з налаштуванням NFS, бо за певної конфігурації можна підвісити операційну систему клієнта в очікуванні нескінченного вводу/вывода.

Протокол NFSзаснований на роботі протоколу RPC, який поки що не піддається моєму розумінню)) тому матеріал у статті буде трохи розпливчастий... Перш ніж Ви зможете використовувати NFS, чи це сервер або клієнт, Ви повинні переконатися, що Ваше ядро ​​має підтримку файлової системи NFS. Перевірити чи підтримує ядро ​​файлову систему NFS можна, переглянувши наявність відповідних рядків у файлі /proc/filesystems:

ARCHIV ~ # grep nfs /proc/filesystems nodev nfs nodev nfs4 nodev nfsd

Якщо зазначених рядків у файлі /proc/filesystems не виявиться, необхідно встановити наведені нижче пакети. Це швидше за все дозволить встановити залежні модулі ядра підтримки підходящих файлових систем.

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

Історія Network File System

Протокол NFSрозроблений компанією Sun Microsystems і має у своїй історії Чотири версії. NFSv1 була розроблена в Одна тисяча дев'ятсот вісімдесят дев'ять і була експериментальною, працювала на протоколі UDP. Версія Один описана RFC 1094.

NFSv2 була випущена в тому ж Одна тисяча дев'ятсот вісімдесят дев'ять р., описувалася тим же RFC1094 і так само базувалася на протоколі UDP, при цьому дозволяла читати менше 2Гб з файлу. NFSv3 дороблена в Одна тисяча дев'ятсот дев'яносто 5 р. і описана RFC 1813.

Основними нововведеннями третьої версії стало підтримка файлів великого розміру, додана підтримка протоколу TCP і TCP-пакетів величезного розміру, що прискорило працездатність технології. NFSv4 дороблена в Дві тисячі років і описана в RFC 3010, в Дві тисячі три роки переглянута і описана в RFC 3530.

Четверта версія включила поліпшення продуктивності, підтримку різних засобів автентифікації (зокрема, Kerberos і LIPKEY з допомогою протоколу RPCSEC GSS) і списків контролю доступу (як POSIX, і Windows-типів). NFS версії v4.1 була схвалена IESG у Дві тисячі 10 р., та отримала номер RFC 5661.

Принципним нововведенням версії 4.1 є специфікація pNFS - Parallel NFS, механізму паралельного доступу NFS-клієнта до даних безлічі розподілених NFS-серверів. Наявність такого механізму у зразку мережної файлової системи допоможе будувати розподілені «хмарні» (cloud) сховища та інформаційні системи.

NFS сервер

Бо в нас NFS- це мережевафайлова система, то необхідно налаштувати мережау Linux. (Так само можна почитати статтю основні поняття мереж). Далі необхідно встановити відповідний пакет. У Debian це пакет nfs-kernel-server і nfs-common, у RedHat це пакет nfs-utils.

Також необхідно дозволити запуск демона на відповідних рівнях виконання (команда в RedHat - /sbin/chkconfig nfs on, в Debian - /usr/sbin/update-rc.d nfs-kernel-server defaults).

Установлені пакети в Debian запускаються в наступному порядку:

ARCHIV ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx Один root root 20 Жов Вісімнадцять 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx Один root root 20 сім Жов 20 два 01:23> S1. .d/nfs-kernel-server

Іншими словами, спочатку запускається nfs-common, пізніше сам сервер nfs-kernel-server.

У RedHat ситуація схожа, за тим лише винятком, що перший скрипт називається nfslock, а сервер називається просто nfs. Про nfs-commonнам сайт debian дослівно говорить таке: спільні файли для клієнта та сервера NFS, цей пакет потрібно встановлювати на машину, яка буде працювати як клієнт або сервер NFS.

У пакет включені програми: lockd, statd, showmount, nfsstat, gssd та idmapd. Переглянувши вміст скрипту запуску /etc/init.d/nfs-common, можна відстежити наступну послідовність роботи: скрипт перевіряє наявність виконуваного бінарного файлу /sbin/rpc.statd, перевіряє наявність у файлах /etc/default/nfs-common, /etc/fstab і /etc/exports характеристик, що вимагають запуск бісів idmapdі gssd, запускає демона /sbin/rpc.statd, далі перед запуском /usr/sbin/rpc.idmapd та /usr/sbin/rpc.gssd перевіряє наявність цих бінарних файлів, що виконуються, далі для біса /usr/sbin/rpc.idmapd перевіряє наявність модулів ядра sunrpc, nfs і nfsd, так само підтримку файлової системи rpc_pipefs в ядрі (тобто наявність її у файлі /proc/filesystems), якщо все успішно, то запускає /usr/sbin/rpc.idmapd. Додатково для біса /usr/sbin/rpc.gssdперевіряє модуль ядра rpcsec_gss_krb5 і запускає біс.

Якщо переглянути вміст скрипта запуску NFS-серверана Debian (/etc/init.d/nfs-kernel-server), можна простежити таку послідовність: при старті, скрипт перевіряє існування файлу /etc/exports, наявність модуля ядра nfsd, наявність підтримки файлової системи NFS в ядрі Linux (іншими словами у файлі /proc/filesystems), якщо все на місці, то запускається біс /usr/sbin/rpc.nfsd, далі перевіряє заданий параметр NEED_SVCGSSD (задається у файлі опцій сервера /etc/default/nfs-kernel-server) і, якщо заданий - запускає біса /usr/sbin/rpc.svcgssd, останнім запускає біса /usr/sbin/rpc.mountd. З цього скрипта видно, що робота сервера NFS складається збісів rpc.nfsd, rpc.mountd і якщо використовується Kerberos-автентифікація, то і біс rcp.svcgssd. У червоному капелюсі ще запускається демон rpc.rquotad і nfslogd (У Debian я чомусь не знайшов інформації про цього демона і про причини його відсутності, мабуть видалений ...).

З цього стає зрозуміло, що сервер Network File System складається з наступних процесів (читай - бісів), розташованих у каталогах /sbin та /usr/sbin:

  • rpc.statd- Біс спостереження за мережевим станом (він Network Status Monitor, він же NSM). Він дозволяє коректно скасовувати блокування після збою/перезавантаження. Для повідомлення про порушення використовує програму /usr/sbin/sm-notify. Бес statd працює як на серверах, так і на клієнтах. Раніше цей сервер був потрібен для роботи rpc.lockd, але за блокування зараз відповідає ядро ​​(якщо я не помиляюся #image.jpg). (RPC програма 100 тисяч 20 один і 100 тисяч 20 чотири - у нових версіях)
  • rpc.lockd- Бес блокування lockd (він же NFS lock manager (NLM)) обробляє запити на блокування файлів. Біс блокування працює як на серверах, так і на клієнтах. Клієнти запитують блокування файлів, а сервери його дозволяють. (застарілий і в нових дистрибутивах не вживається як біс. Його функції в сучасних дистрибутивах (з ядром старше 2.2.18) виконуються ядром, точніше модулем ядра (lockd).) (RPC програма 100024)
  • rpc.nfsd- Основний біс сервера NFS - nfsd (у нових версіях часом називається nfsd4). Цей біс обслуговує запити клієнтів NFS. Параметр RPCNFSDCOUNT у файлі /etc/default/nfs-kernel-server у Debian і NFSDCOUNT у файлі /etc/sysconfig/nfs у RedHat визначає кількість бісів, що запускаються (за замовчуванням - 8).(RPC програма 100003)
  • rpc.mountd- Бес монтування NFS mountd обробляє запити клієнтів на монтування каталогів. Біс mountd працює на серверах NFS. (RPC програма 100005)
  • rpc.idmapd- Біс idmapd для NFSv4 на сервері перетворює локальні uid/gid користувачів у формат виду ім'я@домен, а сервіс на клієнті перетворює імена користувачів/груп виду ім'я@домен на локальні ідентифікатори користувача та групи (згідно з конфігураційним файлом /etc/idmapdconf, детальніше man idmapd.conf):.
  • додатково, у старих версіях NFS використовувалися біси: nfslogd- біс журналів NFS фіксує активність для експортованих файлових систем, працює на серверах NFS та rquotad- сервер віддалених квот надає інформацію про квоти користувачів у віддалених файлових системах, може працювати як на серверах, так і на клієнтах. (RPC програма 100011)

У NFSv4 при використанні Kerberos додатково запускаються біси:

  • rpc.gssd- Біс NFSv4 забезпечує методи аутентифікації через GSS-API (Kerberos-аутентифікація). Працює на клієнті та сервері.
  • rpc.svcgssd- Біс сервера NFSv4, який забезпечує автентифікацію клієнта на стороні сервера.

portmap та протокол RPC (Sun RPC)

Крім зазначених вище пакетів, для коректної роботи NFSv2 і v3 потрібно додатковий пакет portmap(у новіших дистрибутивах замінений на перейменований на rpcbind). Цей пакет зазвичай встановлюється автоматично з NFS як залежний і реалізує роботу сервера RPС, тобто відповідає за динамічне призначення портів для деяких служб, зареєстрованих в сервері RPC.

Дослівно, згідно з документацією - це сервер, який перетворює номери програм RPC (Remote Procedure Call) на номери портів TCP/UDP. portmap оперує кількома сутностями: RPC-дзвінками або запитами, TCP/UDP портами, версією протоколу (tcp або udp), номерами програм та версіями програм. Біс portmap запускається скриптом /etc/init.d/portmap до старту NFS-сервісів.

Коротко кажучи, робота сервера RPC (Remote Procedure Call) полягає в обробці RPC-дзвінків (т.зв. RPC-процедур) від локальних та віддалених процесів.

Використовуючи RPC-дзвінки, сервіси реєструють або прибирають себе в/з перетворювача портів (він же відображає порти, він же portmap, він же portmapper, він же, в нових версіях, rpcbind), а клієнти за допомогою RPC-дзвінків надсилаючи запити до portmapper отримують потрібну інформацію. Користувач-френдлі найменування сервісів програм та відповідні їм номери визначені у файлі /etc/rpc.

Як будь-який сервіс відправив відповідний запит і зареєстрував себе на сервері RPC в відображачі портів, RPC-сервер присвоює зіставляє сервісу TCP і UDP порти на яких запустився сервіс і зберігає в собі ядру відповідну інформацію про сервіс, що працює (про ім'я), унікальний номер (Відповідно до /etc/rpc) , про протокол і порт у якому працює сервіс і версії сервісу і надає зазначену інформацію клієнтам на запит. Сам перетворювач портів має номер програми (100 000), номер версії - 2, TCP порт 100 одинадцять і UDP порт 111.

Вище, за вказівкою складу бісів сервера NFS я вказав головні RPC номери програм. Я, напевно, трохи заплутав Вас даним абзацом, тому вимовлю основну фразу, яка повинна внести ясність: основна функція відображача портів полягає в тому, щоб на запит клієнта, який надав номер RPC-програми (або RPC-номер програми) і версію, повернути йому (клієнту) порт, у якому працює запитана програма . Відповідно, якщо клієнту потрібно звернутися до RPC з певним номером програми, він спочатку повинен увійти в контакт з процесом portmap на серверній машині і знайти номер порту зв'язку з необхідним обслуговуванням RPC.

Роботу RPC-сервера можна представити такими кроками:

Для отримання інформації від RPC-сервера використовується утиліта rpcinfo. При вказівці характеристик -p host програма виводить список всіх зареєстрованих RPC програм на хості host. Без вказівки хоста програма виведе послуги на localhost. Приклад:

ARCHIV ~ # rpcinfo -p прог-ма верс прото порт 100 тисяч Два tcp 100 одинадцять portmapper 100 тисяч Два udp 100 одинадцять portmapper 100 тисяч 20 чотири Один udp 50 дев'ять тисяч чотириста 50 один statt20 status 100 тисяч 20 один Один udp 40 чотири тисячі триста 10 nlockmgr 10 nlockmgr1 nlockmgr 10 nlockmgr 100 тисяч 20 один Три tcp 40 чотири тисячі вісімсот 50 один nlockmgr 100 тисяч 20 один Чотири tcp 40 чотири тисячі вісімсот 50 один nlockmgr 100 тисяч три Два tcп Дві тисячі 40 дев'ять nfs 10 тисяч три Чотири tcp Дві тисячі 40 дев'ять nfs 100 тисяч три Два udp Дві тисячі 40 дев'ять nfs 100 тисяч три Три udp Дві тисячі 40 дев'ять nfs 100 тисяч три Чотири udp Дві тисячі 40 дев'ять n0 10 00 00 5 Один tcp 40 одна тисяча чотириста 5 mountd 100 тисяч 5 Два udp 50 одна тисяча триста 6 mountd 100 тисяч 5 Два tcp 40 одна тисяча чотириста 5 mountd 100 тисяч 5 Три udp 50 одна тисяча триста 6 mount 5 mountd

Як видно, rpcinfo вказує (у стовпчиках зліва направо) номер зареєстрованої програми, версію, протокол, порт та назву.

За допомогою rpcinfo можна видалити реєстрацію програми або отримати інформацію про окремий сервіс RPC (більше опцій у man rpcinfo). Як видно, зареєстровані біси portmapper версії Два на udp і tcp портах, rpc.statd версії Один на udp і tcp портах, NFS lock manager версій 1,3,4, бес nfs сервера версії 2,3,4, а також без монтування версій 1,2,3.

NFS сервер (точніше демон rpc.nfsd) отримує запити від клієнта у вигляді UDP датаграм на порт 2049. Незважаючи на те, що NFS працює з перетворювачем портів, що дозволяє серверу використовувати порти, що динамічно призначаються, UDP порт Дві тисячі 40 дев'ять жорстко закріплений за NFS у більшості реалізацій.

Робота протоколу Network File System

Монтування віддаленої NFS

Процес монтування віддаленої файлової системи NFS можна представити такою схемою:

Опис протоколу NFS при монтуванні віддаленого каталогу:

  1. На сервері та клієнті запускається сервер RPC (зазвичай при завантаженні), обслуговуванням якого займається процес portmapper і реєструється на порту tcp/111 і udp/111.
  2. Запускаються сервіси (rpc.nfsd, rpc.statd та ін.), які реєструються на сервері RPC і реєструються на випадкових мережевих портах (якщо в налаштуваннях сервісу не заданий статичний порт).
  3. команда mount на комп'ютері клієнта відправляє ядру запит на монтування мережевого каталогу із зазначенням типу файлової системи, хоста та практично - каталогу, ядро ​​відправляє формує RPC-запит процесу portmap на NFS сервері на порт udp/111 (якщо на клієнті не задана функція працювати через tcp )
  4. Ядро сервера NFS опитує RPC про наявність демона rpc.mountd і повертає ядру клієнта мережевий порт, на якому працює демон.
  5. mount відправляє запит RPC на порт, на якому працює rpc.mountd. На даний момент NFS сервер може перевірити достовірність клієнта, ґрунтуючись на його IP адресі та номері порту, щоб переконатися, чи можна цьому клієнту змонтувати зазначену файлову систему.
  6. Демон монтування повертає опис запитаної файлової системи.
  7. Команда mount клієнта видає системний виклик mount, щоб зв'язати описувач файлу, придбаний у кроці 5 з локальною точкою монтування на хості клієнта. Описувач файлу зберігається в коді NFS клієнта, і з цього моменту будь-яке звернення процесів до файлів на файлової системі сервера використовуватиме описувач файлу як стартову точку.

Обмін даними між клієнтом та сервером NFS

Звичайний доступ до віддаленої файлової системи можна описати такою схемою:

Опис процесу звернення до файлу на сервері NFS:

Налаштування сервера NFS

Налаштування серверазагалом полягає у завданні локальних каталогів, дозволених для монтування віддаленими системами у файлі /etc/exports. Ця дія називається експорт ієрархії каталогів. Основними джерелами інформації про експортовані каталоги служать такі файли:

  • /etc/exports- Основний конфігураційний файл, що містить у собі конфігурацію експортованих каталогів. Використовується при запуску NFS та утиліті exportfs.
  • /var/lib/nfs/xtab- Містить список каталогів, монтованих віддаленими клієнтами. Використовується демоном rpc.mountd, коли покупець намагається змонтувати ієрархію (створюється запис про монтування).
  • /var/lib/nfs/etab- Список каталогів, які можуть бути змонтовані віддаленими системами із зазначенням всіх характеристик експортованих каталогів.
  • /var/lib/nfs/rmtab- Список каталогів, які не розекспортовані в даний момент.
  • /proc/fs/nfsd- особлива файлова система (ядро 2.6) керувати NFS сервером.
    • exports- Список активних експортованих ієрархій і клієнтів, яким їх експортували, а також характеристики. Ядро отримує цю інформацію з /var/lib/nfs/xtab.
    • threads- Містить кількість потоків (також можна змінювати)
    • за допомогою filehandle можна отримати покажчик на файл
    • та ін...
  • /proc/net/rpc- Містить "сиру" (raw) статистику, яку можна отримати за допомогою nfsstat, також різні кеші.
  • /var/run/portmap_mapping- інформація про зареєстровані в RPC сервіси

Прим:взагалі, в інтернеті купа трактувань та формулювань призначення файлів xtab, etab, rmtab, кому вірити – не знаю #image.jpg Навіть на http://nfs.sourceforge.net/ трактування не однозначне.

Налаштування файлу /etc/exports

В ординарному випадку файл /etc/exports є єдиним файлом, що вимагає редагування функції NFS-сервера. Цей файл керує такими властивостями:

  • Які клієнтиможуть звертатися до файлів на сервері
  • До яких ієрархійкаталогів на сервері може звертатися кожен клієнт
  • Як імена користувача користувача будуть відображатисяна локальні імена користувачів

Будь-який рядок файлу exports має наступний формат:

точка_експорта клиент1(функции) [клиент2(функции) ...]

Де точка_експортуабсолютний шлях експортованої ієрархії каталогів, клієнт1 - nім'я одного або більше клієнтів або IP-адрес, розбиті пробілами, яким можна монтувати точку_експорту. Функціїописують правила монтування клієнта, позначеного перед опціями.

Ось звичайний приклад конфігурації файлу exports:

ARCHIV ~ # cat /etc/exports /archiv1 files(rw,sync) 10.0.0.1(ro,sync) 10.0.230.1/24(ro,sync)

У цьому прикладі комп'ютерам files і 10.0.0.1 дозволено доступ до точки експорту /archiv1, при цьому, хосту files на читання/запис, а для хоста 10.0.0.1 і підмережі 10.0.230.1/24 доступ тільки на читання.

Опис хостів у /etc/exports допускається у такому форматі:

  • Імена окремих вузлів описуються як files або files.DOMAIN.local.
  • Опис маски доменів робиться в наступному форматі: * DOMAIN.local включає всі вузли домену DOMAIN.local.
  • Підмережі задаються у вигляді пар адрес IP/маска. Наприклад: 10.0.0.0/255.255.255.0 містить усі вузли, адреси яких починаються з 10.0.0.
  • Завдання імені мережної групи @myclients, яка має доступ до ресурсу (при використанні сервера NIS)

Загальні функції експорту ієрархій каталогів

У файлі exports використовуються такі спільні функції(спочатку вказані функції, що застосовуються за замовчуванням у більшості систем, у дужках - не за замовчуванням):

  • auth_nlm (no_auth_nlm)або secure_locks (insecure_locks)- Вказує, що сервер повинен домагатися аутентифікації запитів на блокування (за допомогою протоколу NFS Lock Manager (диспетчер блокування NFS)).
  • nohide (hide)- Якщо сервер експортує дві ієрархії каталогів, при цьому одна вкладена (примонтована) в іншу. Клієнту необхідно очевидно змонтувати другу (дочірню) ієрархію, інакше точка монтування дочірньої ієрархії буде виглядати як порожній каталог. Функція nohide призводить до появи другої ієрархії каталогів без очевидного монтування. (прим: я цю опцію так і не зміг змусити працювати...)
  • ro (rw)- Дозволяє лише запити на читання (запис). (в кінцевому підсумку - можливо прочитати/записати чи ні визначається виходячи з прав файлової системи, у своїй сервер неспроможний відрізнити запит на читання файлу від запиту виконання, тому дозволяє читання, якщо в користувача є права на читання чи виконання.)
  • secure (insecure)- просить, щоб запити NFS надходили із захищених портів (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • subtree_check (no_subtree_check)- Якщо експортується підкаталог фалової системи, але не вся файлова система, сервер перевіряє, чи файл, який ви запитали, в експортованому підкаталозі. Вимкнення перевірки зменшує безпеку, але збільшує швидкість передачі даних.
  • sync (async)- Вказує, що сервер повинен відповідати на запити лише після запису диска конфігурацій, виконаних цими запитами. Функція async показує серверу не чекати запису інформації на диск, що збільшує продуктивність, але знижує надійність, т.к. у разі обриву з'єднання або відмови обладнання можлива втрата інформації.
  • wdelay (no_wdelay)- вказує серверу затримувати виконання запитів запис, якщо очікується наступний запит запис, записуючи дані більшими блоками. Це збільшує продуктивність під час відправлення великих черг команд на запис. no_wdelay вказує не відкладати виконання команди на запис, що може бути корисно, якщо сервер отримує необмежену кількість команд, не пов'язаних спільно.

Експорт символічних посилань та файлів пристроїв.При експорті ієрархії каталогів, що містять символічні посилання, необхідно, щоб об'єкт посилання був доступний клієнтській (віддаленій) системі, тобто повинно виконуватися одне з таких правил:

  • у клієнтській файловій системі має існувати об'єкт посилання
  • необхідно експортувати та змонтувати об'єкт посилання

Файл пристрою відноситься до інтерфейсу ядра Linux. Під час експорту файлу пристрою експортується цей інтерфейс. Якщо клієнтська система не має пристрою такого самого типу, то експортований пристрій не працюватиме.

У клієнтській системі, при монтуванні NFS об'єктів можна використовувати опцію nodev, щоб файли пристроїв в каталогах, що монтуються, не використовувалися.

Функції за промовчанням у різних системах можуть відрізнятися, їх можна переглянути у файлі /var/lib/nfs/etab. Після опису експортованого каталогу в /etc/exports і перезапуску сервера NFS всі функції, що відсутні (читай: функції за замовчуванням) будуть відображені у файлі /var/lib/nfs/etab.

Функції відображення (відповідності) ідентифікаторів користувачів

Для більшого розуміння сказаного нижче я б порадив ознайомитися зі статтею Управління користувачами Linux. Кожен користувач Linux має свої UID та головний GID, які описані у файлах /etc/passwd та /etc/group.

Сервер NFS вважає, що операційна система віддаленого вузла здійснила автентифікацію користувачів і призначила їм коректні ідентифікатори UID і GID. Експортування файлів дає користувачам системи клієнта такий самий доступ до цих файлів, якби вони реєструвалися безпосередньо на сервері. Відповідно, коли клієнт NFS посилає запит серверу, сервер використовує UID і GID для ідентифікації користувача у локальній системі, що може призводити до деяких проблем:


Наступні функції задають правила відображення віддалених користувачів локальних:

Приклад використання файлу карти користувачів:

ARCHIV ~ # cat /etc/file_maps_users # Мапінг користувачів # remote local comment uid 0-50 Одна тисяча два # зіставлення користувачів з віддаленим UID 0-50 до локального UID Одна тисяча два gid 0-50 Одна тисяча два # зіставлення користувачів с/s віддаленим GID 0-50 до локального GID 1002

Керування сервером NFS

Керування сервером NFS здійснюється за допомогою наступних утиліт:

  • nfsstat
  • showmsecure (insecure)ount
  • exportfs

nfsstat: статистика NFS та RPC

Утиліта nfsstat дозволяє переглянути статистику RPC і NFS серверів. Функції команди можна переглянути в man nfsstat.

showmount: виведення інформації про стан NFS

Утиліта showmountзапитує бес rpc.mountd на віддаленому хості про змонтовані файлові системи. За промовчанням видається відсортований список клієнтів. Ключі:

  • --all- Видається список клієнтів та точок монтування із зазначенням куди клієнт примонтував каталог. Ця інформація може бути ненадійною.
  • --directories- Видається список точок монтування
  • --exports- видається список файлових систем, що експортуються, виходячи з переконань nfsd

При запуску showmount без аргументів на консоль буде виведена інформація про системи, яким дозволено монтувати локальнізбірники. Наприклад, хост ARCHIV нам надає список експортованих каталогів з IP-адресами хостів, яким дозволено монтувати зазначені збірники:

FILES ~ # showmount --exports archiv Export list for archiv: /archiv-big 10.0.0.2 /archiv-small 10.0.0.2

Якщо вказати в аргументі ім'я хоста/IP, то буде виведена інформація про цей хост:

ARCHIV ~ # showmount files clnt_create: RPC: Program not registered # це повідомлення каже нам, що на хості FILES бес NFSd не запущено

exportfs: керування експортованими каталогами

Ця команда обслуговує експортовані збірники, дані у файлі /etc/exports, точніше написати не обслуговує, а синхронізує з файлом /var/lib/nfs/xtabта видаляє з xtab неіснуючі. exportfs робиться під час запуску демона nfsd з аргументом -r. Утиліта exportfs у режимі ядра 2.6 розмовляє з бісом rpc.mountd через файли каталогу /var/lib/nfs/ і не розмовляє з ядром безпосередньо. Без характеристик видає перелік поточних експортованих файлових систем.

Властивості exportfs:

  • [клієнт:ім'я-каталогу] - додати або видалити зазначену файлову систему для зазначеного клієнта)
  • -v - виводити більше інформації
  • -r - переекспортувати всі збірники (синхронізувати /etc/exports та /var/lib/nfs/xtab)
  • -u - видалити зі списку експортованих
  • -a - додати або видалити всі файлові системи
  • -o - функції через кому (аналогічний опціям застосовуваним в / etc / exports; т.ч. можна змінювати функції вже змонтованих файлових систем)
  • -i - не використовувати /etc/exports при додаванні тільки властивості поточного командного рядка
  • -f - скинути список експортованих систем у ядрі 2.6;

Клієнт NFS

Перш ніж звернутися до файлу на віддаленій файловій системі клієнт (клієнта) повинен змонтувати їїта отримати від сервера покажчик на неї. Монтування NFSможе проводитися за допомогою команди mountабо за допомогою одного з автоматичних монтувальників, що розплодилися (amd, autofs, automount, supermount, superpupermount). Процес монтування добре продемонстрована вище на ілюстрації.

на клієнтів NFSніяких бісів запускати не потрібно, функції клієнтаробить модуль ядра kernel/fs/nfs/nfs.ko, який використовується при монтуванні віддаленої файлової системи. Експортовані збірники з сервера можуть встановлюватися на клієнта такими способами:

  • вручну, за допомогою команди mount
  • автоматично при завантаженні, при монтуванні файлових систем, змальованих в /etc/fstab
  • автоматом за допомогою біса autofs

Третій метод з autofs в цій статті я розглядати не буду, через його велику інформацію. Можливо, у наступних статтях буде окремий опис.

Монтування файлової системи Network Files System командою mount

Приклад використання команди mount представлений у пості Команди управління блоковими пристроями. Тут я розгляну приклад команди mount для монтування файлової системи NFS:

FILES ~ # mount -t nfs archiv:/archiv-small /archivs/archiv-small FILES ~ # mount -t nfs -o ro archiv:/archiv-big /archivs/archiv-big FILES ~ # mount ..... .. archiv:/archiv-small on /archivs/archiv-small type nfs (rw,addr=10.0.0.6) archiv:/archiv-big on /archivs/archiv-big type nfs (ro,addr=10.0.0.6)

Перша команда монтує експортований каталог /archiv-small на сервері archiv в локальну точку монтування /archivs/archiv-small з налаштуваннями за замовчуванням (тобто для читання та запису).

Хоча команда mountв останніх дистрибутивах вміє обмірковувати який тип файлової системи використовується і без вказівки типу, все ж таки вказувати параметр -t nfs краще. Друга команда монтує експортований каталог /archiv-big на сервері archiv у локальний каталог /archivs/archiv-big з опцією лише для читання (ro). Команда mountбез характеристик наочно показує нам результат монтування. Крім функції лише читання (ro), можливо поставити інші основні функції при монтуванні NFS:

  • nosuid- Ця функція забороняє виконувати setuid програми зі змонтованого каталогу.
  • nodev(no device - не пристрій) - Ця функція забороняє використовувати як пристрої символьні та блокові особливі файли.
  • lock (nolock)- Дозволяє блокувати NFS (за замовчуванням). nolock вимикає блокування NFS (не запускає демон lockd) і комфортабельна при роботі зі старими серверами, що не підтримують блокування NFS.
  • mounthost=ім'я- Ім'я хоста, на якому запущено демон монтування NFS - mountd.
  • mountport=n -Порт, використовуваний біс mountd.
  • port=n- порт, який використовується для підключення до NFS сервера (за замовчуванням 2049, якщо бес rpc.nfsd не зареєстровано на RPC-сервері). Якщо n=0 (за умовчанням), то NFS посилає запит до portmap на сервері, щоб знайти порт.
  • rsize=n(read block size – розмір блоку читання) – Кількість байтів, що читаються за один раз з NFS-сервера. Стандартно – 4096.
  • wsize=n(write block size – розмір блоку запису) – Кількість байтів, що записуються за один раз на NFS-сервер. Стандартно – 4096.
  • tcpабо udp- Для встановлення NFS використовувати протокол TCP або UDP відповідно.
  • bg- При втраті доступу до сервера повторювати проби у фоновому режимі, щоб не перекрити процес завантаження системи.
  • fg- При втраті доступу до сервера, повторювати проби у пріоритетному режимі. Цей параметр може заблокувати процес завантаження системи повторення спроб монтування. Тому параметр fg використовується в основному при налагодженні.

Функції кешування атрибутів при монтуванні NFS

Атрибути файлів, що зберігаються в inod (індексних дескрипторах), такі як час модифікації, розмір, жорсткі посилання, власник, зазвичай змінюються рідко для звичайних файлів і ще рідше - для каталогів. Багато програм, наприклад ls, звертаються до файлів тільки для читання і не змінюють атрибути файлів або вмісту, але витрачають ресурси системи на дорогі мережеві операції.

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

  • ac (noac)(attrebute cache - кешування атрибутів) - Дозволяє кешування атрибутів (за замовчуванням). Хоча функція noac уповільнює роботу сервера, вона дозволяє уникнути старіння атрибутів, коли кілька клієнтів активно записують інформацію у спільну ієрархію.
  • acdirmax=n(attribute cache directory file maximum - кешування атрибуту максимум для файлу каталогу) - Найбільше секунд, що NFS очікує до оновлення атрибутів каталогу (за замовчуванням Шістдесят сек.)
  • acdirmin=n(attribute cache directory file minimum - кешування атрибуту мінімум для файлу каталогу) - Маленька кількість секунд, що NFS очікує до оновлення атрибутів каталогу (за замовчуванням 30 сек.)
  • acregmax=n(attribute cache regular file maximum - кешування атрибуту максимум для звичайного файла) - Максимальна кількість секунд, що NFS очікує до оновлення атрибутів звичайного файлу (за замовчуванням Шістдесят сек.)
  • acregmin=n(attribute cache regular file minimum- кешування атрибуту мінімум для звичайного файла) - Невелика кількість секунд, яке NFS очікує до оновлення атрибутів звичайного файлу (за замовчуванням Три сек.)
  • actimeo=n(attribute cache timeout - тайм кешування атрибутів) - Замінює значення для всіх вишуканих опцій. Якщо actimeo не заданий, вищезазначені значення набувають значення за замовчуванням.

Функції обробки помилок NFS

Наступні функції керують діями NFS за відсутності відповіді від сервера або у разі виникнення помилок вводу/виводу:

  • fg (bg)(foreground - передній план, background - задній план) - Створювати проби монтування NFS, що відмовила, на передньому плані/у фоні.
  • hard (soft)- виводить на консоль повідомлення "server not responding" при досягненні таймауту та продовжує проби монтування. При цій функції soft- при таймауті повідомляє програмі про помилку введення/виводу, що викликала операцію. (опцію soft радять не використовувати)
  • nointr (intr)(no interrupt - не переривати) - Не дозволяє сигналам переривати файлові операції в жорстко змонтованій ієрархії каталогів при досягненні великого таймууту. intr- дозволяє переривання.
  • retrans=n(retransmission value - значення повторної передачі) - Після n малих таймаутів NFS генерує великий таймаут (за замовчуванням 3). Великий тайм-аут припиняє виконання операцій або виводить на консоль повідомлення "server not responding", залежно від вказівки функції hard/soft.
  • retry=n(retry value - значення повторної проби) - Кількість хвилин повторень служби NFS операцій монтування, перш ніж здатися (за замовчуванням 10000).
  • timeo=n(timeout value - значення таймауту) - Кількість 10-х дещиць секунди очікування службою NFS до повторної передачі у разі RPC або малого таймауту (за замовчуванням 7). Це значення зростає при кожному таймуті до більшого значення Шістдесят секунд або до наступу великого таймууту. У разі зайнятої мережі, повільного сервера або при проходженні запиту через кілька маршрутизаторів або шлюзів, збільшення цього значення може підвищити продуктивність.

Автоматичне монтування NFS при завантаженні (опис файлових систем /etc/fstab)

Опис файлу /etc/fstab я торкався відповідної статті. У цьому прикладі я розгляну кілька прикладів монтування файлових систем NFS з описом опцій:

FILES ~ # cat /etc/fstab | grep nfs archiv:/archiv-small /archivs/archiv-small nfs rw,timeo=4,rsize=16384,wsize=16384 Нуль Нуль nfs-server:/archiv-big /archivs/archiv-big n ,hard,fg Нуль 0

Перший приклад монтує файлову систему /archiv-small з хоста archiv в точку монтування /archivs/archiv-small, тип файлової системи вказаний nfs (завжди необхідно вказувати для даного типу), файлова система монтована з опцією для читання, запису (rw) .

Хост archiv підключений швидкому локальному каналу, тому для зростання продуктивності параметр timeo зменшений і істотно збільшені значення rsize і wsize. Поля для програм dump і fsck задані в нуль, щоб ці програми не використовували файлову систему, примонтовану за NFS.

Другий приклад монтує файлову систему /archiv-big з хоста nfs-server. Т.к. до хоста nfs-server ми підключені по повільному з'єднанню, параметр timeo збільшений до 5 сек (50 10-х дещицею сек), а також жорстко заданий параметр hard, щоб NFS продовжувала перемонтувати файлову систему після великого таймуута, так само заданий параметр fg, щоб при завантаженні системи та недоступності хоста nfs-server не вийшло зависання.

Перш ніж зберігати конфігурації в /etc/fstab, обов'язково спробуйте змонтувати вручну і переконайтеся, що все працює!

Підвищення продуктивності NFS

На продуктивність NFS можуть проводити кілька характеристик, особливо під час роботи через повільні соединения. При роботі з повільними та високонавантаженими з'єднаннями, краще використовувати параметр hard, щоб таймаути не призвели до припинення роботи програм. Але необхідно обмірковувати, що якщо змонтувати файлову систему через NFS з параметром hard через fstab, а віддалений хост виявиться недоступним, то завантаження системи відбудеться зависання.

Також, одним із найлегших способів зростання продуктивності NFS - збільшення кількості байтів, що передаються за один раз. Обсяг в Чотири тисячі дев'яносто 6 байт дуже малий для сучасних швидких з'єднань, збільшуючи це значення до Вісім тисяч 100 дев'яносто два і більше можна експериментальним способом визначити найкращу швидкість.

Так само, не варто упускати з уваги і функції тайм-аутів. NFS очікує відповіді на пересилання даних протягом проміжку часу, позначеного у функції timeo, якщо відповіді за цей час не отримано, то робиться повторне пересилання.

Але на завантажених і повільних з'єднаннях цей час може бути менше часу реакції сервера і можливості каналів зв'язку, в результаті чого можуть бути зайві повторні пересилання, що уповільнюють роботу. За умовчанням, timeo дорівнює 0,7 сек (700 мілісекунд). після невідповіді протягом сімсот мс сервер здійснить повторне пересилання і подвоїть час очікування до 1,4 сек., збільшення timeo триватиме до більшого значення в Шістдесят сек. Далі в залежності від параметра hard/soft відбудеться будь-яка дія (див. вище).

Підібрати найкращий timeo для певного значення пакета, що передається (значень rsize/wsize), можна за допомогою команди ping:

FILES ~ # ping -s 30 дві тисячі сімсот шістдесят вісім archiv PING archiv.DOMAIN.local (10.0.0.6) 32768(32796) bytes of data. 30 дві тисячі сімсот 70 6 bytes від archiv.domain.local (10.0.0.6): icmp_req=1 ttl=64 time=0.931 ms 30 дві тисячі сімсот 70 6 bytes from archiv.domain.local (10.0.0.0.6. 2 ttl=64 time=0.958 ms 30 дві тисячі сімсот 70 6 bytes від archiv.domain.local (10.0.0.6): icmp_req=3 ttl=64 time=1.03 ms 30 дві тисячі сімсот 70 6 bytesdo. (10.0.0.6): icmp_req=4 ttl=64 time=1.00 ms 30 дві тисячі сімсот 70 6 bytes from archiv.domain.local (10.0.0.6): icmp_req=5 ttl=64 time=1.08 ms ^ archiv.DOMAIN.local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 0.931/1.002/1.083/0.061 ms

Як бачимо, при відправленні пакета розміром 30 дві тисячі сімсот шістдесят вісім (32Kb) час його подорожі від клієнта до сервера і назад плаває у районі Один мілісекунди. Якщо даний час зашкалюватиме за Двісті мс, то варто задуматися про підвищення значення timeo, щоб воно перевищувало значення обміну в три-чотири рази. Відповідно, цей тест краще робити під час сильного завантаження мережі

Запуск NFS та налаштування Firewall

Нотатка скопіпсована з блогу http://bog.pp.ru/work/NFS.html, за що йому величезне спасибі!

Запуск сервера NFS, монтування, блокування, квотування та статусу з "правильними" портами (для мережного екрана)

  • краще попередньо розмонтувати всі ресурси на клієнтах
  • зупинити та заборонити запуск rpcidmapd, якщо не планується впровадження NFSv4: chkconfig --level Триста 40 5 rpcidmapd off service rpcidmapd stop
  • якщо потрібно, то дозволити запуск сервісів portmap, nfs і nfslock: chkconfig --levels Триста 40 5 portmap/rpcbind on chkconfig --levels Триста 40 5 nfs on chkconfig --levels Триста 40 5 nfslock on
  • якщо потрібно, то зупинити сервіси nfslock і nfs, запустити portmap/rpcbind, вивантажити модулі service nfslock stop service nfs stop service portmap start # service rpcbind start umount /proc/fs/nfsd service rpcidmapd stops його необхідно запустити rmmod nfs rmmod nfs_acl rmmod lockd
  • відкрити порти в iptables
    • для RPC: UDP/111, TCP/111
    • для NFS: UDP/2049, TCP/2049
    • для rpc.statd: UDP/4000, TCP/4000
    • для lockd: UDP/4001, TCP/4001
    • для mountd: UDP/4002, TCP/4002
    • для rpc.rquota: UDP/4003, TCP/4003
  • для сервера rpc.nfsd додати до /etc/sysconfig/nfs рядок RPCNFSDARGS="--port 2049"
  • для сервера монтування додати до /etc/sysconfig/nfs рядок MOUNTD_PORT=4002
  • для функції rpc.rquota для нових версій необхідно додати /etc/sysconfig/nfs рядок RQUOTAD_PORT=4003
  • для функції rpc.rquota необхідно для старих версій (все-таки, необхідно мати пакет quota 3.08 або свіже) додати /etc/services rquotad 4003/tcp rquotad 4003/udp
  • перевірить адекватність /etc/exports
  • запустити сервіси rpc.nfsd, mountd та rpc.rquota (заодно запускаються rpcsvcgssd та rpc.idmapd, якщо не забули їх видалити) service nfsd start або в нових версіях service nfs start
  • для сервера блокування для нових систем додати /etc/sysconfig/nfs рядки LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001
  • для сервера блокування для старих систем додати безпосередньо до /etc/modprobe[.conf]: options lockd nlm_udpport=4001 nlm_tcpport=4001
  • прив'язати сервер статусу rpc.statd до порту Чотири тисячі (для старих систем /etc/init.d/nfslock запускати rpc.statd з ключем -p 4000) STATD_PORT=4000
  • запустити сервіси lockd та rpc.statd service nfslock start
  • переконатися, що це порти прив'язалися нормально з допомогою "lsof -i -n -P" і "netstat -a -n" (частина портів використовується модулями ядра, які lsof не бачить)
  • якщо перед "перебудовою" сервером користувалися клієнти та їх не вдалося розмонтувати, то доведеться перезапустити на клієнтах сервіси автоматичного монтування (am-utils, autofs)

Приклад конфігурації NFS сервера та клієнта

Конфігурація сервера

Якщо ви бажаєте зробити ваш розділений NFS каталог відкритим і з правом запису, ви можете використовувати опцію all_squash у композиції з опціями anonuid та anongid. Наприклад, щоб встановити права користувача "nobody" у групі "nobody", ви можете зробити таке:

ARCHIV ~ # cat /etc/exports # Доступ на читання та запис для клієнта на 192.168.0.100, з доступом rw для користувача Дев'яносто дев'ять з gid Дев'яносто дев'ять /files 99)) # Доступ на читання та запис для клієнта на 192.168.0.100, з доступом rw для користувача Дев'яносто дев'ять з gid Дев'яносто дев'ять /files

Це також означає, що якщо ви бажаєте дозволити доступ до зазначеної директорії, nobody.nobody має бути власником розділеної директорії:

# chown -R nobody.nobody /files

Конфігурація клієнта

На клієнті необхідно примонтувати віддалений каталог зручним способом, наприклад командою mount:

FILES ~ # mount -t nfs archiv:/files /archivs/files

Резюме

Фух... Статтю завершено. На даний момент ми вивчили що таке Network File Systemта з чим її їдять, у наступній статті спробую зробити HOWTO з автентифікацією Kerberos. Сподіваюся, матеріал вийшов дохідливим і потрібним.

Буду радий Вашим доповненням та коментарям!

NFS HOWTO, nfs.sourceforge, man nfs? man mount, man exports

RFC Одна тисяча дев'яносто чотири - NFSv1, v2
RFC Одна тисяча вісімсот тринадцять - NFSv3
RFC Три тисячі 500 30 - NFSv4
RFC 5 тисяч 600 шістдесят один - NFSv4.1
NFS HOWTO
nfs.sourceforge.net
man mount
man exports

Network file system (NFS)- Протокол мережного доступу до файлових систем, дозволяє підключати віддалені файлові системи.
Спочатку розроблений Sun Microsystems у 1984 р. Основою є Sun RPC: виклик віддаленої процедури (Remote Procedure Call). NFS незалежний від типів файлових систем сервера та клієнта. Існує безліч реалізацій NFS-серверів та клієнтів для різних ОС. В даний час використовується версія NFS v.4, що підтримує різні засоби аутентифікації (зокрема, Kerberos та LIPKEY з використанням протоколу RPCSEC GSS) та списків контролю доступу (як POSIX, так і Windows типів).
NFS надає клієнтам прозорий доступ до файлів та файлової системи сервера. На відміну від FTP, NFS здійснює доступ тільки до тих частин файлу, до яких звернувся процес, і основна перевага його в тому, що він робить цей доступ прозорим. Завдяки цьому будь-яка програма клієнта, яка може працювати з локальним файлом, з таким же успіхом може працювати і з файлом NFS, без змін самої програми.
NFS клієнти отримують доступ до файлів на сервері NFS шляхом відправки RPC-запитів на сервер. Це може бути реалізовано з використанням звичайних користувальницьких процесів - а саме, NFS клієнт може бути користувальницьким процесом, який здійснює конкретні RPC виклики на сервер, який так само може бути процесом користувача.

Версії
NFSv1 була лише для внутрішнього використання в експериментальних цілях. Деталі реалізації визначені RFC 1094.
NFSv2 (RFC 1094, березень 1989 року) спочатку повністю працювала за протоколом UDP.
NFSv3 (RFC 1813, червень 1995). Описувачі файлів у версії 2 – це масив фіксованого розміру – 32 байти. У версії 3 це масив змінного розміру з розміром до 64 байт. Масив змінної довжини в XDR визначається 4-байтним лічильником, за яким йдуть реальні байти. Це зменшує розмір описувача файлу в таких реалізаціях, як, наприклад, UNIX, де потрібно всього близько 12 байт, проте дозволяє не Unix реалізаціям обмінюватися додатковою інформацією.
Версія 2 обмежує кількість байт на процедури READ або WRITE RPC розміром 8192 байт. Це обмеження не діє у версії 3, що, своєю чергою, означає, що з використанням UDP обмеження буде лише у розмірі IP датаграми (65535 байт). Це дозволяє використовувати великі пакети під час читання та запису в швидких мережах.
Розміри файлів і початкове зміщення в байтах для процедур READ і WRITE стали використовувати 64-бітову адресацію замість 32-бітної, що дозволяє працювати з більшим розміром файлів.
Атрибути файлу повертаються до кожного виклику, який може вплинути на атрибути.
Записи (WRITE) можуть бути асинхронними, тоді як у версії 2 вони мали бути синхронними.
Одна процедура була видалена (STATFS) і сім були додані: ACCESS (перевірка прав доступу до файлу), MKNOD (створення спеціального файлу Unix), READDIRPLUS (повертає імена файлів у директорії разом з їх атрибутами), FSINFO (повертає статистичну інформацію про файлову систему) ), FSSTAT (повертає динамічну інформацію про файлову систему), PATHCONF (повертає POSIX.1 інформацію про файл) та COMMIT (передає раніше зроблені асинхронні записи на постійне зберігання).
На момент введення версії 3 розробники стали більше використовувати TCP як транспортний протокол. Хоча деякі розробники вже використали протокол TCP для NFSv2, Sun Microsystems додали підтримку TCP у NFS версії 3. Це зробило використання NFS через Інтернет більш здійсненним.
NFSv4 (RFC 3010, грудень 2000 р., RFC 3530, переглянута в квітні 2003), під впливом AFS і CIFS, включила поліпшення продуктивності, високу безпеку, і стала повноцінним протоколом. Версія 4 стала першою версією, розробленою спільно з Internet Engineering Task Force (IETF) після того, як Sun Microsystems передала розвиток протоколів NFS. NFS версії v4.1 була схвалена IESG у січні 2010 року, і отримала номер RFC 5661. Важливим нововведенням версії 4.1 є специфікація pNFS - Parallel NFS, механізм паралельного доступу NFS-клієнта до даних безлічі розподілених NFS-серверів. Наявність такого механізму у стандарті мережної файлової системи допоможе будувати розподілені "хмарні" ("cloud") сховища та інформаційні системи.

Структура NFS
Структура NFS включає три компоненти різного рівня:
Прикладний рівень (власне NFS) - це виклики віддалених процедур (rpc), які виконують необхідні операції з файлами і каталогами на стороні сервера.
Функції рівня подання виконує протокол XDR (eXternal Data Representation), що є міжплатформним стандартом абстракції даних. Протокол XDR визначає уніфіковану, канонічну форму представлення даних, що не залежить від архітектури обчислювальної системи. При передачі пакетів RPC-клієнт переводить локальні дані в канонічну форму, а сервер робить зворотну операцію.
Сервіс RPC (Remote Procedure Call), що забезпечує запит віддалених процедур клієнтом та їх виконання на сервері, представляє функції сеансового рівня. Підключення мережевих ресурсів
Процедура підключення мережного ресурсу засобами NFS називається "експортуванням". Клієнт може запросити у сервера список ресурсів, що ним експортуються. Сам сервер NFS не займається широкомовною розсилкою списку своїх ресурсів, що експортуються.
Залежно від заданих опцій, ресурс, що експортується, може бути змонтований (приєднаний) "тільки для читання", можна визначити список хостів, яким дозволено монтування, вказати використання захищеного RPC (secureRPC) та ін. Одна з опцій визначає спосіб монтування: "жорстке" ( hard) або "м'яке" (soft).
При "жорсткому" монтуванні клієнт намагатиметься змонтувати файлову систему будь-що-будь. Якщо сервер не працює, це призведе до того, що весь сервіс NFS зависне: процеси, що звертаються до файлової системи, перейдуть у стан очікування закінчення виконання запитів RPC. З точки зору процесів користувача файлова система буде виглядати як дуже повільний локальний диск. При поверненні сервера в робочий стан NFS продовжить функціонування.
При "м'якому" монтуванні клієнт NFS зробить кілька спроб підключитися до сервера. Якщо сервер не відгукується, система видає повідомлення про помилку і припиняє спроби зробити монтування. З точки зору логіки файлових операцій при відмові сервера м'яке монтування емулює збій локального диска.
Вибір режиму залежить від ситуації. Якщо дані на клієнті та сервері повинні бути синхронізовані при тимчасовій відмові сервісу, то "жорстке" монтування виявляється кращим. Цей режим незамінний також у випадках, коли файлові системи, що монтуються, містять у своєму складі програми та файли, життєво важливі для роботи клієнта, зокрема для бездискових машин. В інших випадках, особливо коли йдеться про системи "тільки для читання", режим "м'якого" монтування видається більш зручним.

Загальний доступ до змішаної мережі
NFS ідеально підходить для мереж на основі UNIX, оскільки поставляється з більшістю версій цієї операційної системи. Більше того, підтримка NFS реалізована лише на рівні ядра UNIX. Використання NFS на клієнтських комп'ютерах з Windows створює певні проблеми, пов'язані з необхідністю встановлення спеціалізованого та досить дорогого клієнтського програмного забезпечення. У таких мережах використання засобів поділу ресурсів на основі протоколу SMB/CIFS, зокрема ПЗ Samba, виглядає кращим.

Стандарти
RFC 1094 NFS: Network File System Protocol Specification] (March 1989)
RFC 1813 NFS Version 3 Protocol Specification] (June 1995)
RFC 2224 NFS URL Scheme
RFC 2339 An Agreement Between Internet Society, IETF, і Sun Microsystems, Inc. in the matter of NFS V.4 Protocols
RFC 2623 NFS Version 2 and Version 3 Security Issues and NFS Protocol's Use of RPCSEC_GSS and Kerberos V5
RFC 2624 NFS Version 4 Design Considerations
RFC 3010 NFS version 4 Protocol
RFC 3530 Network File System (NFS) version 4 Protocol
RFC 5661 Network File System (NFS) Version 4 Minor Version 1 Protocol

Використовувані джерела
1. ru.wikipedia.org
2. ru.science.wikia.com
3. phone16.ru
4. 4stud.info
5. yandex.ru
6. gogle.com

Наводжу інструкцію з встановлення та налаштування NFS (Network File System). NFS – це мережна файлова система, за допомогою якої можна звертатися до файлів та каталогів віддаленого комп'ютера (сервера), начебто ці файли та каталоги були локальними. Головною перевагою такої системи є те, що окремо взяті робочі станції можуть використовувати менше власного дискового простору, оскільки дані, що спільно використовуються, зберігаються на окремій машині (сховище даних) і доступні для інших машин в мережі. NFS – це клієнт-серверна програма, де роль сховища покладається на сервер. Кожен учасник мережі – це NFS-клієнт, який монтує мережевий диск сервера у файловій системі.

У ролі сервера візьмемо Ubuntu 12.04.
Як клієнти будемо використовувати та тестувати Centos та Winows 7.

Master server: 192.168.2.213 (Ubuntu)

Clients: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

Налаштування сервера

Для початку потрібно настроїти сервер. Так як ми будемо використовувати Ubuntu як сервер, потрібно встановити відповідний пакет

Root@ubuntu:~# apt-get install nfs-kernel-server

Після встановлення потрібного пакети у нас створилися два файли конфігурацій. З лога установки:

… Creating config file /etc/idmapd.conf with new version Creating config file /etc/default/nfs-common with new version …

У першому файлі описано user (створений при встановленні пакета) і group для участі в mapping-e (ідентифікації користувачів).

Root@ubuntu:~# cat /etc/idmapd.conf Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # set your own domain here, if id differs from FQDN minus hostname # Domain = localdomain Nobody-User = nobody Nobody-Group = nogroup

Як ми знаємо, у Linux кожен файл належить конкретному користувачеві, який має свій (UID,GID), але в Windows системах схема трохи інша. І у зв'язку з цим було придумано механізм mapping, який робить трансляцію різних користувачів з різних ОС у зрозумілий для файлової системи Linux вигляд.
Другий файл потрібен для налаштування ідентифікації Kerberos та налаштування нестандартного порту, на якому буде слухати демон. Він поки що нам не потрібен. Про налаштування Kerberos йтиметься у наступній статті.

Root@ubuntu:~# cat /etc/default/nfs-common # Якщо ви не знайдете значення для необхідних функцій, вони будуть вирішені # autodetected; це повинно бути достатньо для найбільших людей. Valid alternativas # for the NEED_ options are "yes" and "no". # Do you want to start the statd daemon? Це не потребує NFSv4. NEED_STATD= # Options for rpc.statd. # Should rpc.statd listen on a specific port? Це дуже useful # коли ви маєте port-based firewall. Для використання fixed port, set this # this variable to a statd argument like: "--port 4000 --outgoing-port 4001". # Більше інформації, вірш rpc.statd(8) or http://wiki.debian.org/SecuringNFS STATDOPTS= # Ви хочете, щоб start gssd daemon? Це потребує Kerberos mounts. NEED_GSSD=

Тепер продовжимо налаштування.
Всі каталоги для шарингу потрібно прописувати у файлі /etc/exports. Для початку створимо 2 папки в домашній директорії та закинемо в них файли. Дерево каталогів та файлів для експорту:

Root@ubuntu:~# tree /home/alex/ /home/alex/ ├── nfs_dir1 │ ├── file1_dir1 │ ├── file2_dir1 │ └── file3_dir1 ├── nfs_dir └─ ─ file3_dir2

Тепер необхідно привласнити користувача та групу для цих каталогів (беремо з файлу /etc/idmapd.conf).

Root@ubuntu:~# chown –R nobody:nogroup nfs_dir1/ root@ubuntu:~# chown –R nobody:nogroup nfs_dir2/

Спочатку зробимо експорт директорії nfs_dir1 для конкретного IP. Редагуємо файл /etc/exprots.

Root@ubuntu:~# vim /etc/exports # Для конкретного хоста (Windows) /home/alex/nfs_dir1 192.168.2.180(rw,sync,all_squash,no_subtree_check,insecure) # Для будь-якого хоста підмережі /home/alex/ .2.0/24(rw,no_root_squash,sync,no_subtree_check)

Тут наведено мінімальний набір опцій для коректної роботи сховища Windows.

  • /home/alex/nfs_dir1– шлях до папки, на яку лунає доступ;
  • 192.168.2.180 – IP-адреса, якій дається доступ до папки (можна вказати всю мережу, тоді запис набуде вигляду 192.168.2.0/24)
  • (rw, sync, all_squash, no_subtree_check)- Набір опцій.

Популярні опції:

  • rw-Читання / запис (може приймати значення ro-тільки читання);
  • no_root_squash– за замовчуванням користувач root на клієнтській машині не матиме доступу до директорії сервера, що розділяється. Цією опцією ми знімаємо це обмеження. З метою безпеки цього краще не робити;
  • sync– синхронний режим доступу (може приймати зворотне значення – async);
  • noaccess– забороняє доступ до зазначеної директорії. Може бути корисною, якщо перед цим ви задали доступ всім користувачам мережі до певної директорії, і тепер хочете обмежити доступ до піддиректорії лише деяким користувачам.
  • all_squash- передбачає, що всі підключення будуть виконуватися від анонімного користувача (потрібно для клієнта Windows)
  • anonuid= 1000 – прив'язує анонімного користувача до «місцевого» користувача;
  • anongid= 1000 – прив'язує анонімного користувача до групи місцевого користувача.
  • no_subtree_check(subtree_check)–якщо експортується підкаталог файлової системи, але не вся файлова система, сервер перевіряє, чи файл, який ви запитали, в експортованому підкаталозі. Вимкнення перевірки зменшує безпеку, але збільшує швидкість передачі даних.
  • Як правило, Linux (та інші Unix-подібні операційні системи) резервують TCP і UDP порти від 1-1023 (так звані безпечні порти) для використання процесами користувача root. Щоб переконатися, що саме root ініціював віддалене підключення NFS, сервер NFS зазвичай вимагає, щоб віддалені клієнти використовували безпечні порти. Ця угода, однак, не дотримується деяких операційних систем (наприклад, Windows). У таких випадках опція insecureдозволяє клієнту NFS використовувати будь-який порт TCP/UDP. Зазвичай вона потрібна для обслуговування клієнтів Windows.

Усі доступні опції та синтаксис запису хостів, груп хостів тощо. можна почитати у мануалі

Root@ubuntu:~# exportfs –a

Тепер перевіряємо, що у нас експортувалося.

Root@ubuntu:~# exportfs -v /home/alex/nfs_dir1 192.168.2.180(rw,wdelay,all_squash,no_subtree_check,insecure) /home/alex/nfs_dir2 192.168.2.0/24(rw,wdelay,no_root_squash,no_subtree_check)

Сервер налаштований.

Налаштування клієнтів

Налаштування клієнта Windows

Якщо не було повідомлень про помилку. Можна приступити до монтування на стороні клієнта.
Для початку потрібно додати сервіс (службу-клієнта) NFS. Для цього переходячи в Пуск -> Панель управління -> Програми та компонентита натискаємо на пункт меню зліва Увімкнення або вимкнення компонентів Windows. У вікні вибираємо Клієнт для NFSі тиснемо ОК(Рис. 1).


Малюнок 1

Далі слід змонтувати диск. Для цього можна використовувати командний рядок або просто клацнути правою кнопкою миші на Мій комп'ютер і вибрати Підключення мережного диска. І ввести рядок \\192.168.2.213\home\alex\nfs_dir1. Це IP сервер і шлях до папки (рис. 2).


Малюнок 2

Якщо все добре, ми побачимо диск (рис. 3).


Малюнок 3

Те саме можна зробити, використовуючи командний рядок (рис. 4).


Малюнок 4

Можливі помилки:

Ви не зможете підключити мережевий NFS диск до Windows OS (мал. 5), якщо
1. Не встановлений клієнт NFS
2. Увімкнений (не налаштований) фаервол
3. Немає мережного доступу до сервера
4. Неправильно введено параметри монтування
5. Не налаштовано (не застосовано налаштування) експорт на сервері.
6. Додати опцію insecure у налаштуваннях експорту


Рисунок 5 – Помилка підключення NFS диску

Ви не зможете додати файл до змонтованої файлової системи (рис. 6), якщо:
1. На сервері не виставлено права папки (nobody:nogroup)
2. Не виставлено опцію all_squash у налаштуваннях експорту
3. Не виставлено опцію rw у налаштуваннях експорту


Рисунок 6 – Помилка при додаванні файлу на диск NFS

Налаштування Centos клієнта

Налаштування лінукс систем досить просте і безболісне. Потрібно просто встановити потрібні пакети та змонтувати диск. Для Centos потрібні такі пакети

# yum install nfs-utils nfs-utils-lib

# mkdir -p /mnt/nfs # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/nfs # mount /dev/mapper/vg_slave-lv_root on / type ext4 (rw) proc on /proc type proc (rw sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0" ) /dev/sda1 на /boot type ext4 (rw) none на /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc на /var/lib/nfs/rpc_pipefs rpc_pipefs (rw) 192.1. alex/nfs_dir1 on /mnt/nfs type nfs (rw,vers=4,addr=192.168.2.213,clientaddr=192.168.2.72)

В даному випадку ми можемо додавати будь-який файл та директорію до змонтованої nfs_dir1 папки від імені будь-якого користувача системи ( all_squash). Але якщо ми змонтуємо другу папку nfs_dir2, то в неї може записувати ТІЛЬКИ root, тому що там стоїть опція no_root_squash. Перевіряємо.

# mkdir /mnt/dir1 # mkdir /mnt/dir2 # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/dir1 # mount 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 -o rw,hard,intr,bg 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 # echo "Hello" > /mnt/dir1/file1 # echo "Hello" > /mnt/dir2/file1 # su alex $ echo "Hello" > /mnt/dir1/file1 $ echo "Hello" > /mnt/dir2/file1 bash: /mnt/dir2/file1: Permission denied

Можливі прапори змонтування.

Прапор Опис
rw Монтування файлової системи для читання/запису (вона має експортуватися сервером у режимі читання/запису)
го Монтування файлової системи лише для читання
bg Якщо змонтувати файлову систему не вдається (сервер не відповідає), перевести операцію у фоновий режим і продовжити обробку інших запитів на монтування
hard Якщо сервер вимкнувся, операції, які намагаються отримати доступ до нього, блокуються доти, доки сервер не ввімкнеться знову
soft Якщо сервер вимкнувся, операції, які намагаються отримати доступ до нього, завершуються видачею повідомлення про помилку. Цей прапор корисно встановлювати для того, щоб запобігти зависанню процесів у разі невдалого монтування не дуже важливих файлових систем
intr Дозволяє переривати з клавіатури заблоковані операції (видаватимуться повідомлення про помилку)
nointr Не дозволяє переривати з клавіатури заблоковані операції
retrans=n Вказує, скільки разів потрібно повторити запит, перш ніж буде видано повідомлення про помилку (для файлових систем, змонтованих із прапором soft)
timeo=n Задає інтервал тайм-ауту для запитів (у десятих частках секунди)
rsize=n Задає розмір буфера читання рівним n байт
wsize=fl Задає розмір буфера запису, що дорівнює n байт
sec=режим Встановлює режим безпеки
vers=n Вказує версію протоколу NFS
proto = протокол Вибирає транспортний протокол; їм має бути протокол tcp для версії NVS 4

Також можна перевірити з консолі, чи сервер експортував файлову систему.

Root@centos ~# showmount -e 192.168.2.213 Export list for 192.168.2.213: /home/alex/nfs_dir2 192.168.2.0/24 /home/alex/nfs_dir1 192.168.2.180

Додаємо монтування в автозавантаження

# cat /etc/fstab ... 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 nfs4 rw,bg,intr,hard,nodev,nosuid 0 0

Root@centos ~# mount -a -t nfs4

Можливі помилки.

Root@centos ~# mount -a -t nfs4 mount.nfs4: mount point /mnt/dir2 немає exist root@centos ~# mount -a -t nfs4 mount.nfs4: remote share not in "host:dir" format

У першому випадку потрібно створити папку. У другому – синтаксичні помилки у fstab.
Якщо виникли помилки при монтуванні NFS розділів – пройдіть за списком Можливі помилкиіз попереднього розділу.
Для монтування розділів NFS можна також використовувати autofs. Про що йтиметься у .

N FS ( Network File System) в основному розроблена для спільного використання файліві папокміж / Unixсистем від компанії Sun Microsystemsв 1980 року. Вона дозволяє монтувати локальні файлові системи по мережі та віддалених хостів, для взаємодії з ними так, ніби вони встановлені локально на тій самій системі. За допомогою NFS, ми можемо налаштувати спільний доступ до файлів між Unixв Linuxсистемі та Linuxдля системи Unix.

Переваги NFS

  1. NFSстворює локальний доступ до віддалених файлів.
  2. Він використовує стандартну архітектуру клієнт/сервердля обміну файлами між усіма машинами на базі * NIX.
  3. За допомогою NFSне потрібно, щоб обидві машини працювали на тій самій ОС.
  4. За допомогою NFSми можемо налаштувати рішення централізованого зберігання.
  5. Користувачі отримують свої данінезалежно від їхнього фізичного розташування.
  6. Автоматичне оновленнядля нових файлів.
  7. Новіша версія NFSпідтримує монтування acl, pseudoпід root.
  8. Може бути захищений брандмауерамиі Kerberos.

Послуги NFS

Сервіс System V-launched. Серверний пакет NFSвключає три засоби, що входять до складу пакетів portmapі nfs-Utils.

  1. portmap: відображає дзвінки з інших машин до правильної служби RPC(не потрібно з NFSv4).
  2. nfs: перетворює віддалені запити спільного доступу до файлівзапити на локальній файловій системі.
  3. rpc.mountd: ця служба відповідає за монтуванняі розмонтуванняфайлових систем

Важливі конфігураційні файли для NFS

  1. /etc/exports: його основний конфігураційний файл NFS, всі експортовані файлиі каталоги, які визначені в цьому файлі та на кінцевому сервері NFS.
  2. /etc/fstab: Для того, щоб змонтувати каталог NFSна вашій системі без перезавантаженьнам потрібно зробити запис в /etc/fstab.
  3. /etc/sysconfig/nfs: Конфігураційний файл NFSдля управління, на якому порт RPCта інші послуги прослуховування.

Налаштування та монтування NFS на сервері Linux

Для налаштування монтування NFS, ми будемо потребувати принаймні двох машин Linux/Unix. Ось у цьому підручнику, ми будемо використовувати два сервери.

  1. Сервер NFS: nfsserver.example.ru з IP – 192.168.0.55
  2. Клієнт NFS: nfsclient.example.ru з IP – 192.168.0.60

Встановлення сервера NFS та клієнта NFS

Нам потрібно встановити пакети NFSна нашому сервері NFS, а також на машині клієнта NFS. Ми можемо встановити його за допомогою “ ” ( Red Hat Linux) та інсталяційний пакет “ apt-get” (Debianі Ubuntu).

# yum install nfs-utils nfs-utils-lib # yum install portmap (не потребує NFSv4) # apt-get install nfs-utils nfs-utils-lib

Тепер запустіть службина обох машинах.

# /etc/init.d/portmap start # /etc/init.d/nfs start # chkconfig --level 35 portmap on # chkconfig --level 35 nfs on

Після встановлення пакетів та запуску сервісів на обох машинах, нам потрібно налаштувати обидві машини для спільного використання файлів.

Налаштування сервера NFS

Спочатку налаштуємо сервер NFS.

Налаштування каталогу експорту

# mkdir /nfsshare

Тепер нам потрібно зробити запис у “ /etc/exports” та перезапуститислужби, щоб зробити наш каталог поділюваними в мережі.

# vi /etc/exports /nfsshare 192.168.0.60(rw, sync, no_root_squash)

У наведеному вище прикладі є каталог, в розділі / під назвою " nfsshare", в даний час спільно з клієнтом IP" 192.168.0.60 ” з привілеями читанняі записи (RW), ви можете також використовувати ім'я хостаклієнта замість IPу наведеному вище прикладі.

Параметри NFS

Деякі інші варіанти ми можемо використовувати у файли “ /etc/exports” для спільного використання файлів виглядає так.

  1. ro: За допомогою цієї опції ми можемо надати доступ тільки для читаннядо загальних файлів, тобто клієнтбуде тільки в стані прочитати.
  2. rw: Ця опція дозволяє клієнт – серверудоступ для обох для читанняі записиу межах загального каталогу.
  3. sync: Синхронізація підтверджує запити до спільного каталогу тільки після того, як змінибули скоєні.
  4. no_subtree_check: Ця опція запобігає перевірці піддерева. Коли загальний каталог є підкаталогом більшої файлової системи, NFSвиконує сканування кожної директорії над ним, щоб перевірити свої дозволи та деталі. Вимкнення перевірки піддереваможе підвищити надійність NFS, але знижують безпека.
  5. no_root_squash: Ця фраза дозволяє root, підключитисядо певної папки.

Для більшої кількості варіантів з “ /etc/exports“, рекомендується прочитати сторінкикерівництва для експорту.

Налаштування клієнта NFS

Після налаштування NFS-Сервера, нам необхідно змонтуватицей загальний каталог або розділ на клієнтськоюсервер.

Монтування спільних каталогів на клієнті NFS

Тепер на клієнт NFS, нам потрібно змонтуватицей каталог доступу до нього на місцевому рівні. Для цього ми повинні з'ясувати, які ресурси доступні на віддаленому сервері або сервері NFS.

# showmount -e 192.168.0.55 Export list for 192.168.0.55: /nfsshare 192.168.0.60

Монтування доступного каталогу в NFS

Для того щоб змонтуватизагальний NFSкаталог, ми можемо використати наступну команду монтування.

# mount -t nfs 192.168.0.55:/nfsshare /mnt/nfsshare

Наведена вище команда встановить загальний каталог у “ /mnt/nfsshare” на сервері клієнта. Ви можете перевірити його наступною командою.

# Mount | grep nfs sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) nfsd on /proc/fs/nfsd type nfsd (rw) 192.168.0.55:/nfsshare on /mnt8type.

Вище команда mount монтує на NFS спільно використовуваний каталогна NFS клієнтатимчасово змонтувати каталог NFS постійнона вашій системі незалежно від перезавантажень, нам потрібно зробити запис у “ /etc/fstab“.

# vi /etc/fstab

Додайте наступний новий рядок, як показано нижче.

192.168.0.55:/nfsshare /mnt nfs defauls 0 0

Тестування режиму роботи NFS

Ми можемо протестувати нашу встановлення сервера NFSшляхом створення тестового файлуна стороні сервера і перевірити його наявність на NFS клієнтастороні чи навпаки.

На стороні сервера nfsserver

Ми створили новий текстовий файл з ім'ям “ nfstest.txt” у цьому загальному каталозі.

# cat > /nfsshare/nfstest.txt Це є файл тесту для роботи з NFS server setup.

На стороні клієнта nfsclient

Перейдіть до загального каталогу на сервері клієнтаі ви знайдете спільний файл без будь-якого ручного оновлення або служби перезавантаження.

# ll /mnt/nfsshare total 4 -rw-r--r-- 1 root root 61 Sep 21 21:44 nfstest.txt root@nfsclient ~]# cat /mnt/nfsshare/nfstest.txt test the working of NFS server setup.

Видалення монтування NFS

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

Root@nfsclient ~]# umount /mnt/nfsshare

Ви можете бачити, що монтування видалено у файловій системі.

# df -h -F nfs

Ви побачите, що ці загальні каталоги більше не доступні.

Важливі команди для NFS

Деякі важливіші команди для NFS .

  1. showmount -e: Показує доступні розшаровані об'єктина локальному комп'ютері
  2. showmount -e : Список доступних розшарованих об'єктівна віддаленомусервері
  3. showmount -d: Список всіх піддиректорій
  4. exportfs -v: Відображає список розшарованих файліві опційна сервері
  5. exportfs -a: Експорт усіх доступних об'єктів, перерахованих у /etc/exports, або ім'я
  6. exportfs -u: Реекспорт усіх доступних об'єктів, перераховані в /etc/exports, або ім'я
  7. exportfs -r: Оновити список сервера після зміни /etc/exports

Це все про монтування NFSна даний момент, якщо цікаво, можете прочитати гід про те. Залишайте свої

Коли йдеться про комп'ютерні мережі, часто можна почути згадку NFS. Що таке означає ця абревіатура?

Це протокол розподіленої файлової системи, спочатку розроблений компанією Sun Microsystems в 1984 році, що дозволяє користувачеві на клієнтському комп'ютері отримувати доступ до файлів через мережу, подібно до локального сховища. NFS, як і багато інших протоколів, ґрунтується на системі Open Network Computing Remote Procedure Call (ONC RPC).

Інакше кажучи, що таке NFS? Це відкритий стандарт, визначений у Request for Comments (RFC), що дозволяє реалізувати протокол.

Версії та варіації

Винахідник використовував лише першу версію для власних експериментальних цілей. Коли команда розробників додала суттєві зміни до початкової NFS і випустила її за межами авторства Sun, вони позначили нову версію як v2, щоб можна було протестувати взаємодію між дистрибутивами та створити резервний варіант.

NFS v2

Версія 2 спочатку працювала лише за протоколом User Datagram Protocol (UDP). Її розробники хотіли зберегти серверну сторону без блокування, реалізованого поза основного протоколу.

Інтерфейс віртуальної файлової системи дозволяє виконувати модульну реалізацію, відбиту у простому протоколі. До лютого 1986 були продемонстровані рішення для таких операційних систем, як System V release 2, DOS і VAX/VMS з використанням Eunice. NFS v2 дозволяв зчитувати лише перші 2 ГБ файлу через 32-розрядні обмеження.

NFS v3

Перша пропозиція з розробки NFS версії 3 у Sun Microsystems була озвучена невдовзі після випуску другого дистрибутива. Головною мотивацією була спроба пом'якшити проблему продуктивності синхронного запису. До липня 1992 року практичні доопрацювання дозволили вирішити багато недоліків NFS версії 2, залишивши при цьому лише недостатню підтримку файлів (64-розрядні розміри та зміщення файлів).

  • підтримку 64-бітних розмірів та зміщень файлів для обробки даних розміром понад 2 гігабайти (ГБ);
  • підтримку асинхронного запису на сервері підвищення продуктивності;
  • додаткові атрибути файлів у багатьох відповідях, що дозволяють уникнути їх повторного вилучення;
  • операцію READDIRPLUS для отримання даних та атрибутів разом з іменами файлів під час сканування каталогу;
  • багато інших покращень.

Під час введення версії 3 підтримка TCP як протокол транспортного рівня почала збільшуватися. Використання TCP як засіб передачі даних, виконаного з використанням NFS через WAN, стало дозволяти передавати великі розміри файлів для перегляду та запису. Завдяки цьому розробники змогли подолати межі обмежень у 8 КБ, що накладаються протоколом користувацьких дейтаграм (UDP).

Що таке NFS v4?

Версія 4, розроблена під впливом Ендрської файлової системи (AFS) і блоку повідомлень сервера (SMB, також звана CIFS), включає підвищення продуктивності, забезпечує кращу безпеку і вводить протокол з дотриманням встановлених умов.

Версія 4 стала першим дистрибутивом, розробленим у Цільовій групі Internet Engineering Task Force (IETF) після того, як Sun Microsystems передала розробку протоколів стороннім фахівцям.

NFS версія 4.1 спрямована на надання підтримки протоколу для використання кластерних розгортань серверів, включаючи можливість надання масштабованого паралельного доступу до файлів, розподілених між кількома серверами (розширення pNFS).

Новий протокол файлової системи – NFS 4.2 (RFC 7862) – був офіційно випущений у листопаді 2016 року.

Інші розширення

З розвитком стандарту з'явилися відповідні інструменти для роботи з ним. Так, WebNFS, розширення для версій 2 і 3, дозволяє протоколу мережного доступу до файлових систем легше інтегруватися у веб-браузер і активувати роботу через брандмауери.

Різні протоколи сторонніх груп також стали асоціюватися з NFS. З них найбільш відомими виступають:

  • Network Lock Manager (NLM) з підтримкою протоколу байтів (доданий для підтримки API-блокування файлів UNIX System V);
  • віддаленої квоти (RQUOTAD), що дозволяє користувачам NFS переглядати квоти на зберігання даних на серверах NFS;
  • NFS через RDMA - адаптація NFS, яка використовує дистанційний прямий доступ до пам'яті (RDMA) як засіб передачі;
  • NFS-Ganesha - сервер NFS, що працює в просторі користувача і підтримує CephFS FSAL (рівень абстракції файлової системи) з використанням libcephfs.

Платформи

Network File System часто використовується з операційними системами Unix (такими як Solaris, AIX, HP-UX), MacOS від Apple та Unix-подібними ОС (такими як Linux та FreeBSD).

Він також доступний для таких платформ, як Acorn RISC OS, OpenVMS, MS-DOS, Microsoft Windows, Novell NetWare та IBM AS/400.

Альтернативні протоколи віддаленого доступу до файлів включають блок повідомлень сервера (SMB, також званий CIFS), протокол передачі Apple (AFP), базовий протокол NetWare (NCP) і файлову систему сервера OS/400 (QFileSvr.400).

Це пов'язано з вимогами NFS, які орієнтовані здебільшого на Unix-подібні оболонки.

При цьому протоколи SMB та NetWare (NCP) застосовуються частіше, ніж NFS, у системах під керуванням Microsoft Windows. AFP найбільше поширений у платформах Apple Macintosh, а QFileSvr.400 найчастіше зустрічається в OS/400.

Типова реалізація

Передбачаючи типовий сценарій у стилі Unix, в якому одному комп'ютеру (клієнту) потрібен доступ до даних, що зберігаються на іншому (сервер NFS):

  • Сервер реалізує процеси Network File System, запущені за умовчанням як nfsd, щоб зробити дані загальнодоступними для клієнтів. Адміністратор сервера визначає, як експортувати імена та параметри каталогів, зазвичай використовуючи файл конфігурації/etc/exports та команду exportfs.
  • Адміністрація безпеки сервера гарантує, що він зможе розпізнавати та затверджувати перевіреного клієнта. Конфігурація мережі гарантує, що відповідні клієнти можуть вести переговори з ним через будь-яку систему брандмауера.
  • Клієнтська машина запитує доступ до експортованих даних, зазвичай, шляхом видачі відповідної команди. Вона запитує сервер (rpcbind), який використовує порт NFS, і потім підключається до нього.
  • Якщо все відбувається без помилок, користувачі на клієнтській машині зможуть переглядати та взаємодіяти із встановленими файловими системами на сервері в межах дозволених параметрів.

Слід звернути увагу на те, що автоматизація процесу Network File System також може мати місце - можливо, з використанням etc/fstab та/або інших подібних засобів.

Розвиток на сьогодні

До 21-го століття протоколи-конкуренти DFS та AFS не досягли будь-якого великого комерційного успіху в порівнянні з Network File System. Компанія IBM, яка раніше придбала всі комерційні права на вищезазначені технології, безоплатно передала більшу частину вихідного коду AFS спільноті вільних розробників програмного забезпечення у 2000 році. Проект Open AFS існує й у наші дні. На початку 2005 року IBM оголосила про завершення продажів AFS та DFS.

У свою чергу, у січні 2010 року компанія Panasas запропонувала NFS v 4.1 на основі технології, що дозволяє покращити можливості паралельного доступу до даних. Протокол Network File System v 4.1 визначає метод поділу метаданих файлової системи з розташування певних файлів. Таким чином, він виходить за рамки простого поділу імен/даних.

Що таке NFS цієї версії на практиці? Вищезгадана особливість відрізняє його від традиційного протоколу, який містить імена файлів та їх даних під однією прив'язкою до сервера. При реалізації Network File System v 4.1 деякі файли можуть розподілятися між багатовузловими серверами, проте участь клієнта у розділенні метаданих та даних обмежена.

При реалізації четвертого дистрибутива протоколу NFS-сервер є набір серверних ресурсів чи компонентів; передбачається, що вони контролюються сервером метаданих.

Клієнт, як і раніше, звертається до одного серверу метаданих для обходу або взаємодії з простором імен. Коли він переміщує файли на сервер і з нього, він може взаємодіяти безпосередньо з набором даних, що належать групі NFS.