Сеткавыя файлавыя сістэмы і Linux

Сеткавая файлавая сістэма - гэта сеткавая абстракцыя па-над звычайнай файлавай сістэмы, якая дазваляе выдаленага кліенту звяртацца да яе праз сетку гэтак жа, як і пры доступе да лакальных файлавых сістэмах. Хоць NFS не з'яўляецца першай сеткавай сістэмай, яна сёння развілася да ўзроўню найбольш функцыянальнай і запатрабаванай сеткавай файлавай сістэмы ў UNIX®. NFS дазваляе арганізаваць сумесны доступ да агульнай файлавай сістэме для мноства карыстальнікаў і забяспечыць цэнтралізацыю дадзеных для мінімізацыі дыскавай прасторы, неабходнага для іх захоўвання.

Гэты артыкул пачынаецца з кароткага агляду гісторыі NFS, а затым пераходзіць да даследавання архітэктуры NFS і шляхоў яе далейшага развіцця.

Да Ратка гісторыя NFS

Першая сеткавая файлавая сістэма называлася FAL (File Access Listener - апрацоўшчык доступу да файлаў) і была распрацавана ў 1976 годзе кампаніяй DEC (Digital Equipment Corporation). Яна з'яўлялася рэалізацыяй пратаколу DAP (Data Access Protocol - пратакол доступу да дадзеных) і ўваходзіла ў пакет пратаколаў DECnet. Як і ў выпадку з TCP / IP, кампанія DEC апублікавала спецыфікацыі сваіх сеткавых пратаколаў, уключаючы пратакол DAP.

NFS была першай сучаснай сеткавай файлавай сістэмай, пабудаванай па-над пратаколу IP. Яе правобразам можна лічыць эксперыментальную файлавую сістэму, распрацаваную ў Sun Microsystems у пачатку 80-х гадоў. Улічваючы папулярнасць гэтага рашэння, пратакол NFS быў прадстаўлены ў якасці спецыфікацыі RFC і пасля развіўся ў NFSv2. NFS хутка зацвердзілася ў якасці стандарту дзякуючы здольнасці ўзаемадзейнічаць з іншымі кліентамі і серверамі.

Пасля стандарт быў абноўлены да версіі NFSv3, вызначанай у RFC 1813. Гэтая версія пратакола была больш маштабуецца, чым папярэднія, і падтрымлівала файлы большага памеру (больш за 2 ГБ), асінхронны запіс і TCP ў якасці транспартнага пратаколу. NFSv3 задала кірунак развіцця файлавых сістэм для глабальных (WAN) сетак. У 2000 годзе ў рамках спецыфікацыі RFC 3010 (перапрацаванай у версіі RFC 3530) NFS была перанесена ў карпаратыўную асяроддзе. Sun прадставіла больш абароненую NFSv4 c падтрымкай захавання стану (stateful) (папярэднія версіі NFS не падтрымлівалі захаванне стану, г.зн. ставіліся да катэгорыі stateless). На бягучы момант апошняй версіяй NFS з'яўляецца версія 4.1, пэўная ў RFC 5661, у якой у пратакол з дапамогай пашырэння pNFS была дададзеная падтрымка паралельнага доступу для размеркаваных сервераў.

Гісторыя развіцця NFS, уключаючы канкрэтныя RFC, якія апісваюць яе версіі, паказаная на малюнку 1.

Гісторыя развіцця NFS, уключаючы канкрэтныя RFC, якія апісваюць яе версіі, паказаная на малюнку 1

Р исунок 1. Гісторыя развіцця NFS

Як ні дзіўна, NFS знаходзіцца ў стадыі распрацоўкі ўжо амаль 30 гадоў. Яна з'яўляецца выключна стабільнай і пераноснай сеткавай файлавай сістэмай з выдатнымі характарыстыкамі маштабаванасці, прадукцыйнасці і якасці абслугоўвання. Ва ўмовах павелічэння хуткасці і зніжэння затрымак пры абмене дадзенымі унутры сеткі NFS працягвае заставацца папулярным спосабам рэалізацыі файлавай сістэмы ўнутры сеткі. Нават у выпадку лакальных сетак віртуалізацыя падахвочвае захоўваць дадзеныя ў сеткі, каб забяспечыць віртуальным машынам дадатковую мабільнасць. NFS таксама падтрымлівае найноўшыя мадэлі арганізацыі вылічальных асяроддзяў, нацэленыя на аптымізацыю віртуальных інфраструктур.

А рхитектура NFS

