NFSv4 забезпечує уніфікований доступ до мережі. Встановлення та налаштування NFS-клієнт. Встановлення серверної частини NFS

Суть проблеми: свого часу компанія Samsung почала випускати телевізори, що підтримують розроблену провідними виробниками побутової технікитехнологію DLNA, засновану на принципі "цифровий будинок". Ця технологія дозволила інтегрувати телевізори в локальну. домашню мережу, що дало можливість обмінюватися медіа-контентом між телевізором та комп'ютером, і зокрема, переглядати на ТБ фільми, що зберігаються на комп'ютері локальної мережіабо через WiFi. Однак мультимедійне рішення, запропоноване Самсунгом для реалізації цієї технології, м'яко кажучи, бажає кращого. Так, фільми, що переглядаються по мережі у вбудованому в телевізор медіа-плеєрі, в більшості випадків не перемотуються. Крім того, під час перегляду фільмів через мережу, на відміну від перегляду фільмів з флешки або переносного жорсткого диска, підключеного до ТБ по USB-порту, не підтримується функція безперервного відтворення (синя кнопка на пульті). Нарешті, сама необхідність щоразу запускати на комп'ютері Samsung PC Share Manger і коригувати після кожного видалення або додавання файлів на диск, трохи напружує.

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

NFS – це мережевий протокол, організований за принципом "сервер – клієнт". У ролі сервера у нас буде комп'ютер, у ролі клієнта – телевізор. Увімкнення підтримки NFS у телевізорі ми вже розглянули в попередньому розділі під час налаштування та встановлення в телепрограмі SamyGO Auto. Якщо ви пам'ятаєте, то в налаштуваннях конфігуратора SamyGO Auto ми встановили прапорець навпроти секції NFS і також прописали IP-адресу NFS-сервера (192.168.xxx.xxx), тобто адресу нашого комп'ютера:
У цьому розділі ми розглянемо встановлення та налаштування NFS-сервера на наш комп'ютер. В Інтернеті є безліч різних програмвстановлення та налаштування NFS-сервера. Ми ж скористаємось додатком haneWIN NFS Server(воно є умовно-безкоштовним, і після закінчення певного терміну вимагає реєстрації серійного номера, але, як ви розумієте, в інтернеті завжди знаходяться умільці, які здатні вирішити цю проблему). Отже, приступимо:

Примітка: іноді брандмауер Windows або вбудований антивірус файрвол можуть блокувати роботу NFS-сервера. Щоб цього не відбувалося, в брандмауер Windows(або якщо у вас стоїть інший файрвол, то в ньому) необхідно дозволити доступ до мережі двом програмам: nfsd.exe і pmapd.exe (вони знаходяться в папці установки сервера C:\Program Files\nfsd).


Зрештою, увімкнемо телевізор і переконаємося в тому, що наш NFS-сервер працює. У попередньому розділі, коли ми встановлювали програму SamyGO Auto в телевізор, ми вказали параметр для автозапуску. Отже, при включенні ТБ він повинен автоматично виявити наш NFS (це відбувається не відразу, а приблизно через 20 секунд після включення ТБ). Отже, включаємо ТБ, потім переходимо в медіа-плеєр і бачимо там новий пристрій – NFS Server.

Якщо ви звернете увагу, то навпаки NFS стоїть значок USB-з'єднання. Це те, про що ми раніше говорили, тепер ваше ТБ сприйматиме комп'ютер як жорсткий диск або флешку, підключену по USB. Ви можете переходити до розділу Movie та насолоджуватися переглядом фільмів по мережі. Запускати Samsung PC Share Manger на комп'ютері вам більше не потрібно. Просто додайте фільм до папки з фільмами на комп'ютері, і він автоматично "підвантажиться" в меді-плеєр ТБ.

У наступному розділі ми розповімо про те, як записувати передачі з ТБ на флешку або, якщо тепер у нас є NFS - то в папку з фільмами на комп'ютері.


