Sunday, September 13, 2009

zfs

вот уже почти год я использую zfs в качестве отказоустойчивого хранилища; на трех терабайтных дисках собран raid 5 (господа из sun называют его raidz1). в целом меня устраивает как это все работает, но хочется заострить внимание на некоторых моментах.

кэширование

начиная с mac os x 10.5 для открываемых файлов было введено кэширование. причем, работает оно по умолчанию. для того, чтобы его отключить, нужно после открытия файла принудительно выставить флаг F_GLOBAL_NOCACHE или F_NOCACHE. гугл дает достаточно информации для того, чтобы составить представление о значении этих флагов. в целом, это не проблема, до тех пор, пока пользователь не начинает пользоваться терминалом и transmission.app. в силу того, что с помощью transmission.app выкачиваются большие объемы данных, то и места в памяти под кэш отдается изрядно. в результате объем неактивной памяти растет, приложения тормозят. то же самое происходит и в терминале при копировании файлов (как минимум).

zfs относится к этому тем местом, что кэширование содержимого файлов на zfs не работает. для системя это в целом плохо, но для transmission — хорошо.

snapshots

zfs поддерживает технологию copy-on-write. суть ее состоит в том, что в случае перезаписи содержимого файла, реальная запись производится в свободное место. поэтому старые данные остаются доступными даже после изменения файла. на этом основан механизм snapshot'ов. при создании снимка состояния диска просто указывается время, когда считать данные измененными. и такой снимок совсем не занимает места, потому как место на диске занимают только измененные по сравнению с неким состоянием snapshot данные. в целом, это такой аналог тайм машины, только без резервного копирования.

raidz

это аналог raid5. то есть когда данные равномерным слоем размазаны по дискам, при этом данных — 2/3, а контрольных сумм — 1/3 от объема. поэтому емкость raidz в 2 терабайта достигается тремя дисками по терабайту. не так давно один из диско вышел из строя, для его замены оказалось достаточным поставить диск для замены, разметить его аналогично и запустить процедуру миграции данных с помощью команды zpool replace. аналогичных бесплатных решений для mac os x не существует.

с raidz связана одна не самая приятная особенность. в силу того, что building blocks для zfs являются файлы, то и перестройка raidz оказалась очень длительной — около 20–ти часов.




zpool status
pool: ultra
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress, 0.00% done, 1665h13m to go
config:

NAME STATE READ WRITE CKSUM
ultra DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
replacing DEGRADED 0 0 0
disk2s3/old UNAVAIL 0 0 0 cannot open
disk2s3 ONLINE 0 0 0
disk1s3 ONLINE 0 0 0
disk3s3 ONLINE 0 0 0





частичная поддержка

в настоящее время zfs имеется для 10.5 и при этом часть функциональности просто не работает: очистка корзины, поддержка из disk utility и некотрые другие мелочи.