NFS выкарыстоўвае стандартную архітэктурную мадэль "кліент-сервер" (як паказана на малюнку 2). Сервер адказвае за рэалізацыю файлавай сістэмы сумеснага доступу і сховішчы, да якога падключаюцца кліенты. Кліент рэалізуе карыстацкі інтэрфейс да агульнай файлавай сістэме, змантаванай ўнутры лакальнага файлавага прасторы кліента.

Р исунок 2. Рэалізацыя мадэлі "кліент-сервер" ў архітэктуры NFS

У АС Linux® віртуальны камутатар файлавай сістэмы (virtual file system switch - VFS) дае сродкі для адначасовай падтрымкі на адным хасце некалькіх файлавых сістэм (напрыклад, файлавай сістэмы ISO 9660 на CD-ROM і файлавай сістэмы ext3fs на лакальным цвёрдым дыску). Віртуальны камутатар вызначае, да якога назапашвальніку выконваецца запыт, і, такім чынам, якая файлавая сістэма павінна выкарыстоўвацца для апрацоўкі запыту. Таму NFS валодае такой жа сумяшчальнасцю, як і іншыя файлавыя сістэмы, якія ўжываюцца ў Linux. Адзінае адрозненне NFS складаецца ў тым, што запыты ўводу / высновы замест лакальнай апрацоўкі на хасце могуць быць накіраваны для выканання ў сетку.

VFS вызначае, што атрыманы запыт ставіцца да NFS, і перадае яго ў апрацоўшчык NFS, які знаходзіцца ў ядры. Апрацоўшчык NFS апрацоўвае запыт ўводу / высновы і транслюе яго ў NFS-працэдуру (OPEN, ACCESS, CREATE, READ, CLOSE, REMOVE і г.д.). Гэтыя працэдуры, апісаныя ў асобнай спецыфікацыі RFC, вызначаюць паводзіны пратаколу NFS. Неабходная працэдура выбіраецца ў залежнасці ад запыту і выконваецца з дапамогай тэхналогіі RPC (выклік выдаленай працэдуры). Як можна зразумець па назве, RPC дазваляе ажыццяўляць выклікі працэдур паміж рознымі сістэмамі. RPC-служба злучае NFS-запыт з яго аргументамі і адпраўляе вынік на адпаведны аддалены хост, а затым сочыць за атрыманнем і апрацоўкай адказу, каб вярнуць яго ініцыятару запыту.

Таксама RPC ўключае ў сябе важны ўзровень XDR (external data representation - незалежная прадстаўленне даных), які гарантуе, што ўсе карыстальнікі NFS для аднолькавых тыпаў дадзеных выкарыстаюць адзін і той жа фармат. Калі нейкая платформа адпраўляе запыт, які выкарыстоўваецца ёю тып дадзеных можа адрознівацца ад тыпу дадзеных, якое выкарыстоўваецца на хасце, які апрацоўвае гэты запыт. Тэхналогія XDR бярэ на сябе працу па пераўтварэнні тыпаў у стандартнае ўяўленне (XDR), так што платформы, якія выкарыстоўваюць розныя архітэктуры, могуць ўзаемадзейнічаць і сумесна выкарыстоўваць файлавыя сістэмы. У XDR вызначаны бітавы фармат для такіх тыпаў, як float, і парадак байтаў для такіх тыпаў, як масівы пастаяннай і зменнай даўжыні. Хоць XDR ў асноўным вядомая дзякуючы прымяненню ў NFS, гэта спецыфікацыя можа быць карысная ва ўсіх выпадках, калі прыходзіцца працаваць у адной асяроддзі з рознымі архітэктурамі.

Пасля таго як XDR перавядзе дадзеныя ў стандартнае ўяўленне, запыт перадаецца па сетцы з дапамогай пэўнага транспартнага пратаколу. У ранніх рэалізацыях NFS выкарыстоўваўся пратакол UDP, але сёння для забеспячэння большай надзейнасці ўжываецца пратакол TCP.

На баку NFS-сервера ўжываецца падобны алгарытм. Запыт падымаецца па сеткаваму стэку праз ўзровень RPC / XDR (для пераўтварэння тыпаў дадзеных у адпаведнасці з архітэктурай сервера) і трапляе ў NFS-сервер, які адказвае за апрацоўку запыту. Там запыт перадаецца NFS-дэману для вызначэння мэтавай файлавай сістэмы, якой ён адрасаваны, а затым зноў паступае ў VFS для звароту да гэтай файлавай сістэме на лакальным дыску. Цалкам схема гэтага працэсу прыведзеная на малюнку 3. Пры гэтым лакальная файлавая сістэма сервера - гэта стандартная для Linux файлавая сістэма, напрыклад, ext4fs. Па сутнасці NFS - гэта не файлавая сістэма ў традыцыйным разуменні гэтага тэрміна, а пратакол аддаленага доступу да файлавых сістэм.

