Журнал LinuxFormat - перейти на главную

LXF164: ZFS on Linux: Вопросы истории

Материал из Linuxformat
Перейти к: навигация, поиск


Содержание

ZFS on Linux: Во­про­сы ис­то­рии

Алек­сей Фе­дор­чук рас­ска­зы­ва­ет о перспективной системе размещения данных и предпосылках ее возникновения.

Эта ста­тья по­свя­ще­на ис­то­рии ZFS – универ­саль­ной сис­те­мы раз­ме­щения дан­ных, ин­тег­ри­рую­щей в се­бе соб­ст­вен­но фай­ло­вую сис­те­му и тех­но­ло­гию управ­ления дис­ко­вы­ми мас­си­ва­ми и ло­ги­че­­ски­­ми то­ма­ми.

Об­щее вве­дение

Од­на из главней­ших за­дач при ра­бо­те на ком­пь­ю­те­ре – манипу­ли­ро­вание дан­ны­ми: соз­дание, мо­ди­фи­ка­ция, ко­пи­ро­вание, пе­ре­ме­щение и так да­лее. И тут пер­вое – это ор­ганиза­ция их раз­ме­щения. Это по­ня­тие вклю­ча­ет ши­ро­кий круг ча­ст­ных во­про­сов: схе­мы дис­ко­вой раз­мет­ки, управ­ления дис­ко­вы­ми мас­си­ва­ми и ло­ги­че­­ски­­ми то­ма­ми, фай­ло­вые сис­те­мы и их мон­ти­ро­вание в фай­ло­вую ие­рар­хию. Они тес­но свя­за­ны ме­ж­ду со­бой, но тра­ди­ци­он­но ре­ша­ют­ся ка­ж­дая с по­мо­щью соб­ст­вен­но­го ин­ст­ру­мен­та­рия.

Од­на­ко в по­следние го­ды в Linux’е по­лу­чи­ли рас­про­странение ин­тег­ри­ро­ван­ные сис­те­мы раз­ме­щения дан­ных, объ­е­ди­няю­щие в се­бе и фай­ло­вые сис­те­мы, и за­да­чи управ­ления мас­си­ва­ми и то­ма­ми, и да­же, час­тич­но, за­да­чи раз­мет­ки дис­ков. Та­кие сис­те­мы, как мы уви­дим из ис­то­ри­че­­ско­­го об­зо­ра, су­ще­ст­во­ва­ли очень дав­но – со вре­мен дои­сто­ри­че­­ско­­го UNIX’а, но бы­ли они про­прие­тар­ны­ми. ZFS же, раз­ра­бо­тан­ная фир­мой Sun для сво­ей ОС Solaris, ныне рас­про­стра­ня­ет­ся сво­бод­но, под ли­цен­зи­ей CDDL. Бла­го­да­ря че­му бы­ла пор­ти­ро­ва­на на FreeBSD, а в по­следние го­ды на­тив­но под­дер­жи­ва­ет­ся и в Linux’е. Имен­но ZFS on Linux и бу­дет ге­роиней на­ше­го ро­ма­на, и не толь­ко в си­лу сво­их несравнен­ных досто­инств.

А во-вто­рых, раз­ви­тие про­ек­та ZFS on Linux бле­стя­ще де­мон­ст­ри­ру­ет тор­же­ст­во ин­женер­но­го ра­зу­ма над юри­ди­че­­ской за­умью. И по­то­му яв­ля­ет со­бой про­сто за­ме­ча­тель­ный ли­те­ра­тур­ный сю­жет, ми­мо ко­то­ро­го не в си­лах прой­ти ни один со­чинитель в жан­ре тех­но­ло­ги­че­­ской но­вел­лы. И на­чать этот сю­жет на­до из­да­ле­ка.

Дис­ко­вая раз­мет­ка

Го­во­рят, что во вре­ме­на да­ле­кие, те­перь поч­ти бы­лин­ные, фай­ло­вых сис­тем не бы­ло: ин­фор­ма­ция на но­си­те­ли за­пи­сы­ва­лась по­бит­но, без вся­кой ор­ганиза­ции в име­но­ван­ные ее на­бо­ры. Впро­чем, та­кой спо­соб за­пи­си дан­ных при­ме­нял­ся и мно­го позднее – на­при­мер, при ре­зерв­ном ко­пи­ро­вании на стрим­мер­ные лен­ты. Мож­но об­хо­дить­ся без фай­ло­вых сис­тем и при за­пи­си на стан­дарт­ные блоч­ные уст­рой­ст­ва – вин­че­сте­ры, SSD, ком­пакт-дис­ки.

Од­на­ко в боль­шин­ст­ве слу­ча­ев дан­ные на но­си­те­лях блоч­но­го ти­па ор­ганизу­ют­ся в ви­де фай­лов, а фай­лы объ­е­ди­ня­ют­ся в фай­ло­вые сис­те­мы – пло­ские, как в древнем DOS’е, дре­во­вид­ные, как во всех UNIX-по­доб­ных опе­ра­ци­он­ках, или, так ска­зать, «мно­го­древ­ные», как в Windows. Ка­ко­вые мо­гут быть соз­да­ны непо­сред­ст­вен­но на но­си­те­ле как raw-уст­рой­ст­ве, но обыч­но на­кла­ды­ва­ют­ся на дис­ко­вые раз­де­лы.

До недавнего вре­мени в Linux’е при­ме­ня­лась раз­мет­ка в MS-DOS-сти­ле, пред­по­ла­гаю­щая воз­мож­ность раз­биения дис­ка на че­ты­ре раз­де­ла, на­зы­вае­мых пер­вич­ны­ми [primary partitions]; один из них мо­жет быть оп­ре­де­лен как рас­ши­рен­ный раз­дел [extended partition], внут­ри ко­то­ро­го по «мат­ре­шеч­но­му» прин­ци­пу мож­но соз­дать ло­ги­че­­ские раз­де­лы, мак­си­маль­ным чис­лом до 63.

