завдання NFS
Мережева файлова система (Network File System - NFS) служить для забезпечення доступу комп'ютерів мережі до загальних каталогах на сервері. Централізоване зберігання файлів на сервері полегшує організацію роботи у великій мережі, особливо там, де один і той же користувач може працювати в різний час на різних комп'ютерах. За допомогою файлового сервера вирішується відразу кілька завдань:
опис NFS
Служба NFS дозволяє серверу забезпечити розподілений доступ до вказаних каталогах його локальної файлової системи, а клієнту - монтувати ці каталоги так само, як якщо б вони були локальними каталогами клієнта.
версії NFS
NFS була розроблена компанією Sun Microsystems і виявилася настільки вдалою, що її реалізації були втілені різними компаніями майже для всіх операційних систем. Існує кілька принципово різних реалізацій NFS. Досить поширена версія NFS 2.0, хоча вже в Solaris 2.5 була введена NFS 3.0. У наступних версіях Solaris, включаючи Solaris 9, в NFS були внесені суттєві доповнення, але сам протокол залишився сумісним з реалізаціяім NFS 3.0 в інших системах. Починаючи з NFS 3.0, підтримується передача пакетів за допомогою TCP і UDP, раніше підтримувався тільки UDP.
Будьте уважні! У мережі слід використовувати клієнтів і сервери NFS однієї і тієї ж версії. NFS 2.0 можна зустріти в старих системах, наприклад, в HP-UX 10.0. Спільна робота систем, що використовують різні версії NFS, небажана.
Сумісність NFS та інших служб поділюваних каталогів
NFS за змістом і по організації роботи схожа на колективні каталоги (shared folders) в системах Windows, але в цих службах використовуються абсолютно різні протоколи роботи і між собою вони не сумісні. Однак, існує кілька програмних продуктів, які встановлюють підтримку NFS в системах Windows, тому застосування NFS в мережі з різними операційними системами не викликає особливих проблем, треба тільки пам'ятати про необхідність використовувати однакові версії NFS.
Служба NFS передбачає роботу моделі клієнт-сервер, причому на комп'ютерах-клієнтах і комп'ютерах-серверах запускаються різні програми для забезпечення доступу до загальних каталогах на сервері.
Оскільки комп'ютери на робочих місцях співробітників в Росії зазвичай управляються Windows-системами, як файлових серверів часто використовуються також Windows-системи. Однак, нерідко виникає бажання встановити UNIX на файл-сервер, щоб підвищити надійність, скоротити витрати на обладнання або використовувати цей же сервер для ряду інших корпоративних потреб: веб-сервера, сервера баз даних і т.п. Щоб не встановлювати додаткове ПЗ для підтримки NFS в такому випадку, досить встановити пакет samba на UNIX-машину. Він дозволить їй "прикинутися" Windows NT сервером так, щоб всі клієнтські комп'ютери сприймали його як самий звичайний файл-сервер або принт-сервер Windows-мережі. Пакет samba вміє забезпечує підтримку "рідного" для Windows-мереж протоколу SMB.
У тих випадках, коли в мережі працюють кілька UNIX-комп'ютерів і їм потрібно звертатися до одного файл-сервера, має сенс використовувати механізм NFS (network file system).
NFS не надто стійкий до збоїв мережі, він вимагає її безперебійної роботи і передбачає швидке з'єднання між клієнтом і сервером. Застосування NFS для монтування файлових систем поза локальної мережі, наприклад, через Інтернет, технічно можливо, але не дуже раціонально і небезпечно.
Термінологія NFS
Після настройки NFS-сервера UNIX-комп'ютер буде надавати доступ зовнішнім користувачам до деяких каталогах своєї файлової системи. Таке надання доступу називається "експортом": кажуть, що система експортує свої каталоги. Як саме каталоги будуть експортуватися, визначається списком, який задає системний адміністратор. У більшості систем UNIX цей список міститься в файлі / etc / exports. але в Solaris він знаходиться в іншому файлі - / etc / dfs / dfstab.
NFS працює за допомогою механізму віддаленого виклику процедур (RPC - Remote Procedure Call).
Що таке RPC
Ідеологія RPC дуже проста і приваблива для програміста. Як зазвичай працює мережевий додаток? Воно випливає якомусь протоколу (наприклад, HTTP): формує пакет із запитом, викликає системну функцію встановлення з'єднання, потім функцію відправки пакета, потім чекає відповідного пакета і викликає функцію закриття з'єднання. Це означає, що вся робота з мережею є турботою програміста, який пише додаток: він повинен пам'ятати про виклик функцій мережевого API системи, думати про дії в разі збоїв мережі.
RPC передбачає інший спосіб обміну даними між клієнтом і сервером. З точки зору програміста, додаток клієнта, що працює за допомогою RPC, викликає функцію на сервері, вона виконується і повертає результат. Пересилання запрошення на виконання функції через мережу і повернення результатів від сервера клієнту відбувається непомітно для додатка, тому останнє не повинно турбуватися ні про збої мережі, ні про деталі реалізації транспортного протоколу.
Для того, щоб забезпечити прозорість пересилки даних через мережу, придумана двоступенева процедура. На сервері будь-який додаток, яке хоче надавати свій сервіс через RPC, реєструється в програмі, яка називається транслятором портів (port mapper). Функція цієї програми - встановлювати відповідність між номером процедури RPC, яку запросив клієнт, і номером TCP або UDP порту, на якому додаток сервера чекає запитів. Взагалі кажучи, RPC може працювати не тільки з TCP або UDP, в Solaris якраз реалізована робота на базі механізму TI (Transport-Independent), тому в Solaris транслятор портів називається rpcbind. а не portmap. як в Linux або FreeBSD.
Додаток, який реєструється у транслятора портів, повідомляє йому номер програми, номер версії та номера процедур, які можуть оброблятися даною програмою. Ці процедури будуть згодом викликатися клієнтом за номером. Крім цього, додаток повідомляє номери портів TCP і UDP, які будуть використовуватися для прийому запитів на виконання процедур.
Клієнт, який бажає викликати виконання процедури на сервер, спочатку відправляє запит транслятора портів на сервер, щоб дізнатися, на який TCP або UDP порт треба відправити запит. Транслятор портів запускається при старті системи і завжди працює на стандартному порту 111. Отримавши відповідь від нього, клієнт відправляє запит на той порт, який відповідає необхідному додатком. Наприклад, сервер NFS працює на порту 2049.
Процедура монтування загального каталогу через NFS
Перш ніж ми перейдемо до опису налаштувань сервера і клієнтів NFS, слід зрозуміти, як здійснюється монтування віддалених файлових систем в принципі.
Клієнт NFS посилає запит на монтування віддаленого комп'ютера, який надає свою файлову систему (зазвичай - деяку її частину) для загального користувача. При цьому говорять, що сервер NFS "експортує" той чи інший каталог (мається на увазі - з підкаталогами). Запит від клієнта NFS потрапляє на обробку демона mountd. Той видає клієнтові NFS спеціальний ключ. Цей ключ є ідентифікатором, який однозначно ідентифікує каталог, змонтований по мережі.
За NFS можна змонтувати як цілі файлові системи, так і окремі каталоги. З міркувань безпеки заборонено монтувати каталоги "через розділ". Це означає, що якщо каталог / var розташований на одному розділі диска, а каталог / var / adm - на іншому, то при монтуванні каталогу / var каталог / var / adm автоматично не змонтований. Якщо потрібно монтувати ті підкаталоги експортованого каталогу, які розташовані в іншій файлової системи (на іншому розділі), слід експортувати їх окремо і вказувати в / etc / dfs / dfstab ще один розділяється каталог - той самий підкаталог з іншого розділу.
Ключ, виданий клієнту при монтуванні і ідентифікує сеанс роботи з даними віддаленим каталогом, зберігається при перезавантаженні NFS-сервера. щоб після відновлення його роботи клієнти, завмерлі в очікуванні, продовжили роботу з віддаленим сервером як ні в чому не бувало. При демонтування і новому монтуванні файлової системи через NFS ключ зазвичай змінюється. На практиці перезавантаження NFS-сервера все-таки може привести до збою в роботі клієнтського додатка, особливо, якщо додаток читає або записує файл в віддалений каталог під час перезавантаження.
Після монтування файлової системи через NFS клієнт посилає серверу запити на передачу і прийом файлів, ці запити обробляє демон nfsd.
Демонтування файлової системи виконується також, як і демонтування будь-який інший файлової системи - командою umount.
Нижче будуть обговорені наступні аспекти настройки служби клієнт-сервер в мережі:
- визначення переліку каталогів на сервері, які повинні бути загальними;
- визначення прав доступу до цих каталогів;
- аутентифікація і призначення прав доступу в NFS;
- настройка сервера NFS, запуск необхідних програм;
- настройка клієнтів NFS, монтування віддалених каталогів.
Налаштування NFS-сервера
Для настройки NFS сервера нам буде потрібно налаштувати як мінімум трьох додатків: rpcbind. mountd і nfsd. Перш за все, створимо файл / etc / dfs / dfstab. в якому опишемо експортовані каталоги; на відміну від інших систем UNIX. Solaris вимагає вказати тут не просто список каталогів з параметрами монтування, а набір команд share. які фактично і запускають експорт каталогів. Таким чином, виходить, що / etc / dfs / dfstab - це скрипт. який виконується для того, щоб зробити загальні каталоги доступними для монтування через мережу.
Для початку слід запустити програму rpcbind. якщо вона ще не запущена. Швидше за все, вона запускається при старті вашої системи, якщо це дійсно Solaris. Ця програма, як ми пам'ятаємо, перетворює номера викликів процедур RPC в номери портів TCP і UDP. При запуску будь-якого RPC-сервера, тобто програми, що працює з протоколом RPC, програма rpcbind отримує від цього RPC-сервера інформацію про те, які номери процедур RPC він має намір обслуговувати і через який порт TCP (UDP) йому слід направляти запити.
Коли клієнт деалет RPC-виклик, спершу відбувається з'ясування необхідного номера порту на машині сервера у rpcbind.
Тому rpcbind повинен бути запущений до того, як буде запущений будь-який з RPC-серверів. При аварійному завершенні rpcbind необхідно спочатку запустити rpcbind. і потім перезапустити всі RPC-сервери.
Для перевірки готовності всіх служб NFS до роботи через rpcbind використовується команда rpcinfo -p:
При запуску системи в многопользовательском режимі 3 rpcbind запускається автоматично, а служби NFS - в разі, якщо існує файл / etc / dfs / dfstab.