Доброго часу, читачі та гості. Дуже велика перерва між постами була, але я знову в бою). У сьогоднішній статті розгляну роботу протоколу 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 і має у своїй історії 4 версії. NFSv1була розроблена в 1989 році і була експериментальною, працювала на протоколі UDP. Версія 1 описана у . NFSv2була випущена в тому ж 1989, описувалася тим же RFC1094 і так само базувалася на протоколі UDP, при цьому дозволяла читати не більше 2Гб з файлу. NFSv3доопрацьована в 1995 р. та описана в . Основними нововведеннями третьої версії стала підтримка файлів великого розміру, додана підтримка протоколу TCP та TCP-пакетів великого розміру, що суттєво прискорило працездатність технології. NFSv4доопрацьована в 2000 р. і описана в RFC 3010, в 2003 р. переглянута та описана в . Четверта версія включила поліпшення продуктивності, підтримку різних засобів аутентифікації (зокрема, Kerberos і LIPKEY з використанням протоколу RPCSEC GSS) і списків контролю доступу (як POSIX, так і Windows-типів). NFS версії v4.1була схвалена IESG у 2010 р., та отримала номер . Важливим нововведенням версії 4.1 є специфікація pNFS - Parallel NFS, механізму паралельного доступу NFS-клієнта до даних безлічі розподілених NFS-серверів. Наявність такого механізму у стандарті мережевої файлової системи допоможе будувати розподілені «хмарні» (cloud) сховища та інформаційні системи.

NFS сервер

Бо в нас NFS- це мережевафайлова система, то необхідно. (Так само можна почитати статтю). Далі необхідно. У 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 1 root root 20 Жов 18 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 27 Жов 22 01:23 S16n. /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в (тобто у файлі /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.

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

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

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

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

Крім зазначених вище пакетів, для коректної роботи NFSv2 та v3 потрібен додатковий пакет portmap(у новіших дистрибутивах замінений на перейменований на rpcbind). Цей пакет зазвичай встановлюється автоматично з NFS як залежний і реалізує роботу сервера RPC, тобто відповідає за динамічне призначення портів для деяких служб, зареєстрованих на сервері 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) , про протокол та порт на якому працює сервіс та про версію сервісу та надає зазначену інформацію клієнтам на запит. Сам перетворювач портів має номер програми (100000), номер версії - 2, TCP порт 111 та UDP порт 111. Вище, при вказівці складу демонів сервера NFS я вказав основні RPC номери програм. Я, напевно, трохи заплутав Вас даним абзацом, тому вимовлю основну фразу, яка повинна внести ясність: основна функція відображувача портів полягає в тому, щоб на запит клієнта, який надав номер RPC-програми (або RPC-номер програми) і версію, повернути йому (клієнту) порт, у якому працює запитана програма . Відповідно, якщо клієнту потрібно звернутися до RPC з конкретним номером програми, він спочатку повинен увійти в контакт із процесом portmap на серверній машині та визначити номер порту зв'язку з необхідним сервісом RPC.

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

  1. Перетворювач портів повинен стартувати першим, зазвичай під час завантаження системи. При цьому створюється кінцева точка TCP і здійснюється відкриття TCP порту 111. Також створюється кінцева точка UDP, яка чекає, коли на UDP порт 111 прибуде датаграма UDP.
  2. При старті програма, що працює через сервер RPC, створює кінцеву точку TCP і кінцеву точку UDP для кожної підтримуваної версії програми. (Сервер RPC може підтримувати кілька версій. Клієнт вказує необхідну версію при надсиланні RPC-дзвінка.) Номер порту, що динамічно призначається, закріплюється за кожною версією сервісу. Сервер реєструє кожну програму, версію, протокол і номер порту, здійснюючи відповідний RPC-виклик.
  3. Коли програмі клієнта RPC необхідно отримати необхідну інформацію, вона викликає виклик процедуру перетворювача портів, щоб отримати номер порту, що динамічно призначається, для заданої програми, версії і протоколу.
  4. У відповідь цей запит північ повертає номер порту.
  5. Клієнт відправляє повідомлення RPC-запит на номер порту, отриманий у пункті 4. Якщо використовується UDP, клієнт просто надсилає UDP датаграму, що містить повідомлення RPC-дзвінка, на номер UDP порту, на якому працює сервіс, що запитує. У відповідь сервіс надсилає UDP датаграму, що містить повідомлення RPC відгуку. Якщо використовується TCP, клієнт здійснює активне відкриття на номер TCP порту необхідного сервісу та надсилає повідомлення виклику RPCпо встановленому з'єднанню. Сервер відповідає повідомленням відгуку RPC з'єднання.

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