Раз­мет­ка в MS-DOS-сти­ле пре­об­ла­да­ет в ди­ст­ри­бу­ти­вах Linux’а и по сей день. Од­на­ко все боль­шее рас­про­странение по­лу­ча­ет раз­мет­ка в GPT-сти­ле. Сре­ди ее пре­иму­ществ – воз­мож­ность соз­дания на дис­ке до 128 аб­со­лют­но рав­но­прав­ных (то есть не раз­де­ляю­щих­ся на фи­зи­че­­ские и ло­ги­че­­ские) раз­де­лов. А в слу­чае ис­поль­зо­вания вин­че­сте­ров «про­дви­ну­то­го» фор­ма­та [Advanced Format] и SSD, раз­мер бло­ков ко­то­рых ра­вен 4 КБ, она обес­пе­чи­ва­ет оп­ти­маль­ное вы­равнивание границ раз­де­лов.

Ис­то­ри­че­­ски сло­жи­лось так, что од­но­му раз­де­лу со­от­вет­ст­во­ва­ла од­на фай­ло­вая сис­те­ма. Со­от­вет­ст­вен­но, и вы­хо­дить за границы несу­ще­го их уст­рой­ст­ва фай­ло­вые сис­те­мы не мог­ли. И ес­ли тре­бо­ва­лось ра­бо­тать бо­лее чем с од­ной фай­ло­вой сис­те­мой на од­ном фи­зи­че­­ском на­ко­пи­те­ле (а в UNIX-по­доб­ных ОС это поч­ти всегда так), то был необ­хо­дим тща­тель­ный рас­чет дис­ко­во­го про­стран­ст­ва для ка­ж­дой из них: ошиб­ки в рас­че­тах влек­ли весь­ма непри­ят­ные по­след­ст­вия, вплоть до необ­хо­ди­мо­сти пе­ре­раз­биения дис­ка и пе­реуста­нов­ки ОС во­об­ще.

Прав­да, дис­ко­вые раз­де­лы мо­гут не толь­ко раз­де­лять­ся, но и объ­е­ди­нять­ся в про­грамм­ные мас­си­вы или в груп­пы то­мов, о ко­то­рых мы сей­час и по­го­во­рим.

Мас­си­вы и ло­ги­че­­ские то­ма

За­да­ча объ­е­динения но­си­те­лей ин­фор­ма­ции осо­бен­но ак­ту­аль­на при ис­поль­зо­вании несколь­ких фи­зи­че­­ских на­ко­пи­те­лей, и осо­бен­но при их до­бав­лении в ра­бо­таю­щую сис­те­му. В эле­мен­тар­ном ис­полнении это де­ла­лось про­сто (по крайней ме­ре, в UNIX-по­доб­ных ОС): вто­рой (но­вый) на­ко­пи­тель про­сто раз­ме­чал­ся по со­от­вет­ст­вую­щей для дан­ной ОС схе­ме, на нем соз­да­ва­лась но­вая фай­ло­вая сис­те­ма оп­ре­де­лен­но­го ти­па, ко­то­рая мон­ти­ро­ва­лась в об­щую фай­ло­во­мую ие­рар­хию. Од­на­ко вы­ход за границы су­ще­ст­вую­ще­го раз­де­ла и дис­ка для фай­ло­вой сис­те­мы был по-прежнему невоз­мо­жен.

Для ре­шения за­да­чи объ­е­динения фи­зи­че­­ских но­си­те­лей в еди­ное ло­ги­че­­ское уст­рой­ст­во и «раз­ма­зы­вания» по ним фай­ло­вых сис­тем тра­ди­ци­он­но ис­поль­зу­ет­ся два основ­ных спо­со­ба: RAID (Redundant Array of Independent Disks – из­бы­точ­ный мас­сив неза­ви­си­мых дис­ков) и LVM (Logical Volume Manager – менед­жер ло­ги­че­­ских то­мов).

RAID’ы су­ще­ст­ву­ют трех ви­дов – ап­па­рат­ные, ква­зи-ап­па­рат­ные (так на­зы­вае­мые Fake RAID) и чис­то про­грамм­ные (Soft RAID). Пер­вые до­ро­ги и на де­ск­то­пах поч­ти не встре­ча­ют­ся; ра­бо­та вто­рых под Linux’ом час­то про­бле­ма­тич­на, так что речь пой­дет в основ­ном о треть­их. Впро­чем, с точ­ки зрения ло­ги­ки это ро­ли поч­ти не иг­ра­ет.

Ло­ги­че­­ски в лю­бом из RAID’ов несколь­ко дис­ков (а в Soft RAID – и дис­ко­вых раз­де­лов) мо­гут про­сто слить­ся во­еди­но (Linear RAID), при за­пи­си на них мо­жет осу­ще­ст­в­лять­ся рас­ще­п­ление дан­ных [stripping], что при­во­дит к уско­рению дис­ко­вых опе­ра­ций (RAID Level 0); на объ­е­динен­ных раз­де­лах мож­но соз­дать раз­лич­ные фор­мы из­бы­точ­но­сти, обес­пе­чи­ваю­щей восста­нов­ление дан­ных при от­ка­зах дис­ков. Из та­ких из­бы­точ­ных мас­си­вов ча­ще все­го ис­поль­зу­ет­ся пол­ное дуб­ли­ро­вание (RAID Level 1, он же mirror) или из­бы­точ­ность за счет кон­троль­ной сум­мы (RAID Level 5). На­конец, воз­мож­но и со­вме­щение стрип­пин­га с дуб­ли­ро­ванием.

RAID лю­бо­го ти­па и уров­ня мо­жет раз­би­вать­ся (и обыч­но раз­би­ва­ет­ся) на раз­де­лы, ко­то­рые уже несут на се­бе фай­ло­вые сис­те­мы. И, та­ким об­ра­зом, по­зво­ля­ют раз­ме­щать их на несколь­ких фи­зи­че­­ских уст­рой­ст­вах. Од­на­ко они не ре­ша­ют вто­рой про­бле­мы раз­ме­щения дан­ных – необ­хо­ди­мо­сти рас­че­та по­треб­но­го для них дис­ко­во­го про­стран­ст­ва и его пе­ре­рас­пре­де­ления при необ­хо­ди­мо­сти.

