среда, 17 декабря 2008 г.

Использование ZFS на USB-устройствах

Хотя чисто теоретически ZFS и не предназначалась в качестве автономной файловой системы, использование ее на USB-устройствах не только возможно, но и вполне оправдано - при соблюдении небольшого количества простеньких правил.

Проведем небольшой эксперимент.

Возьмем флэшку USB 2.0 и создадим на ней ZFS-пул:

1. Выключим VOLD чтобы не путался под ногами ;)

# svcadm disable volfs

2. Определим имя устройства:

# rmformat -l

3. Создадим метку fdisk (на Solaris x86) и слайс:

# format -e

4. Построим ZFS-пул с точкой монтирования по нашему желанию:

# zpool create -f -m /mnt usbpool c1t0d0s0 *

где usbpool - имя, которое мы сами присвоили нашему USB-пулу.

Готово. Можно записывать и считывать. Пул создан и автоматически примонтирован на /mnt.

Однако - устройство-то съемное! А данный пул стал частью нашей системы. И, если мы отключим устройство, при перезапуске системы будут проблемы. Надо найти способ безопасного извлечения ZFS-пула usbpool.

А чего его искать, вот он:

# zpool export usbpool

Совсем готово. "МОЖНО ВЫНИМАТЬ!" :)

О'кей, вынули-походили-вставили.

Кстати, VOLD запускать не надо - он по умолчанию на Солярисе монтирует USB как pcfs-устройства на /rmdisk.

Возвращаем флэшку на родину.

Как ее увидеть, в таком случае?

Просто (надо помнить лишь имя пула):

# zpool import -f usbpool
# zpool clear usbpool

Успешный импорт ZFS-устройства автоматически монтирует его на заданную в ZFS устройства точку монтирования. Если свойство mountpoint задано как legacy или none -устройство монтируется вручную:

# mount -F zfs usbpool /mnt

Но нам, разумеется, удобней автоматическое монтирование пулов ZFS.

А теперь перечислим выясненные опытным путем (а также изучением мануалов) правила:

1. Устройство USB должно быть качественным. На флэшках сбойные блоки обнаруживаются практически сразу же, и никакая файловая система не относится к ним толерантно, несмотря ни на какие контрольные суммы и избыточное дублирование данных (параметр copies на ZFS для битых флэшек помогает плохо). Практически, битая флэшка обнаруживается сразу после создания пула, при запуске скруббинга (zpool scrub usbpool).

2. Пока не выполнен export пула - отсоединять его от системы вылезет боком. Во-первых, для системы - при перезагрузке возникнут проблемы с отсутствующим пулом, для чего в мануалах описан соответствующий воркэраунд. Забывать об этом не нужно.

3. Лучше всего, когда на системах с "блуждающими" USB-пулами остановлен VOLD (SMF-сервис volfs).

4. При подключении устройства нужно всегда выполнять, во-первых, импорт пула вручную, во-вторых, очистку пула командой clear.

Если придерживаться этих, в общем-то, нехитрых правил - то USB с ZFS вовсе не будет экзотикой, как и USB с UFS.

PS. В одной из следующих статей будет исследован вопрос возможности создания загрузочной ZFS-флэшки с Solaris 10 10/08.
_____________________
* Так зовут нашу флэшку - имя устройства определено командой rmformat. При работе с пулами можно не задавать полных путей типа /dev/rdsk... .