Па сутнасці NFS - гэта не файлавая сістэма ў традыцыйным разуменні гэтага тэрміна, а пратакол аддаленага доступу да файлавых сістэм

Р исунок 3. Схема ўзаемадзеяння паміж NFS-кліентам і NFS-серверам

Для сетак з вялікім часам чакання ў NFSv4 прапануецца спецыяльная складовая працэдура (compound procedure). Гэтая працэдура дазваляе змясціць некалькі RPC-выклікаў ўнутр аднаго запыту, каб мінімізаваць выдаткі на перадачу запытаў па сетцы. Таксама ў гэтай працэдуры рэалізаваны механізм callback-функцый для атрымання адказаў.

У пачатак

П ротокол NFS

Калі кліент пачынае працаваць з NFS, першым дзеяннем выконваецца аперацыя mount, якая ўяўляе сабой мантаванне выдаленай файлавай сістэмы ў прастору лакальнай файлавай сістэмы. Гэты працэс пачынаецца з выкліку працэдуры mount (адной з сістэмных функцый Linux), які праз VFS перанакіроўваецца ў NFS-кампанент. Затым з дапамогай RPC-выкліку функцыі get_port на выдаленым серверы вызначаецца нумар порта, які будзе выкарыстоўвацца для мантавання, і кліент праз RPC адпраўляе запыт на мантаванне. Гэты запыт на боку сервера апрацоўваецца спецыяльным дэманам rpc.mountd, якія адказваюць за пратакол мантавання (mount protocol). Дэман правярае, што запытаная кліентам файлавая сістэма маецца ў спісе сістэм, даступных на гэтым сэрвэры. Калі запытаная сістэма існуе і кліент мае да яе доступ, то ў адказе RPC-працэдуры mount паказваецца дэскрыптар файлавай сістэмы. Кліент захоўвае ў сябе інфармацыю аб лакальнай і выдаленай кропках мантавання і атрымлівае магчымасць ажыццяўляць запыты ўводу / высновы. Пратакол мантавання не з'яўляецца бездакорным з пункту гледжання бяспекі, таму ў NFSv4 замест яго выкарыстоўваюцца ўнутраныя RPC-выклікі, якія таксама могуць кіраваць кропкамі мантавання.

Для счытвання файла яго неабходна спачатку адкрыць. У RPC няма працэдуры OPEN, замест гэтага кліент проста правярае, што названыя файл і каталог існуюць у змантаванай файлавай сістэме. Кліент пачынае з выканання RPC-запыту GETATTR да каталога, у адказ на які вяртаюцца атрыбуты каталога або індыкатар, што каталог не існуе. Далей, каб праверыць наяўнасць файла, кліент выконвае RPC-запыт LOOKUP. Калі файл існуе, для яго выконваецца RPC-запыт GETATTR, каб даведацца атрыбуты файла. Выкарыстоўваючы інфармацыю, атрыманую ў выніку паспяховых выклікаў LOOKUP і GETATTR, кліент стварае дэскрыптар файла, які прадастаўляецца карыстачу для выканання будучых запытаў.

Пасля таго як файл ідэнтыфікаваны ў выдаленай файлавай сістэме, кліент можа выконваць RPC-запыты тыпу READ. Гэты запыт складаецца з дэскрыптара файла, стану, зрушэння і колькасці байт, якое варта лічыць. Кліент выкарыстоўвае стан (state), каб вызначыць ці можа аперацыя быць выканана ў дадзены момант, г.зн. ня заблякаваны Ці файл. Зрушэнне (offset) паказвае, з якой пазіцыі варта пачаць чытанне, а лічыльнік байт (count) вызначае, колькі байт неабходна лічыць. У выніку RPC-выкліку READ сервер не заўсёды вяртае столькі байт, колькі было запытана, але разам з вяртаеце дадзенымі заўсёды перадае, колькі байт было адпраўлена кліенту.

І нновации ў NFS

Найбольшую цікавасць прадстаўляюць дзве апошнія версіі NFS - 4 і 4.1, на прыкладзе якіх можна вывучыць найбольш важныя аспекты эвалюцыі тэхналогіі NFS.