Этим це­лям слу­жит тех­но­ло­гия LVM, объ­е­ди­няю­щая фи­зи­че­­ские но­си­те­ли в груп­пы ло­ги­че­­ских то­мов, раз­де­ляе­мых на соб­ст­вен­но ло­ги­че­­ские то­ма, ко­то­рые, в свою оче­редь, раз­би­ва­ют­ся на экс­тен­ты – объ­е­динения фи­зи­че­­ских бло­ков дис­ко­вых уст­ройств. Ло­ги­че­­ские то­ма пред­ста­ют пе­ред опе­ра­ци­он­ной сис­те­мой как обыч­ные раз­де­лы, ка­ж­дый из ко­то­рых мо­жет нести свою фай­ло­вую сис­те­му. При этом тех­но­ло­гия LVM да­ет воз­мож­ность при необ­хо­ди­мо­сти пе­ре­рас­пре­де­лять фи­зи­че­­ское про­стран­ст­во но­си­те­лей ме­ж­ду ними по­сред­ст­вом до­бав­ления или от­ня­тия экс­тен­тов на ле­ту, не толь­ко без пе­ре­раз­мет­ки дис­ков, но и без пе­ре­за­пуска сис­те­мы.

Как и RAID Level 0, тех­но­ло­гия LVM мо­жет обес­пе­чить стрип­пинг дан­ных ме­ж­ду фи­зи­че­­ски­­ми то­ма­ми с це­лью по­вы­шения бы­ст­ро­дей­ст­вия фай­ло­вых опе­ра­ций. А в со­че­тании с Soft RAID по­зво­ля­ет и соз­да­вать мас­си­вы с пол­ной (зер­ка­ли­ро­вание) или час­тич­ной (за счет кон­троль­ных сумм) из­бы­точ­но­стью, по­вы­шаю­щей на­деж­ность.

Та­ким об­ра­зом, LVM вы­пол­ня­ет оба по­став­лен­ных усло­вия: слияние дис­ко­во­го про­стран­ст­ва, в том чис­ле и вновь под­клю­чае­мых на­ко­пи­те­лей, и воз­мож­ность его пе­ре­рас­пре­де­ления ме­ж­ду су­ще­ст­вую­щи­ми фай­ло­вы­ми сис­те­ма­ми, да еще и с бо­ну­сом в ка­че­­ст­ве по­вы­шения бы­ст­ро­дей­ст­вия. Ком­би­на­ция же LVM и Soft RAID по­зво­ля­ет и по­вы­сить на­деж­ность. Ка­за­лось бы, че­го еще не хва­та­ет для сча­стья?

А не хва­та­ет для сча­стья про­сто­ты: ес­ли уста­но­вить LVM по­зво­ля­ет ин­стал­ля­тор поч­ти лю­бо­го со­вре­мен­но­го ди­ст­ри­бу­ти­ва, то управ­ление ло­ги­че­­ски­­ми то­ма­ми и по сей день за­да­ча не из са­мых три­ви­аль­ных. Да к то­му же мы за­бы­ли о фай­ло­вых сис­те­мах, без ко­то­рых ни RAID, ни LVM к ис­поль­зо­ванию не при­год­ны. Так что на оче­ре­ди к рас­смот­рению – они.

Фай­ло­вые сис­те­мы

Как из­вест­но еще с со­вет­ских атеи­сти­че­­ских вре­мен, Господь Бог, соз­да­вая че­ло­ве­ка, хо­тел сде­лать его ум­ным, че­ст­ным и пар­тий­ным. Но ока­за­лось, что да­же он, при всем сво­ем все­мо­гу­ще­ст­ве, не смог ему дать боль­ше двух ка­че­ств вме­сте.

Ана­ло­гич­но и с фай­ло­вы­ми сис­те­ма­ми: раз­ра­бот­чи­ки хо­те­ли бы ви­деть их бы­ст­ры­ми, на­деж­ны­ми и про­сты­ми в об­ра­щении. Да­вай­те по­смот­рим, уда­лось ли им пре­взой­ти Госпо­да.

В UNIX-по­доб­ных сис­те­мах тре­бо­вание бы­ст­ро­дей­ст­вия удов­ле­тво­ря­ет­ся, во-пер­вых, оп­ти­ми­зи­ро­ван­ным рас­по­ло­жением ка­та­ло­гов, ме­та­дан­ных и дан­ных фай­лов на фи­зи­че­­ских но­си­те­лях. Но во-вто­рых и глав­ных – кэ­ши­ро­ванием за­пи­си.

Ду­маю, ка­ж­до­го, кто на­чи­нал зна­ком­ст­во с Linux’ом во вре­ме­на без­раз­дель­но­го господ­ства фай­ло­вой сис­те­мы ext2fs, по­ра­жа­ла бы­ст­ро­та вы­полнения всех фай­ло­вых опе­ра­ций, обу­слов­лен­ная их асин­хрон­но­стью – то есть кэ­ши­ро­ванием дан­ных и ме­та­дан­ных. Обо­рот­ная сто­ро­на ме­да­ли – от­каз сис­те­мы по лю­бой при­чине влек за со­бой тяж­кие по­след­ст­вия, вплоть до пол­но­го ее раз­ру­шения. Но и да­же когда до пол­ной ка­та­ст­ро­фы де­ло не до­хо­ди­ло, от­ка­зы (на­при­мер, по пи­танию) вы­зы­ва­ли за со­бой дол­гую и нуд­ную про­це­ду­ру про­вер­ки це­ло­ст­но­сти фай­ло­вой сис­те­мы.