ARCHIV ~ # rpcinfo -p прог-ма верс прото порт 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 59451 status 100024 1 tc0 0 nlockmgr 100021 3 udp 44310 nlockmgr 100021 4 udp 44310 nlockmgr 100021 1 tcp 44851 nlockmgr 100021 3 tcp 44851 nlockmgr 100021 4 tcp 44851 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp0 00 s 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100005 1 udp 51306 mountd 100005 1 tc 41405 mountd 100005 2 udp 51306 mountd 100005 2 tcp 41405 mountd 100005 3 udp 51306 mountd 100005 3 tcp 41405 mou

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

NFS сервер (точніше демон rpc.nfsd) отримує запити від клієнта у вигляді UDP датаграм на порт 2049. Незважаючи на те, що NFS працює з перетворювачем портів, що дозволяє серверу використовувати порти, що динамічно призначаються, UDP порт 2049 жорстко закріплений за 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:

  1. Клієнту (процесу користувача) байдуже, чи отримує він доступ до локального файлу або до NFS файлу. Ядро займається взаємодією із залізом через модулі ядра або вбудовані системні виклики.
  2. Модуль ядра kernel/fs/nfs/nfs.ko,який виконує функції NFS клієнта, відправляє RPC запити NFS серверу через модуль TCP/IP. NFS зазвичай використовує UDP, проте нові реалізації можуть використовувати TCP.
  3. NFS сервер отримує запити від клієнта у вигляді UDP датаграм на порт 2049. Незважаючи на те, що NFS може працювати з перетворювачем портів, що дозволяє серверу використовувати порти, що динамічно призначаються, UDP порт 2049 жорстко закріплений за NFS в більшості реалізацій.
  4. Коли сервер NFS отримує запит від клієнта, він передається локальній підпрограмі доступу до файлу, яка забезпечує доступ до локальному дискуна сервері.
  5. Результат обігу диска повертається клієнту.

Налаштування сервера 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, кому вірити – не знаю Навіть на 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 вказує не відкладати виконання команди на запис, що може бути корисно, якщо сервер отримує велику кількість команд, не пов'язаних один з одним.

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

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

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

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

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

  • користувач може не мати одні і ті ж ідентифікатори в обох системах і, відповідно, може отримати доступ до файлів іншого користувача.
  • т.к. у користувача root ідентифікатор завжди 0, то даний користувачвідображається на локального користувача, залежно від заданих опцій.

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

  • root_squash (no_root_squash)- При заданій опції root_squash, запити від користувача root відображаються на анонімного uid/gid, або користувача, заданого в параметрі anonuid/anongid.
  • no_all_squash (all_squash)- Не змінює UID/GID користувача, що підключається. Опція all_squashзадає відображення ВСІХ користувачів (не тільки root), як анонімних чи заданих у параметрі anonuid/anongid.
  • anonuid= UID і anongid= GID - Явно задає UID/GID для анонімного користувача.
  • map_static= /etc/file_maps_users - Задає файл, у якому можна задати зіставлення віддалених UID/GID – локального UID/GID.

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

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

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

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

  • nfsstat
  • showmsecure (insecure)ount

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може проводитися за допомогою або за допомогою одного з автоматичних монтувальників, що розплодилися (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- Ця опція забороняє виконувати програми зі змонтованого каталогу.
  • 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

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

  • ac (noac) (attrebute cache- кешування атрибутів) - Дозволяє кешування атрибутів (за замовчуванням). Хоча опція noac уповільнює роботу сервера, вона дозволяє уникнути старіння атрибутів, коли кілька клієнтів активно записують інформацію у загальну ієрархію.
  • acdirmax=n (attribute cache directory file maximum- кешування атрибуту максимум для файлу каталогу) - Максимальна кількість секунд, що NFS очікує до оновлення атрибутів каталогу (за замовчуванням 60 сек.)
  • acdirmin=n (attribute cache directory file minimum- кешування атрибута мінімум для файлу каталогу) - Мінімальна кількість секунд, що NFS очікує до оновлення атрибутів каталогу (за замовчуванням 30 сек.)
  • acregmax=n (attribute cache regular file maximum- кешування атрибуту максимум для звичайного файлу) - Максимальна кількість секунд, що NFS очікує до оновлення атрибутів звичайного файлу (за замовчуванням 60 сек.)
  • acregmin=n (attribute cache regular file minimum- кешування атрибута мінімум для звичайного файлу) - Мінімальна кількість секунд, що NFS очікує до оновлення атрибутів звичайного файлу (за замовчуванням 3 сек.)
  • 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- значення таймуута) - Кількість десятих часток секунди очікування службою NFS до повторної передачі у разі RPC або малого таймууту (за замовчуванням 7). Це значення збільшується при кожному таймуут до максимального значення 60 секунд або до настання великого таймууту. У разі зайнятої мережі, повільного сервера або при проходженні запиту через кілька маршрутизаторів або шлюзів, збільшення цього значення може підвищити продуктивність.

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

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