Да з'яўлення NFSv4 для выканання такіх задач па кіраванні файламі, як мантаванне, блакаванне і г.д. існавалі адмысловыя дадатковыя пратаколы. У NFSv4 працэс кіравання файламі быў спрошчаны да аднаго пратакола; акрамя таго, пачынаючы з гэтай версіі UDP больш не выкарыстоўваецца ў якасці транспартнага пратаколу. NFSv4 ўключае падтрымку UNIX і Windows®-семантыкі доступу да файлаў, што дазваляе NFS "натуральным" спосабам інтэгравацца ў іншыя аперацыйныя сістэмы.

У NFSv4.1 для большай маштабаванасці і прадукцыйнасці была ўведзена канцэпцыя паралельнай NFS (parallel NFS - pNFS). Каб забяспечыць большы ўзровень маштабаванасці, у NFSv4.1 рэалізаваная архітэктура, у якой дадзеныя і метададзеныя (разметка) размяркоўваюцца па прыладам аналагічна таму, як гэта робіцца ў кластарных файлавых сістэмах. Як паказана на малюнку 4 , PNFS падзяляе экасістэму на тры складнікі: кліент, сервер і сховішча. Пры гэтым з'яўляюцца два канала: адзін для перадачы дадзеных, а іншы для перадачы каманд кіравання. pNFS аддзяляе дадзеныя ад апісваюць іх метададзеных, забяспечваючы двухканальную архітэктуру. Калі кліент хоча атрымаць доступ да файла, сервер адпраўляе яму метададзеныя з "разметкай". У метададзеных змяшчаецца інфармацыя аб размяшчэнні файла на запамінальных прыладах. Атрымаўшы гэтую інфармацыю, кліент можа звяртацца наўпрост да сховішча без неабходнасці ўзаемадзейнічаць з серверам, што спрыяе павышэнню маштабаванасці і прадукцыйнасці. Калі кліент завяршае працу з файлам, ён пацвярджае змены, унесеныя ў файл і яго "падзелы". Пры неабходнасці сервер можа запытаць у кліента метададзеныя з разметкай.

З з'яўленнем pNFS ў пратакол NFS было дададзена некалькі новых аперацый для падтрымкі такога механізму. Метад LayoutGet выкарыстоўваецца для атрымання метададзеных з сервера, метад LayoutReturn "вызваляе" метададзеныя, "захопленыя" кліентам, а метад LayoutCommit загружае "падзелы", атрыманую ад кліента, у сховішча, так што яна становіцца даступнай іншым карыстальнікам. Сервер можа адклікаць метададзеныя ў кліента з дапамогай метаду LayoutRecall. Метададзеныя з "разметкай" размяркоўваюцца паміж некалькімі запамінальнымі прыладамі, каб забяспечыць паралельны доступ і высокую прадукцыйнасць.

Р исунок 4. Архітэктура pNFS ў NFS версіі 4.1

Дадзеныя і метададзеныя захоўваюцца на запамінальных прыладах. Кліенты могуць выконваць прамыя запыты ўводу / вываду на аснове атрыманай разметкі, а сервер NFSv4.1 захоўвае метададзеныя і кіруе імі. Сама па сабе гэтая функцыянальнасць і не новая, але ў pNFS была дададзеная падтрымка розных метадаў доступу да запамінальнай прыладам. Сёння pNFS падтрымлівае выкарыстанне блокавых пратаколаў (Fibre Channel), аб'ектных пратаколаў і ўласна NFS (нават не ў pNFS-форме).

Развіццё NFS працягваецца, і ў верасні 2010 года былі апублікаваныя патрабаванні да NFSv4.2. Некаторыя з новаўвядзенняў звязаны з назіральнай міграцыяй тэхналогій захоўвання дадзеных у бок віртуалізацыі. Напрыклад, у віртуальных асяроддзях з гіпервізара вельмі верагодна ўзнікненне дублявання дадзеных (некалькі АС выконваюць чытанне / запіс і кэшаванне адных і тых жа дадзеных). У сувязі з гэтым пажадана, каб сістэма захоўвання дадзеных у цэлым разумела, дзе адбываецца дубляванне. Такі падыход дапаможа зэканоміць прастору ў кэшы кліента і агульную ёмістасць сістэмы захоўвання. У NFSv4.2 для вырашэння гэтай праблемы прапануецца выкарыстоўваць "карту блокаў, якія знаходзяцца ў сумесным доступе" (block map of shared blocks). Паколькі сучасныя сістэмы захоўвання ўсё часцей абсталёўваюцца уласнымі ўнутранымі вылічальнымі магутнасцямі, ўводзіцца капіяванне на боку сервера, якое дазваляе знізіць нагрузку пры капіяванні дадзеных ва ўнутранай сеткі, калі гэта можна эфектыўна рабіць на самай запамінальнай прыладзе. Іншыя інавацыі ўключаюць у сябе субфайловое кэшаванне для флэш-памяці і рэкамендацыі па наладзе ўводу-вываду на баку кліента (напрыклад, з выкарыстаннем mapadvise).

