Posts Tagged ‘ZFS’

ZFS Status

July 18, 2008

Мина много време откакто за последен път писах за ZFS. От тогава изтече доста вода. По самата система не знам да има някакви драматични промени или иновативни нови възможности, но…

ZFS/OpenSolaris

ZFS вече е официалната файлова система на OpenSolaris. Поддържа boot, права за администрация и въобще всичко.

ZFS/FreeBSD

FreeBSD 7.0 излезе официално с експериментална поддръжка на новата файлова система. По кода, който е в официалното хранилище на проекта не се работи много, но за сметка на това Павел Давидек (човека, който е изцяло виновен за FreeBSD порта) и още няколко момчета са направили чудеса в отделното им хранилище. Вече се поддържа ZFSboot, делегирана администрация, достъп до списък с повредени файлове, ZPool аксесоари, много подобрения по общата стабилност и производителност и други.

Кодът с новите благинки за сега няма да е достъпен от официалните хранилища, тъй като автора в момента работи по изчистването на кода и се е отдал на regression testing.

Проектът за графичен инсталатор finstall също добави базова поддръжка за ZFS. Всичко това означава, че най-вероятно в следващата голяма версия (8.0) на Дяволската система ще може да използваме файловата система съвсем нормално, без притеснения и ограничения.

ZFS/Mac OS X

Поддръжката на ZFS беше официално обявена само за сървърната версия на OS X 10.6. За мен е интересно обаче, дали Apple ще я интегрира и в тази за крайните потребители. В крайна сметка, възможностите на  ZFS са по-примамливи за хората със сървъри, но тя е идеална и за хората с по един твърд диск – много по-сигурна е, много по-лесен backup.

Но от Apple вече си разработиха система за резервни копия – Time Machine. Начинът по който работи лично аз сметнах за почти гениален и същевременно много прост – използват се най-обикновени hard links, които са познати на повечето UNIX потребители. Единственото нестандартно нещо е, че се използват тия твърди връзки и за директории, което никога не е било “позволено” в света на Юникс. Не съм достатъчно умен за да разбера точно защо, но явно причината е сериозна. Което си е риск от страна на хората от Купертино.

Сега въпросът е дали ще преминат на ZFS където бекъп способностите са по-гъвкави, стандартни и вградени или ще оставят и снежния леопард с 8 годишната HFS+ (базирана на HFS, която е на 20 години).

ZFS/Linux

Както знаем тук нещата са сложни и няма техническа бариера, а само юридическа. GPLv2 е несъвместим със CDDL и подобни. Единственият начин за сега да си поиграете с тази прекрасна файлова система е да я инсталирате с FUSE – нещо, което аз нямам представа как работи, тъй като не се занимавам с Linux, но чувам че било доста по-бавно. И нормално… щом не се намесва ядрото.

Все пак обаче има надежда. Я да видим тук…

Точно така – създателя на Линукс и един от разработчиците на ZFS.

Може да значи  много неща, включително и абсолютно нищо, но надеждата умира последна :-)

Advertisements

ZFS Tuning

November 14, 2007

Ако инсталирате FreeBSD/ZFS със сигурност ще се сблъскате с един проблем: ядрото се панира след няколко часа работа. Защо? За това защото ZFS кешира адски много и не стига пемет. Не, не трябва да слагате още желязо. Не и ако имате повече от 1 ГБ памет. Просто адресното пространство (по-точен превод на address space? Някой?) което е определено за kmem по подразбиране е около 300 МБ, което е много малко за нуждите на ZFS. Независимо от архитектурата трябва да му дадете поне 512 МБ и проблемът е решен. Ето как:

/boot/loader.conf:

vm.kmem_size=”536870912″
vfs.zfs.arc_max=”67108865″

КАКДА: Zfs root on FreeBSD

November 1, 2007

Въведение