Бы­ли раз­ра­бо­та­ны раз­лич­ные ме­ханиз­мы ре­шения этой про­бле­мы. Од­на­ко основ­ным в Linux ста­ло так на­зы­вае­мое жур­на­ли­ро­вание, когда све­дения о фай­ло­вых опе­ра­ци­ях за­пи­сы­ва­ют­ся в спе­ци­аль­ный файл жур­на­ла до то­го, как эти опе­ра­ции бу­дут фак­ти­че­­ски вы­полнены. Это да­ет воз­мож­ность по­сле лю­бо­го сбоя «от­ка­тить» фай­ло­вую сис­те­му до по­следнего непро­ти­во­ре­чи­во­го со­стояния. Обо­рот­ной сто­ро­ной че­го, как обыч­но, яв­ля­ет­ся снижение бы­ст­ро­дей­ст­вия – раз­лич­ное для от­дель­ных фай­ло­вых сис­тем и ви­дов фай­ло­вых опе­ра­ций.

Прав­да, с точ­ки зрения про­сто­ты ис­поль­зо­вания ни в од­ну из фай­ло­вых сис­тем Linux’а бро­сить ка­мень ру­ка не по­ды­мет­ся: соз­дание и мон­ти­ро­вание их ника­ких труд­но­стей не су­лит. Так что тре­бо­вание «пар­тий­но­сти» вы­пол­ня­ет­ся, по­жа­луй, при всех со­от­но­шениях «ума» и «че­ст­но­сти». Но эта си­туа­ция со­хра­ня­ет­ся, по­ка мы не на­чи­на­ем ком­биниро­вать «ум, че­ст­ность и пар­тий­ность» фай­ло­вых сис­тем с ана­ло­гич­ны­ми ка­че­­ст­ва­ми сис­тем управ­ления RAID’ами или с LVM. В ре­зуль­та­те че­го по­лу­ча­ем:

» ли­бо бы­строе и про­стое ре­шение на осно­ве RAID Level 0, не бле­щу­щее на­деж­но­стью;

» ли­бо на­деж­ное ре­шение без ощу­ти­мой по­те­ри бы­ст­ро­дей­ст­вия на осно­ве од­но­го из RAID с из­бы­точ­но­стью, не яв­ляю­щее­ся, од­на­ко, эта­ло­ном про­сто­ты;

» ли­бо, на­конец, от­но­си­тель­но на­деж­ное и по­тен­ци­аль­но бы­строе ре­шение при ис­поль­зо­вании тех­но­ло­гии LVM – од­на­ко о про­сто­те здесь мож­но за­быть сра­зу.

При­чем все эти ре­шения – мно­го­уровневые. И оче­вид­но, что уд­линение «це­поч­ки» уровней в лю­бом слу­чае при­во­дит к снижению на­деж­но­сти: чем боль­ше в ней звень­ев, тем ве­ро­ятней от­каз всей це­пи.

И тут-то и возника­ет во­прос: а нель­зя ли умень­шить ко­ли­че­­ст­во уровней, сде­лать сис­те­му бо­лее «пло­ской»? И сис­те­мы раз­ме­щения дан­ных, в том чис­ле и ZFS – по­пыт­ка от­ве­та на него.

Из ис­то­рии сис­тем раз­ме­щения

Не в ин­те­ре­сах прав­ды, а ис­ти­ны ра­ди нуж­но за­ме­тить, что ZFS бы­ла от­нюдь не пер­вой ком­плекс­ной сис­те­мой раз­ме­щения дан­ных – хо­тя ее ис­то­ри­че­­ские пред­ше­ст­венницы так­же име­но­ва­лись про­сто фай­ло­вы­ми сис­те­ма­ми.

Пер­вой из та­ких пред­ше­ст­венниц бы­ла, ви­ди­мо, фай­ло­вая сис­те­ма Veritas (или VxFS), раз­ра­бо­тан­ная фир­мой Veritas Software и пред­став­лен­ная ми­ру в 1991 го­ду. Она же пре­тен­ду­ет на звание пер­вой в ис­то­рии ми­ро­здания жур­на­ли­руе­мой фай­ло­вой сис­те­мы. Хо­тя, на­сколь­ко мне из­вест­но, JFS – эпоним всех жур­на­ли­руе­мых ФС – в сво­ей реа­ли­за­ции для AIX поя­ви­лась в 1990 го­ду, так что во­прос при­ори­те­та оста­ет­ся не вполне яс­ным.

VxFS яв­ля­ет­ся основ­ной фай­ло­вой сис­те­мой в HP UX, ра­бо­та­ет так­же во всех ныне жи­ву­щих про­прие­тар­ных UNIX’ах и тео­ре­ти­че­­ски мо­жет ис­поль­зо­вать­ся в Linux’е. Од­на­ко о прак­ти­че­­ских при­ме­рах по­следнего я не слы­шал: VxFS яв­ля­ет­ся сис­те­мой про­прие­тар­ной и весь­ма до­ро­гой.

VxFS тес­но ин­тег­ри­ро­ва­на с менед­же­ром ло­ги­че­­ских то­мов – VxVM. Бла­го­да­ря че­му в ней воз­мож­но из­менение (в лю­бую сто­ро­ну) раз­ме­ра фай­ло­вой сис­те­мы «на ле­ту», вклю­чение раз­лич­ных ре­жи­мов ис­поль­зо­вания то­мов – стрип­пинг дан­ных, их зер­ка­ли­ро­вание, а так­же ком­би­на­ции то­го и дру­го­го, соз­дание из­бы­точ­ных мас­си­вов по ти­пу RAID Level 5, из­менение внут­ренней ор­ганиза­ции дан­ных без оста­нов­ки ра­бо­ты. Все это по­зво­ля­ет VxFS (в со­че­тании с VxVM) пре­тен­до­вать на звание ком­плекс­ной сис­те­мы раз­ме­щения дан­ных.