А льтернативы NFS

Хоць NFS - самая папулярная сеткавая файлавая сістэма ў UNIX і Linux, акрамя яе існуюць і іншыя сеткавыя файлавыя сістэмы. На платформе Windows® часцей за ўсё ўжываецца SMB, таксама вядомая як CIFS; пры гэтым АС Windows таксама падтрымлівае NFS, роўна як і Linux падтрымлівае SMB.

Адна з найноўшых размеркаваных файлавых сістэм, падтрымоўваных у Linux - Ceph - першапачаткова спраектаваны як ад збояў POSIX-сумяшчальная файлавая сістэма. Дадатковую інфармацыю аб Ceph можна знайсці ў раздзеле рэсурсы .

Варта таксама згадаць файлавыя сістэмы OpenAFS (Open Source-версія размеркаванай файлавай сістэмы Andrew, распрацаванай ва ўніверсітэце Карнегі-Меллона і карпарацыі IBM), GlusterFS (размеркаваная файлавая сістэма агульнага прызначэння для арганізацыі маштабуюцца сховішчаў дадзеных) і Lustre (сеткавая файлавая сістэма з масавым паралелізмам для кластарных рашэнняў). Усе гэтыя сістэмы з адчыненым зыходным кодам можна выкарыстоўваць для пабудовы размеркаваных сховішчаў.

З аключение

Развіццё файлавай сістэмы NFS працягваецца. Падобна АС Linux, якая падыходзіць для падтрымкі і бюджэтных, і ўбудавальных, і высокапрадукцыйных рашэнняў, NFS прадастаўляе архітэктуру маштабуюцца рашэнняў для захоўвання дадзеных, падыходных як асобным карыстальнікам, так і арганізацыям. Калі паглядзець на шлях, ужо пройдзены NFS, і перспектывы яе далейшага развіцця, становіцца зразумела, што гэта файлавая сістэма будзе працягваць змяняць нашы погляды на тое, як рэалізуюцца і выкарыстоўваюцца тэхналогіі захоўвання файлаў.

Р есурсы

  • Network file systems and Linux (http://www.ibm.com/developerworks/linux/library/l-network-filesystems/index.html?S_TACT=105AGX99&S_CMP=CP) : Арыгінал артыкула (EN).
  • NFS - гэта стандарт спецыфікацыі пераноснай і мультиплатформенной сеткавай файлавай сістэмы. NFS дакументавана ў некалькіх спецыфікацыях, уключаючы першую рэалізацыю NFSv2 , NFSv3 , NFSv4 і найноўшую версію NFSv4.1 . Аб напрамку далейшага развіцця NFS можна даведацца ў патрабаваннях да NFS v4.2 .
  • Yet Another NFS (YANFS) - праект кампаніі Sun, раней зваўся WebNFS . Файлавая сістэма YANFS - гэта Java ™ рэалізацыя NFSv3 і RPC / XDR для арганізацыі доступу да NFS з Java-прыкладанняў.
  • XDR - гэта стандарт кадавання даных, які дазваляе хастам з рознай архітэктурай мець зносіны па сетцы з выкарыстаннем стандартных тыпаў дадзеных.
  • Linux падтрымлівае розныя файлавыя сістэмы для мноства запамінальных прылад. Гэтая магчымасць забяспечваецца з дапамогай інтэграцыі розных файлавых сістэм, драйвераў для запамінальных прылад і VFS. Дадатковую інфармацыю аб VFS можна знайсці ў артыкуле " Anatomy of the Linux File System "(DeveloperWorks, Кастрычнік 2007).
  • Акрамя NFS, існуюць і іншыя спосабы пабудаваць сеткавае файлавае сховішча. Таксама можна выкарыстоўваць файлавыя сістэмы OpenAFS , GlusterFS , Lustre і Ceph . Дадатковую інфармацыю аб Ceph можна знайсці ў артыкуле Ceph: A Linux petabyte-scale distributed file system "(DeveloperWorks, травень 2010 г.).

Html?