Zfs е последната дума, или по-скоро последният писък във файловите системи. Представя една изцяло нова концепция за това как трябва да работи една такава система, какви възможности трябва да има, какво и как трябва да прави. При нея няма дялове, а просто един “басейн” (pool) в който цопвате колкото си искате файлови системи, които де факто използват неограничено от дялове пространство. Например, да речем, че имате 80 GB твърд диск. Използвате UFS или друга класическа файлова система(Ext3, Resierfs, XFS, няма значение). Инсталирате си някаква система и в началото разпределяте: 1 дял от 1 GB за SWAP, 1 дял от 10 GB за / и един дял от 69 GB за /home. Обаче, след 1 година мястото на / не ви достига поради някаква си причина. Какво правим? Слагаме друг твърд диск, занимаваме се с излишни глупости, имаме излишно главоболие и, разбира се – губим ценно време. А ако бяхме сложили Zfs този проблем въобще нямаше да съществува, защото / щеше да си “вземе” колкото му трябва от /home дяла и дори нямаше да забележим. Е, стига да не ни свърши дисковото пространство като цяло, разбира се.

Zfs привлече вниманието на всички след като Sun направиха анонса, че ще я публикуват като част от OpenSolaris. Някои казват, че заедно с Dtrace това са двете най-хубави неща, които Sun някога са пускали на пазара. За съжаление на Linux потребителите обаче, файловата система (както и всичко, което е под шапката на OpenSolaris) е лицензирана под CDDL. А CDDL е несъвместим с GPL и съответно кода не може да влезе в Linux ядрото.

За мое щастие обаче, този проблем не съществува при BSD лицензираните ядра като това на FreeBSD. И за да съм още по-щастлив Павел Давидек (Pawel Dawidek) направи хубав порт, който в момента е във FreeBSD_7 като експериментална възможност на системата. Все още има няколко остри ръба, но в моя случай само един има съществено значение: FreeBSD не може да стартира директно от Zfs pool (както и от огледален pool и RAIDZ). Boot loader-а  трябва да се нагоди за тази цел и в момента се работи по проблема. Все пак обаче е възможно да използвате Zfs като root фйалова система с един малък, хитър хак, който ще опиша в тази статия.

Внимание! Zfs е нова файлова система и като такава изисква повече ресурси, особено за някои от по-атрактивните си възможности (компресия, снапшоти). Абсолютно непрепоръчително е да инсталирате Zfs на машина с по-малко от 1 GB RAM.

Стъпка 1.

Най-лесно е от диск. Необходим ви е инсталационен таъкъв на FreeBSD 7. В момента на писане последната версия от бранш 7 е BETA1 и върши работа.

Зареждате диска и избирате Custom Install. От там  създавате само един slice за целия диск, в моя случай ad1. След това от менюто Label  правите 1 дял от 512 (UFS) MB за / (ad1s1a) и още един за останалото място от твърдия диск, който няма файлова система и няма точка на монтиране (ad1s1d). Това става по следния начин: избирате му някаква точка на монтиране като ви пита инсталатора, например /blah, след това избирате дяла, натискате бутончето M и променяте точката на монтиране на… никаква. :-)

По желание може да направите още един дял за swap с размери според вашата RAM памет (ad1s1b при мен). Продължаваме с меню Distributions и изибирате минималната система. Трябва да я съберем в рамките на тези 512 MB, все пак. И накрая инсталираме. Всичко би трябвало да мине гладко и ако е така – рестартираме машината.

Стъпка 2.

FreeBSD се стартира и при prompt-а в началото избираме Single User Mode. След като се зареди натискаме Enter, за да ни пусне в sh и пишем:

$_ mount -w / 

И сега започва забавната част. Правим басейнчето, в което ще цопат монтираните файлови системи. Т.е. нашият pool. В този пример той ще заема целия дял ad1s1d, който направихме преди малко.

$_ zpool create lilly /dev/ad1s1d

Думичката “lilly” тук е просто пример и всъщност е името на pool-а. Можете да си изберете друго, каквото си поискате име. Сега да направим няколко точки на монтиране.

$_ zfs create lilly/usr

$_ zfs create lilly/usr/ports

$_ zfs create lilly/usr/ports/distfiles

$_ zfs create lilly/var

$_ zfs create lilly/tmp

$_ zfs create lilly/home

$_ zfs create lilly/home/username

Сега да видим какво сме направили:

$_ df -h

$_ zfs list

Ммм… :-)

Сръчкваме rc.conf да включва Zfs при стартиране:

 $_ echo ‘zfs_enable=”YES”‘ >> /etc/rc.conf