Впро­чем, не мень­ше к то­му осно­ваний бы­ло и у AdvFS – фай­ло­вой сис­те­мы, раз­ра­бо­тан­ной к 1993 го­ду фир­мой DEC для сво­его про­прие­тар­но­го ва­ри­ан­та UNIX, име­но­вав­ше­го­ся сна­ча­ла OSF/1, за­тем Digital UNIX, и за­вер­шив­ше­го свою жизнь под именем Tru64 UNIX. Судь­ба ее бы­ла пе­чаль­ной. Снискав за­слу­жен­ное при­знание на сво­ей род­ной плат­фор­ме DEC Alpha под управ­лением ука­зан­ной ОС, она по­сле по­куп­ки DEC фир­мой Compaq ока­за­лась в за­гоне. А по­сле то­го, как Compaq, в свою оче­редь, был по­гло­щен фир­мой Hewlett Packard, ис­поль­зо­вав­шей для сво­его UNIX’а на плат­фор­мах HP PA и Itanium толь­ко что упо­мя­ну­тую VxFS, AdvFS ока­за­лась со­всем не при де­лах.

В ре­зуль­та­те HP сде­ла­ла щед­рый дар со­об­ще­ст­ву сво­бод­но­го соф­та во­об­ще и Linux-со­об­ще­ст­ву в осо­бен­но­сти: в се­ре­дине 2008 го­да ис­ходники фай­ло­вой сис­те­мы AdvFS бы­ли от­кры­ты под ли­цен­зи­ей GPLv2 – ра­ди мак­си­маль­ной со­вмес­ти­мо­сти с ядром Linux. С пред­ло­жением ис­поль­зо­вать их в ка­че­­ст­ве бо­га­той тех­но­ло­ги­че­­ской ба­зы для этой ОС. Прав­да, ого­вор­ка, что са­ма HP не за­ин­те­ре­со­ва­на в дальней­шем раз­ви­тии AdvFS за­став­ля­ла вспомнить на­род­ную при­сказ­ку: «Возь­ми, небо­же, что мне не го­же».

Да и пред­ло­жение несколь­ко за­по­зда­ло: как мы ско­ро уви­дим, к то­му вре­мени ин­тен­сив­но раз­ви­ва­лись и ZFS, и btrfs.

Од­на­ко, по­ми­мо ис­ходников, HP пре­доста­ви­ла так­же доступ ко всей до­ку­мен­та­ции – бла­го­да­ря че­му об AdvFS при же­лании мож­но уз­нать боль­ше, чем о лю­бой дру­гой про­прие­тар­ной фай­ло­вой сис­те­ме для UNIX-по­доб­ных опе­ра­цио­нок. Это из­бав­ля­ет ме­ня от необ­хо­ди­мо­сти опи­сания осо­бен­но­стей AdvFS. За­ме­чу толь­ко, что сре­ди них мы уви­дим все чер­ты раз­ви­той ком­плекс­ной сис­те­мы раз­ме­щения дан­ных. Те са­мые, с ко­то­ры­ми оз­на­ко­мим­ся, когда де­ло дой­дет на­конец до рас­смот­рения уст­рой­ст­ва ZFS. Но для на­ча­ла пе­рей­дем к об­зо­ру уже ее ис­то­рии.

На­ча­ло ис­то­рии ZFS

Раз­ра­бот­чи­ки ZFS по­ста­ви­ли се­бе чес­то­лю­би­вую цель: соз­дать сис­те­му хранения дан­ных, ко­то­рая от­ве­ча­ла бы всем трем кри­те­ри­ям идеа­ла. Раз­ра­бот­ка ее про­во­ди­лась в ком­пании Sun Microsystems, ко­ман­дой под ру­ко­во­дством Джеф­фа Бон­ви­ка [Jeff Bonwick] и Мэт­тью Арен­са [Matthew Ahrens]. Пер­во­на­чаль­но на­звание ZFS рас­смат­ри­ва­лось как аб­бре­виа­ту­ра от Zettabyte File System, но бы­ст­ро ста­ло про­сто услов­ным име­но­ванием. Его мож­но ин­тер­пре­ти­ро­вать как по­след­нюю точ­ку в раз­ви­тии фай­ло­вых сис­тем во­об­ще. И в по­сле­дую­щем мы уви­дим: это неда­ле­ко от ис­ти­ны.

Ре­зуль­та­ты ра­бо­ты над ZFS бы­ли пред­став­ле­ны ми­ру в ав­гу­сте 2004 го­да. А в 2006 го­ду она бы­ла вклю­че­на в штат­ный со­став OS Solaris 10 (ре­лиз 6/06). То есть, по­доб­но сво­им пред­ше­ст­венницам, она так­же бы­ла про­прие­тар­ным про­дук­том. И поль­зо­ва­те­лям сво­бод­ных UNIX-по­доб­ных сис­тем по­на­ча­лу от ее су­ще­ст­во­вания бы­ло ни хо­лод­но, ни жар­ко. Од­на­ко пе­ри­од ка­мер­но­го су­ще­ст­во­вания ZFS про­дол­жал­ся недол­го – уже в но­яб­ре 2005 го­да, то есть до вклю­чения в Solaris, ее под­держ­ка бы­ла ин­тег­ри­ро­ва­на в от­кры­тый ее ва­ри­ант, OpenSolaris. Ибо она осно­вы­ва­лась на том же яд­ре SunOS 5, что и ком­мер­че­­ский про­то­тип.

Ис­ходники ZFS рас­про­стра­ня­ют­ся, как и соб­ст­вен­но OpenSolaris, под ли­цен­зи­ей CDDL (Common Development and Distribution License). Эта ли­цен­зия, ба­зи­рую­щая­ся на Mozilla Public License (MPL), не влия­ет на об­щую ли­цен­зию про­ек­та, в со­став ко­то­рый вклю­че­ны CDDL-ком­понен­ты. И по­то­му ока­зы­ва­ет­ся со­вмес­ти­мой с боль­шин­ст­вом сво­бод­ных ли­цен­зий. За ис­клю­чением... ка­кой? Пра­виль­но, GPL во всех ее про­яв­лениях.

Ра­зу­ме­ет­ся, ZFS бы­ла за­дей­ст­во­ва­на в кло­нах OpenSolaris, та­ких, как BeleniX, SchilliX и, в пер­вую го­ло­ву, в Nexenta OS. Прав­да, по­след­няя раз­ви­ва­лась в на­прав­лении ком­мер­че­­ской сис­те­мы хранения дан­ных, а о чис­ле поль­зо­ва­те­лей осталь­ных мож­но бы­ло толь­ко га­дать.