FILES ~ # ping -s 32768 archiv PING archiv.DOMAIN.local (10.0.0.6) 32768(32796) bytes of data. 32776 bytes від archiv.domain.local (10.0.0.6): icmp_req=1 ttl=64 time=0.931 ms 32776 bytes від archiv.domain.local (10.0.0.6): icmp_req=2 t0=2 t0= від archiv.domain.local (10.0.0.6): icmp_req=3 ttl=64 time=1.03 ms 32776 bytes від archiv.domain.local (10.0.0.6): icmp_req=4 ttl=64 time=1.00 .domain.local (10.0.0.6): icmp_req=5 ttl=64 time=1.08 ms ^C --- archiv.DOMAIN.local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rt min/avg/max/mdev = 0.931/1.002/1.083/0.061 ms

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

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

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

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

  • бажано попередньо розмонтувати всі ресурси на клієнтах
  • зупинити та заборонити запуск rpcidmapd, якщо не планується використання NFSv4: chkconfig --level 345 rpcidmapd off service rpcidmapd stop
  • якщо потрібно, то дозволити запуск сервісів portmap, nfs і nfslock: chkconfig --levels 345 portmap/rpcbind on chkconfig --levels 345 nfs on chkconfig --levels 345 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
  • відкрити порти в
    • для 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 до порту 4000 (для старих систем /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 для користувача 99 з gid 99 /files 192.168.0.100(rw,sync,all_squash,anongid=9 ) # Доступ на читання та запис для клієнта на 192.168.0.100, з доступом rw для користувача 99 з gid 99 /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99)))

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

man mount
man exports
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/nfs_perf.htm - продуктивність NFS від IBM.

З повагою, Mc.Sim!

Network File System (NFS ) — це мережна файлова система, що дозволяє користувачам звертатися до файлів і каталогів, розміщених на віддалених комп'ютерах, начебто ці файли та каталоги були локальними. Головною перевагою такої системи є те, що окремо взяті робочі станції можуть використовувати менше власного дискового простору, оскільки дані, що спільно використовуються, зберігаються на окремій машині і доступні для інших машин в мережі. NFS – це клієнт-серверний додаток. Тобто. в системі користувача має бути встановлений NFS-клієнт, а на комп'ютерах, які надають свій дисковий простір - NFS-сервер. Тут я хочу показати, як просто встановити та налаштувати ці програми в [K]Ubuntu Linux. ( Вся інформація розрахована для новачка в Linux. Якщо ви мали досвід встановлення NFS в Linux - нічого нового, можливо, ви тут не знайдете. Метою статті є показати як легко це може бути реалізовано.)


Встановлення та налаштування NFS-сервера.

Встановлюємо NFS-сервер:

$sudo apt-get install nfs-kernel-server nfs-common portmap

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


$sudo vi /etc/exports

У наведеному нижче прикладі я виділив директорію /data (директорія з даними на сервері) у спільне користування всім комп'ютерам з IP - 192.168.1.1 - 192.168.1.255 з правами читання та запису:


/data 192.168.1.1/24(rw,no_root_squash,async)

Або ще приклад:

/home/serhiy/ 192.168.1.34(ro,async)

домашня директорія користувача serhiy стала доступною в режимі читання тільки для комп'ютера з IP 192.168.1.34. Інші комп'ютери мережі до цього розділу доступу не мають.
/files *(ro,sync) # Лише читання для всіх access to anyone
/files 192.168.0.2(rw,sync) # Читання та запис для клієнта з IP 192.168.0.2
/files 192.168.1.1/24(rw,sync) # Читання та запис для всіх клієнтів з 192.168.1.1 до 192.168.1.255

Щоб зміни набули чинності без перезапуску демона, виконайте команду:

#exportfs -arv

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

Наприклад, щоб встановити права користувача "nobody" у групі "nobody", ви можете зробити таке:

; Доступ на читання та запис для клієнта на 192.168.0.100, з доступом rw для користувача 99 з gid 99
/files 192.168.0.100(rw, sync, all_squash, anonuid = 99, anongid = 99))

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

Chown -R nobody.nobody /files

/etc/hosts.allow