И сега, както сте забелязали навярно си имаме директория с името на вашият pool в /. Така де, /lilly в моя случай. Обаче, басейнчето горкото е празно. Да го напълним със съдържанието от UFS slice-a, който направихме. По този начин ще имаме работеща система на Zfs дяла.

$_ find -x / | cpio -pmd /lilly

Тъй. Система имаме. Но уви – не можем да я буутнем…

Стъпка 3.

Проблемът, както вече споменах е, че зареждача (ех, че красива дума) не знае нищо за Zfs и не може да буутва от нея. Съответно, ще трябва да буутва от UFS дялчето, което след това директно ни прехвърля в Zfs, като нашият pool вече се монтира като root, а не като самостоятелна директория както сега. Разбира се. Самият UFS дял пък го монтираме на едно скришно място, но за това след малко…

Първо затриваме /boot директорията в /lilly която току що копирахме от UFS дяла:

$_ rm -rf /lilly/boot

Сега вече правим директорията, в която ще монтираме UFS дяла. След това линкваме, за да сме сигурни, че след това ще можем да обновяваме ядрото от работеща система и че Zfs ще вижда UFS дяла когато стартира.

$_ mkdir /lilly/bootdir

$_ cd /lilly

$_ ln -s bootdir/boot boot

И трябва да кажем на lodaer.conf (който е на UFS дяла) да зарежда Zfs и коя файлова система да използва за / :

$_ echo ‘zfs_load=”YES”‘ >> /boot/loader.conf

$_ echo ‘vfs.root.mountfrom=”zfs:lilly”‘ >> /boot/loader.conf

Друга добра идея е да направите файл /bootdir/etc/fstab със следния ред:

 lilly /        zfs        rw        0        0

Сега редактираме един друг fstab, който ще е “официалният”, демек онзи на Zfs файловата система. В този случай /lilly/etc/fstab  Пишем следното:

/dev/ad1s1a         /bootdir        ufs        1        1

Това ще монтира UFS дяла в /bootdir.

Почти приключихме. Създадените вече файлови системи ги помните, нали? Нека им направим точки на монтиране:

$_ zfs set mountpoint=/usr lilly/usr

$_ zfs set mountpoint=/usr lilly/usr/ports

$_ zfs set mountpoint=/usr lilly/usr/ports/distfiles

$_ zfs set mountpoint=/tmp lilly/tmp

$_ zfs set mountpoint=/var lilly/var

$_ zfs set mountpoint=/home lilly/home

$_ zfs set mountpoint=/home/username lilly/home/username

И накрая казваме на zfs да не се монтира самичко, а че ние го монтираме (т.е. не ние, ами loader-a)

$_ zfs set mountpoint=legacy lilly

Стъпка 4.

Рестартираме и сме щастливи!

Още благинки 

Може да сте се учудили защо направих отделни системи за /usr/ports и /usr/ports/distfiles. Защото /usr/pors включва само текстови файлове и спокойно можем да включим компресия там, за да спестим място:

$_ zfs set compression=gzip lilly/usr/ports

Това е прекрасно, но няма за какво да компресираме distfiles/ при условие, че файловете там са архиви (=> вече са компресирани):

$_ zfs set compression=off lilly/usr/ports/distfiles

Аз, както и много други имам повече от един твърд диск. Добавянето на друг твърд диск към същия pool става само с една (една!!!) команда на работеща в момента система. В моя случай това е диска ad3:

$_ zpool add lilly /dev/ad3

И пльооос, още 250 GB в басейнчето :-)

Заключение

Това със сигурност е най-невероятната файлова система на всички времена. Струва си да я използвате, независимо дали сте системен админ, администриращ 150 машини или просто краен потребител, като мен. И все пак имайте предвид, че съществуването й във FreeBSD все още е нещо експериментално и че си иска мощна машина.

Относно Лили

Intel Core 2 Duo 3.0 Ghz CPU

2 GB RAM

150 GB HDD

250 GB HDD

Библиография

Zfs

Zfs commited to FreeBSD

Zfs страницата на FreeBSD Wiki 

Администриране на Zfs (PDF) Внимание! Има разлики в администрирането на Zfs върху Solaris и върху FreeBSD!

Zfs man page (FreeBSD)

 Zpool man page (FreeBSD)