Не­ко­то­рое вре­мя ZFS бы­ла доступ­на поль­зо­ва­те­лям Macintosh’а – в Mac OS X Leopard от осени 2007 го­да. Прав­да, хо­див­шие пе­ред ее вы­хо­дом слу­хи, что она бу­дет там фай­ло­вой сис­те­мой по умол­чанию, ока­за­лись несколь­ко пре­уве­ли­чен­ны­ми: под­держ­ка ZFS ока­за­лась оп­цио­наль­ной и лишь в ре­жи­ме «толь­ко для чтения». А в по­сле­дую­щих вер­си­ях се­мей­ст­ва ко­шачь­их во­об­ще ис­чез­ла и, ви­ди­мо, уже не воз­ро­дит­ся.

Так что для ши­ро­ких на­род­ных масс ZFS по прежнему оста­ва­лась недоступ­ной. По­ка... по­ка ее не пор­ти­ро­ва­ли под FreeBSD в 2007 го­ду, и офи­ци­аль­но не вклю­чи­ли ее под­держ­ку в 7-ю вер­сию этой ОС, вы­шед­шую в на­ча­ле 2008 го­да. В чем, как и в дальней­шем ее раз­ви­тии, основ­ная за­слу­га при­над­ле­жит Пав­лу-Яку­бу Да­ви­де­ку [Pawel Jakub Dawidek] и Ива­ну Во­ра­су [Ivan Voras]. Прав­да, до недавнего вре­мени ZFS нель­зя бы­ло за­дей­ст­во­вать при уста­нов­ке FreeBSD сред­ст­ва­ми ее штат­но­го ин­стал­ля­то­ра и кон­фи­гу­ра­то­ра sysinstall. Од­на­ко это без тру­да мож­но бы­ло осу­ще­ст­вить в дальней­шем ру­ка­ми. В том чис­ле и раз­мес­тить на ZFS ко­рень фай­ло­вой ие­рар­хии.

С са­мо­го на­ча­ла под­держ­ки ZFS во FreeBSD поя­ви­лась и воз­мож­ность за­дей­ст­во­вать ее, что на­зы­ва­ет­ся, «ис­ка­роп­ки», в де­ск­топ-ори­ен­ти­ро­ван­ном клоне по­следней – PC-BSD. А с пе­ре­хо­дом FreeBSD, на­чи­ная с вер­сии 9.0, на но­вую про­грам­му уста­нов­ки – BSDInstall, эта функ­ция рас­про­странилась и на ма­те­рин­скую сис­те­му.

Ус­пех ZFS во FreeBSD, где она ста­ла ес­ли не глав­ной фай­ло­вой сис­те­мой, то до­би­лась рав­но­пра­вия с UFS2, по­слу­жил при­ме­ром для дру­гих BSD-сис­тем. Так, ныне ZFS под­дер­жи­ва­ет­ся в NetBSD – эта ра­бо­та бы­ла на­ча­та Оли­ве­ром Гол­дом [Oliver Gould] ле­том 2007 го­да в рам­ках ак­ции Google Summer of Code. А в 2009 го­ду Адам Хам­сик [Adam Hamsik] ин­тег­ри­ро­вал ее код в яд­ро NetBSD. Прав­да, на­сколь­ко я понимаю, ис­поль­зо­вание ZFS в этой опе­ра­ци­он­ке ре­ко­мен­ду­ет­ся толь­ко в экс­пе­ри­мен­таль­ных це­лях.

На­конец, од­но вре­мя в спи­сках рас­сыл­ки DragonFlyBSD ак­тив­но об­су­ж­дал­ся во­прос о пор­ти­ро­вании ZFS и на эту ОС. По­том, прав­да, раз­го­во­ры эти стих­ли – ве­ро­ят­но, в свя­зи с ак­тив­ной раз­ра­бот­кой фай­ло­вой сис­те­мы Hammer, об­ла­даю­щей во мно­гом ана­ло­гич­ны­ми воз­мож­но­стя­ми. Од­на­ко, учи­ты­вая лег­кость адап­та­ции к DragonFlyBSD лю­бых сто­ронних фай­ло­вых сис­тем, мож­но не со­мневать­ся, что под­держ­ка ZFS на уровне об­ме­на дан­ны­ми бу­дет вклю­че­на в нее тогда и ес­ли (или ес­ли тогда), когда (и ес­ли) это ко­му-то по­на­до­бит­ся.

Та­ким об­ра­зом, поль­зо­ва­те­лям боль­шин­ст­ва BSD-сис­тем ZFS или уже доступ­на как на­тив­ная, или мо­жет стать доступ­ной в бли­жай­шее вре­мя.

Из ис­то­рии юрис­пру­ден­ции

А что же Linux, спро­си­те вы ме­ня? Как об­сто­ит де­ло с под­держ­кой ZFS в са­мой мас­со­вой из сво­бод­ных UNIX-по­доб­ных опе­ра­ци­он­ных сис­тем на­ше­го вре­мени? А вот с Linux’ом все ока­зы­ва­ет­ся го­раз­до сложнее. Ибо не зря по­ми­на­ли мы вы­ше ли­цен­зию CDDL. Ко­то­рая са­ма по се­бе очень да­же сво­бод­ная, и не на­кла­ды­ва­ет поч­ти ника­ких ог­раничений на рас­про­странение за­щи­щае­мых ею про­грамм.

В ча­ст­но­сти, не за­пре­ща­ет CDDL и ком­мер­че­­ско­­го рас­про­странения про­из­вод­ных про­дук­тов в ви­де би­нарников, без от­кры­тия ис­ход­ных тек­стов. Как из­вест­но, не на­кла­ды­ва­ет та­ко­го ог­раничения и ли­цен­зия BSD, по­че­му вклю­чение ко­да под­держ­ки ZFS в лю­бые BSD-сис­те­мы и про­хо­дит юри­ди­че­­ски без­бо­лезнен­но, как мы толь­ко что ви­де­ли на при­ме­ре FreeBSD.