Щоб дозволити доступ до мережі до nfs сервера для IP 192.168.0.1, вам потрібно додати наступні рядки в /etc/hosts.allow.

Portmap: 192.168.0.2
lockd: 192.168.0.2
rquotad: 192.168.0.2
mountd: 192.168.0.2
statd: 192.168.0.2

Щоб усі машини могли мати доступ, напишіть у файл /etc/hosts.allow такі рядки:

Portmap: ALL
lockd: ALL
rquotad: ALL
mountd: ALL
statd: ALL
Демони

Для запуску nfs сервера вам потрібно запустити кілька демонів:

#/etc/rc.d/portmap start
#/etc/rc.d/nfslock start
#/etc/rc.d/nfsd start

Ви можете додати ці демони до списку /etc/rc.conf, щоб вони запускалися при завантаженні системи.

Опції:
ro - права лише читання. Можна не вказувати, оскільки вона встановлена ​​за замовчуванням.
rw – дає клієнтам право на запис.
no_root_squash - за замовчуванням користувач root на клієнтській машині не матиме доступу до директорії сервера, що розділяється. Цією опцією ми знімаємо це обмеження. З метою безпеки цього краще не робити.
noaccess – забороняє доступ до зазначеної директорії. Може бути корисною, якщо перед цим ви задали доступ всім користувачам мережі до певної директорії, і тепер хочете обмежити доступ до піддиректорії лише деяким користувачам.
all_squash : всі користувачі системи, що експортується, використовують nobody"s UID/GID;
anonuid , anongid : користувач nobodyвикористовує UID/GID, що надається цими опціями.
Про інші опція можна почитати.


Тепер потрібно перезапустити nfs-kernel-server:

$sudo /etc/init.d/nfs-kernel-server restart

Якщо після цього ви захочете змінити щось у файлі /etc/exports, то для того, щоб зміни набули чинності, достатньо запустити наступну команду:


$sudo exportfs -a

Всі. NFS-сервер встановлено та налаштовано. Можна перейти до налаштування NFS клієнта.

Встановлення та налаштування NFS-клієнта.

Встановлення:

$sudo apt-get install portmap nfs-common

Монтування:

Створюємо точку монтування. Допустимо, це буде папка у вашій домашній директорії з назвою data:


$cd ~
$mkdir data

Монтувати можна двома способами - щоразу вручну або прописавши опції монтування файл /etc/fstab. Мені більше подобається другий спосіб:


$sudo vi /etc/fstab
Файлові системи NFS можуть бути додані у файл /etc/fstab так само, як і локальні, але є деякі відмінності: тип файлової системи повинен бути nfs і значення dump і fsck order (останні два записи в рядку) повинні дорівнювати 0.

і наприкінці дописуємо наступний рядок:

192.168.1.1:/data ~/data nfs rw,hard,intr 0 0

Замість 192.168.1.1:/data впишіть IP або ім'я сервера та шлях до директорії спільного користування.

Опції монтажу можна змінити.

Записавши та зберігши зміни, можна монтувати:

$sudo mount ~/data

Якщо все пройшло успішно, то набравши у терміналі

$cd ~/data
$ls

ви побачите вміст папки /data, що знаходиться на сервері NFS. Можете перевірити швидкість роботи та запустити, наприклад, фільм із цього розділу.

Монтування віддалених директорій

Монтування віддалених каталогів відбувається так само, як і локальних (припустимо, що точка монтування /mnt/home існує):

#mount 192.168.0.1:/home /mnt/home

Відмонтувати можна так само, як і локальний каталог:

#umount /mnt/home

soft або hard монтування

nfs клієнт може обробляти збої сервера у роботі. Є дві опції монтування: hard та soft.

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

Програма, яка здійснює доступ до файлу, повисне при смерті сервера. Процес не може бути перерваний або вбитий (тільки "sure kill"), доки ви не вкажете опцію intr. Коли сервер NFS повернеться до роботи, програма продовжить роботу з того місця, де зупинилася. Розробники NFS рекомендують використання опцій hard,intr з усіма вмонтовані файлові системи NFS.


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

Кожен знає, що в UNIX-системах файлова система логічно є набір фізичних файлових систем, підключених до однієї точки. Одна з основних принад такої організації, на мій погляд, полягає в можливості динамічно модифікувати структуру існуючої файлової системи. Також, завдяки зусиллям розробників, ми на сьогоднішній день маємо можливість підключити ФС практично будь-якого типу та будь-яким зручним способом. Говорячи «спосібом», перш за все хочу підкреслити можливість роботи ядра ОС з файловими системами у вигляді мережевих з'єднань.

