- Сначала немного теории
Основой ZFS является пул хранения данных [zpool]. В нем может быть одно или объединяться несколько физических устройств хранения – дисков или дисковых разделов, причём рекомендуется использовать диски.
Пул состоит из одного или нескольких виртуальных устройств [vdev]. В качестве таковых могут выступать устройства без избыточности (то есть всё те же диски и/или их разделы), или устройства с избыточностью – зеркала [mirror] и массивы типа RAID-Z.
Зеркало – виртуальное устройство, хранящее на двух или более физических устройствах, но при чётном их количестве, идентичные копии данных на случай отказа диска.
RAID-Z – виртуальное устройство на нескольких физических устройствах, предназначенное для хранения данных и их контрольных сумм с однократным или двойным контролем чётности. В первом варианте теоретически требуется не менее двух, во втором – не менее трёх физических устройств.
На виртуальных устройствах размещаются наборы данных [dataset]. Они бывают следующих видов:
- файловая система [filesystem] – набор данных, смонтированный в определённой точке и ведущий себя подобно любой другой файловой системе;
- снапшот [snapshot] – моментальный снимок текущего состояния файловой системы, доступный только для чтения;
- клон [clone] – точная копия файловой системы в момент её создания; создаётся на основе снимка, но, в отличие от него, доступная для записи;
- том [volume] – набор данных, эмулирующий физическое устройство, например, раздел подкачки.
Главных команд для работы с zfs две: zpool для создания и управления пулами, и zfs для создания и управления наборами данных.
- Установка FreeBSD 10 на zfs
В FreeBSD 10 при установке появился пунктик для разбивки дисков в zfs, поэтому там выбираем два диска по 500 Gb и делаем на их основе mirror-0. Все сделается в автоматическом режиме, после завершения установки получим:# geom disk list Geom name: ada0 Providers: 1. Name: ada0 Mediasize: XXXXXXXXXXXXX (500G) Sectorsize: 512 Stripesize: 4096 Stripeoffset: 0 Mode: r2w2e4 descr: INTEL XXXXXXXXXXXXX lunid: XXXXXXXXXXXXX ident: XXXXXXXXXXXXX fwsectors: 63 fwheads: 16 Geom name: ada1 Providers: 1. Name: ada1 Mediasize: XXXXXXXXXXXXX (500G) Sectorsize: 512 Stripesize: 4096 Stripeoffset: 0 Mode: r1w1e2 descr: INTEL XXXXXXXXXXXXX lunid: XXXXXXXXXXXXX ident: XXXXXXXXXXXXX fwsectors: 63 fwheads: 16
# gpart show => 34 468862061 ada0 GPT (500G) 34 6 - free - (3.0K) 40 128 1 freebsd-boot (64K) 168 33554432 2 freebsd-swap (16G) 33554600 435307488 3 freebsd-zfs (484G) 468862088 7 - free - (3.5K) => 34 468862061 ada1 GPT (500G) 34 6 - free - (3.0K) 40 128 1 freebsd-boot (64K) 168 33554432 2 freebsd-swap (16G) 33554600 435307488 3 freebsd-zfs (484G) 468862088 7 - free - (3.5K)
# df -h Filesystem Size Used Avail Capacity Mounted on tank1/root 500G 8.0G 492G 4% / devfs 1.0K 1.0K 0B 100% /dev tank1/root/tmp 492G 248K 492G 0% /tmp tank1/root/var 492G 164M 492G 0% /var
# zpool status pool: tank1 state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: none requested config: NAME STATE READ WRITE CKSUM tank1 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada0p3 ONLINE 0 0 0 ada1p3 ONLINE 0 0 0 errors: No known data errors
Как видно, в качестве устройств хранения выступают разделы дисков, что не рекомендуется, но автоматическая размечалка дисков использует почему-то такую схему.
- Второй пул делаем руками
Вначале добавляем в систему физические диски. Тут важно помнить о современной системе именования блочных устройств в юниксе и выбрать то, что подойдет лучше всего. В моем случае я работаю с именами устройств верхнего уровня: adaX, он подойдет если в системе один диск (например, на десктопе). Есть ещё вариант именования, gptid, в этом случае список id устройств находится в /dev/gptid, правила именования мне непонятны, а потому лучше добавлять диски по одному и записывать какой диск имеет какой id. Это пригодится потом при замене вышедшего из строя диска. Также, gptid можно узнать, выполнив команду:# glabel list
В случае использования gptid, в zfs-командах вместо adaX нужно использовать gptid, на моем ноуте, например, это f07151a3-9053-11e2-90e9-0016d35f78b2.# ls /dev | grep ada ada0 ada0p1 ada0p2 ada0p3 ada1 ada1p1 ada1p2 ada1p3 ada2 ada3
Как видно, в системе появились ada2 и ada3
Создаем пул с именем tank2:# zpool create tank2 mirror ada2 ada3 # zpool export tank2 # zpool import tank2
В команде создания пула мы задали конфигурацию виртуального устройства как зеркала (mirror) и используем два диска (ada2 и ada3) в качестве устройств хранения.
Если же нам нужен raid-z, то он делается из трех и более дисков (предположим, что у нас в систему добавлен ещё и ada4)# zpool create tank2 raidz ada2 ada3 ada4
если же использовать два диска, но не задать mirror или raidz, то будет создано [strip] виртуальное устройство с расщеплением данных на оба физических устройства. Вариант с использованием gptid:# zpool create tank2 f07151a1-9053-11e2-90e9-0016d35f78b2 f07151a2-9053-11e2-90e9-0016d35f78b2
В этом варианте размер пула будет равен сумме размеров первого и второго дисков.
- Работа
- Создаем точку монтирования:
# zfs create -o mountpoint=/sklad tank1/sklad
- Создаем точку монтирования:
- Полезные команды
Если нужно полностью очистить диск ada1:
вначале удаляем все партиции# gpart delete -i 1 ada1
после -i идет номер партиции, список партиций можно посмотреть командой:# gpart show ada1 => 34 468862061 ada1 GPT (500G) 34 6 - free - (3.0K) 40 128 1 freebsd-boot (64K) 168 33554432 2 freebsd-swap (16G) 33554600 435307488 3 freebsd-zfs (484G) 468862088 7 - free - (3.5K)
затем удаляем партицию# gpart destroy ada1
- Снапшоты
Читаем список снапшотов:# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT tank2/snap@2018-03-14 4.94G - 578G - tank2/snap@2018-03-15 561M - 578G -
Смонтировать снапшот:# mount -t zfs tank2/snap@2018-03-14 /mnt/zfs
- Ссылки
Хендбук. Файловая система zfs
zpool
Статья опубликована: 2017-02-03 20:45:53
Последние правки: 2018-07-17 15:31:38
FreeBSD 10, устанавливаем на файловую систему zfs.