А вот с ли­цен­зи­ей GPL обе­их ак­ту­аль­ных вер­сий (v2 и v3) CDDL вхо­дит в диа­лек­ти­че­­ское про­ти­во­ре­чие. Ибо лю­бые про­дук­ты, про­из­вод­ные от про­грамм под GPL, вне за­ви­си­мо­сти от фор­мы рас­про­странения, долж­ны со­про­во­ж­дать­ся ис­ход­ны­ми тек­ста­ми. Что де­ла­ет юри­ди­че­­ски невоз­мож­ным вклю­чение ко­да под­держ­ки ZFS непо­сред­ст­вен­но в яд­ро Linux, рас­про­стра­няе­мое, как из­вест­но, на усло­ви­ях GPLv2.

Кро­ме то­го, невоз­мож­ность вклю­чения в яд­ро Linux ко­да под­держ­ки ZFS объ­яс­ня­ет­ся тем, что GPL тре­бу­ет рас­про­странения всех осно­ван­ных на ней про­дук­тов под GPL же, тогда как CDDL – со­хранения ее для «сво­их» ком­понен­тов.

Прав­да, часть ко­да ZFS бы­ла от­кры­та под GPL с тем, что­бы со­от­вет­ст­вую­щий патч мож­но бы­ло вклю­чить в за­груз­чик Grub. Это обес­пе­чи­ло воз­мож­ность за­груз­ки Open Solaris непо­сред­ст­вен­но с ZFS-раз­де­ла. Од­на­ко ока­за­лось недоста­точ­ным для пол­но­цен­ной реа­ли­за­ции этой сис­те­мы, ко­то­рую мож­но бы­ло бы рас­про­стра­нять под дан­ной ли­цен­зи­ей.

Впро­чем, не бу­ду­чи юри­стом, ло­мать го­ло­ву над ли­цен­зи­он­ны­ми во­про­са­ми не бу­ду, и мо­им чи­та­те­лям не со­ве­тую, ибо по­нять это все рав­но невоз­мож­но. А доста­точ­но лишь за­помнить, что все­ми ре­зон­ны­ми и юри­ди­че­­ски под­ко­ван­ны­ми людь­ми при­зна­но, что под­держ­ки ZFS в яд­ре Linux быть не мо­жет.

Та­ким об­ра­зом, сло­жи­лась аб­сурд­ная, с точ­ки зрения здра­во­го смыс­ла, си­туа­ция: два про­грамм­ных про­дук­та под сво­бод­ны­ми ли­цен­зия­ми (об­су­ж­дать во­прос, ка­кая из них «сво­бодней дру­гой», мы сей­час не бу­дем), соз­дан­ные друг для дру­га, как Huggies и... э-ээ... ме­сто пониже спи­ны (дальней­шие со­бы­тия по­ка­за­ли, что техниче­­ских слож­но­стей при пор­ти­ро­вании ZFS на Linux прак­ти­че­­ски нет), невоз­мож­но бы­ло ис­поль­зо­вать в со­ста­ве од­но­го про­ек­та. По крайней ме­ре, для за­ко­но­послуш­ных гра­ж­дан, чту­щих... нет, не только уго­лов­ный ко­декс, но и прин­ци­пы сво­бод­но­го про­грамм­но­го обес­пе­чения.

И, ра­зу­ме­ет­ся, здра­во­мыс­ля­щие лю­ди по­пы­та­лись эту си­туа­цию раз­ре­шить. И пер­вая та­кая по­пыт­ка бы­ла пред­при­ня­та еще в 2006 го­ду в рам­ках Google Summer of Code. Ос­но­вы­ва­лась она на под­держ­ке ZFS че­рез FUSE (Filesystem in Userspace). По­сколь­ку мо­дуль FUSE ра­бо­та­ет как поль­зо­ва­тель­ское при­ло­жение, необ­хо­ди­мо­сти во вклю­чении ко­да ZFS в яд­ро Linux нет, что снима­ет все юри­ди­че­­ские во­про­сы. Од­на­ко вста­ют во­про­сы дру­гие – про­из­во­ди­тель­но­сти и устой­чи­во­сти.

Про­ект ZFS-FUSE раз­ви­ва­ет­ся по сей день, хо­тя и не очень бы­ст­ры­ми тем­па­ми. Прав­да, на­хо­дясь в ста­дии хрониче­­ской бе­та-вер­сии, он до сих пор рас­смат­ри­ва­ет­ся как су­гу­бо экс­пе­ри­мен­таль­ный. Да и в лю­бом слу­чае в та­ком ви­де ZFS вы­пол­нять свои функ­ции – быть на­деж­ным хранили­щем дан­ных боль­шо­го объ­е­ма – ско­рее все­го, не смо­жет.

Так что ZFS-FUSE нель­зя счи­тать кар­ди­наль­ным ре­шением во­про­са с этой сис­те­мой раз­ме­щения дан­ных в Linux. А на то, что в его яд­ро бу­дет встрое­на соб­ст­вен­ная реа­ли­за­ция ZFS, рас­счи­ты­вать не при­хо­дит­ся.

По­яв­ление ге­роини

И тем не менее, ре­шение этой про­бле­мы на­шлось – и ре­шение столь же изящ­ное, сколь и оче­вид­ное. Его пред­ло­жил вес­ной 2010 го­да Брай­ан Бе­лен­дорф [Brian Behlendorf], некогда один из основ­ных раз­ра­бот­чи­ков web-сер­ве­ра Apache. Он соз­дал мо­дуль под­держ­ки ZFS, ко­то­рый со­би­ра­ет­ся и мо­жет рас­про­стра­нять­ся от­дель­но от яд­ра, со­хра­няя пра­ро­ди­тель­скую ли­цен­зию CDDL. А по­сколь­ку по­след­няя, как уже го­во­ри­лось, яв­ля­ет­ся ли­цен­зи­ей «по­фай­ло­вой», этим са­мым об­хо­дит­ся ан­та­гонисти­че­­ское про­ти­во­ре­чие – за­прет на рас­про­странение про­дук­тов, в ко­то­рых сме­шан код, ли­цен­зи­руе­мый под CDDL и GPL.