Безліч мережевих протоколівнадають нам можливість роботи з віддаленими файлами, будь то FTP, SMB, Telnet або SSH. Завдяки здібності ядра, зрештою, не залежати від типу ФС, що підключається, ми маємо можливість за допомогою програми mount підключати що завгодно і як завгодно.

Сьогодні мені хочеться розповісти про NFS - Network File System. Ця технологія дозволяє підключати окремі точки ФС на віддаленому комп'ютерідо файлової системи локального комп'ютера. Сам протокол NFS дозволяє виконувати операції з файлами досить швидко, безпечно та надійно. А що нам ще потрібне? :-)

Що потрібно для того, щоб це працювало

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

Встановлення

Для запуску сервера NFS в моїй Ubuntu 7.10 - Gutsy Gibbon знадобилося встановити пакети nfs-common і nfs-kernel-server. Якщо ж потрібний тільки клієнт NFS, то nfs-kernel-server не потрібно встановлювати.

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

Після того, як всі пакети успішно встановлені, необхідно перевірити, чи запущено демон NFS:

/etc/init.d/nfs-kernel-server status

Якщо демон не запущено, його потрібно запустити командою

/etc/init.d/nfs-kernel-server start

Після того, як все успішно запустилося, можна розпочати експорт файлової системи. Сам процес дуже простий і займає мінімум часу.

Основний файл конфігурації NFS-сервера розташовується в /etc/exports і має такий формат:

Directory machine1(option11,option12) machine2(option21,option22)

directory- Абсолютний шлях до каталогу ФС сервера, до якого потрібно дати доступ

machineX— DNS-ім'я або IP-адреса клієнтського комп'ютера, з якого дозволяється доступ

optionXX— параметри експорту ФС, які найчастіше використовуються з них:

  • ro— доступ до файлів дозволяється лише для читання
  • rw— доступ надається на читання/запис
  • no_root_squash— за замовчуванням, якщо ви підключаєтеся до ресурсу NFS від імені root, сервера, безпеки заради, на своїй стороні буде звертатися до файлів від імені користувача nobody. Однак, якщо включити цю опцію, то звернення до файлів на стороні сервера буде здійснюватись від імені root. Акуратніше з цією опцією.
  • no_subtree_check— за замовчуванням, якщо ви на сервері експортуєте не весь розділ, а лише частину ФС, демон перевірятиме, чи є файл, який запрошений фізично розміщений на тому ж розділі, чи ні. У випадку, якщо ви експортуєте весь розділ або точка підключення ФС, що експортується, не зачіпає файли з інших фізичних томів, то можна включити цю опцію. Це дасть вам збільшення швидкості роботи сервера.
  • sync— увімкніть цю опцію, якщо є ймовірність раптового обриву зв'язку або відключення живлення сервера. Якщо ця опція не увімкнена, то дуже підвищується ризик втрати даних при раптовій зупинці сервера NFS.

Отже, скажімо, нам потрібно дати доступ комп'ютера ashep-desktop до каталогу /var/backups комп'ютера ashep-laptop. Доступ до каталогу потрібний для копіювання резервних копійфайлів із ashep-desktop. У мене файл вийшов наступним:

/var/backups ashep-desktop(rw,no_subtree_check,sync)

Після додавання рядка в /etc/exports необхідно перезапустити сервер NFS для набрання чинності.

/etc/init.d/nfs-kernel-server restart

От і все. Можна розпочинати підключення експортованої ФС на клієнтському комп'ютері.

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

На клієнтській стороні віддалена файлова система монтується так само, як і решта — командою mount. Також ніхто не забороняє вам використовувати /etc/fstab у випадку, якщо підключати ФС потрібно автоматично при завантаженні ОС. Отже, варіант з mount виглядатиме так:

Mount -t nfs ashep-laptop:/var/backups/ /mnt/ashep-laptop/backups/

Якщо все пройшло успішно і вам необхідно виконувати підключення до віддаленої ФС автоматично при завантаженні - просто додаємо рядок /etc/fstab:

Ashep-laptop:/var/backups /mnt/ashep-laptop/backups nfs auto 0 0

Що ще

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

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на даний момент, якщо цікаво, можете прочитати гід про те. Залишайте свої