На ба­зе раз­ра­бот­ки Брай­а­на возник­ло сра­зу два про­ек­та. Пер­вый осу­ще­ст­в­лял­ся ин­дий­ской ком­панией KQ Infotech, ко­то­рой уже в сен­тяб­ре 2010 го­да уда­лось вы­пустить ра­бо­то­спо­соб­ный, при­год­ный для тес­ти­ро­вания Linux-яд­ра с реа­ли­за­ци­ей фай­ло­вой сис­те­мы ZFS. А в ян­ва­ре сле­дую­ще­го, 2011, го­да поя­ви­лась фи­наль­ная его вер­сия, доступ­ная тогда в ис­ходниках и в ви­де дво­ич­ных па­ке­тов для Fedora 14, RHEL6, Ubuntu 10.04 и 10.10.

Од­на­ко вес­ной то­го же го­да KQ Infotech бы­ла ку­п­ле­на фир­мой STEC, занимаю­щей­ся про­из­вод­ст­вом SSD-на­ко­пи­те­лей, ка­ко­вых, впро­чем, в на­ших па­ле­сти­нах никто не ви­дел. И ра­бо­ты по дальней­ше­му раз­ви­тию на­тив­ной под­держ­ки ZFS бы­ли свер­ну­ты. Хо­тя ис­ходники мо­ду­ля и со­пут­ст­вую­щих ком­понен­тов до сих пор доступ­ны, по­следнее их об­нов­ление про­ис­хо­ди­ло бо­лее го­да на­зад. А ин­фор­ма­ции о дальней­шей судь­бе про­ек­та с тех пор не по­яв­ля­лось.

Од­на­ко сам Брай­ан про­дол­жал свою ра­бо­ту – вме­сте с со­трудника­ми Ли­вер­мор­ской на­цио­наль­ной ла­бо­ра­то­рии, ка­ко­вая, бу­ду­чи в под­чинении Министер­ст­ва энер­ге­ти­ки США, занима­ет­ся не толь­ко во­про­са­ми ядер­но­го ору­жия (эв­фе­миз­мы вро­де Мин­сред­ма­ша в хо­ду не толь­ко в быв­шем Со­вет­ском Сою­зе), но и раз­ра­бот­кой су­пер­комь­ю­те­ров. В ре­зуль­та­те ско­ро возник про­ект ZFS on Linux – http://zfsonlinux.org, в рам­ках ко­то­ро­го мо­дуль под­держ­ки ZFS и со­пут­ст­вую­щие ути­ли­ты под­держ­ки, пор­ти­ро­ван­ные из Solaris – так на­зы­вае­мый SPL (Solaris Porting Layer), бы­ли до­ве­де­ны до ума, и к на­ча­лу 2011 го­да ста­ли при­год­ны для ис­поль­зо­вания в экс­пе­ри­мен­таль­ном ре­жи­ме. А к на­стоя­ще­му вре­мени, несмот­ря на фор­маль­ное со­хранение ста­ту­са release candidatе, порт ZFS on Linux мож­но счи­тать го­то­вым к прак­ти­че­­ско­­му при­менению.

Прав­да, майн­тайнеры основ­ных ди­ст­ри­бу­ти­вов не то­ро­пи­лись вклю­чать под­держ­ку ZFS в свои сис­те­мы да­же в ка­че­­ст­ве до­полнитель­ных неофи­ци­аль­ных па­ке­тов. По­доз­ре­ваю, что не столь­ко из косно­сти и лени, сколь­ко из-за оче­ред­ной слож­но­сти: ви­ди­мо, по все тем же ли­цен­зи­он­ным ог­раничениям мо­ду­ли zfs и spl при­хо­дит­ся при­вя­зы­вать к фик­си­ро­ван­ной вер­сии (и да­же кон­крет­ной сбор­ке) яд­ра Linux. Что при ре­гу­ляр­ных, да­же кор­рек­ти­рую­щих, об­нов­лениях по­следнего тре­бу­ет и их пе­ре­сбор­ки.

Тем не менее, раз­ра­бот­чи­ки про­ек­та во­пло­ти­ли ре­зуль­та­ты сво­ей ра­бо­ты в ви­де до­полнитель­но­го (так на­зы­вае­мо­го PPA) ре­по­зи­то­рия для Ubuntu. А так­же со­чинили под­роб­ные ин­ст­рук­ции по соб­ст­вен­но­руч­ной сбор­ке па­ке­тов в фор­ма­тах RPM и Deb (ссыл­ки мож­но най­ти на странице про­ек­та).

Доста­точ­но под­роб­но вклю­чение ZFS опи­са­но в Gentoo Wiki. А майн­тайнеры ее кло­на, ди­ст­ри­бу­ти­ва Sabayon, про­сла­вив­шие­ся сво­ей склон­но­стью к экс­пе­ри­мен­там, вклю­чи­ли под­держ­ку ZFS поч­ти «ис­ка­роп­ки»: со­от­вет­ст­вую­щие мо­ду­ли под­гру­жа­ют­ся при стар­те с LiveDVD и мо­гут быть оп­ро­бо­ва­ны в «жи­вом» ре­жи­ме. Хо­тя штат­но­го спо­со­ба уста­нов­ки сис­те­мы на ZFS в ин­стал­ля­то­ре это­го ди­ст­ри­бу­ти­ва, все из-за тех же юри­ди­че­­ских за­ко­вык, и не пре­ду­смот­ре­но.

Ди­ст­ри­бу­тив openSUSE не спо­до­бил­ся по­пасть в спи­сок «ин­ст­рук­ти­руе­мых» на сай­те про­ек­та.

Так что нын­че нет ни ма­лей­ших пре­пят­ст­вий к ис­поль­зо­ванию ZFS в openSUSE, о чем и пой­дет речь в сле­дую­щей ста­тье. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика