На главную страницу
                сайта Оборудование
                для предприятий железных дорог Фото и
                видео Отчёты и
                очерки о путешествиях Туристическое снаряжение Философия
                всех времён и народов Литература
                художественная и нехудожественная UNIX и около
                него Разное в
                ассоритменте Кто мы и где
                мы Вход для
                однажды входивших и регистрация новых пользователей


19.2. Файловая система ZFS

Файловая система ZFS, разработанная компанией Sun, основана на использова-

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

занимается только тогда, когда она становится необходимой для сохранения дан-

ных. ZFS также была разработана с упором на максимальную целостность данных,

поддерживая снимки (snapshot), множество копий и контрольные суммы данных.

Новая модель репликации данных, известная как RAID-Z, подобна RAID-5, но специ-

ально разработана для предотвращения повреждений данных при записи.

19.2.1. Настройка ZFS

Подсистема ZFS занимает значительную часть ресурсов системы. Чтобы получить

от нее максимум эффективности в повседневном использовании, потребуется вы-

полнить некоторые настройки. ZFS является экспериментальной функциональной

возможностью в FreeBSD, но ситуация может измениться в ближайшем будущем;

однако на данный момент рекомендуется выполнить следующие шаги.

19.2.1.1. Память

Общий размер ОЗУ должен быть как минимум равен одному гигабайту, хотя реко-

мендуется два гигабайта или более. Во всех нижеследующих примерах использу-

ется система с 1ГБ памяти совместно с другими специальными настройками.

Известно, что некоторые пользователи преуспели в использовании ZFS на систе-

мах, имеющих менее одного гигабайта памяти, но с таким ограниченным объе-

мом ОЗУ и при серьезной загрузке машины очень вероятны паники FreeBSD из-за

нехватки памяти.

19.2.1.2. Настройка ядра

Рекомендуется исключить из файла конфигурации ядра неиспользуемые драйвера

и опции. Так как большинство драйверов устройств доступно в виде модулей, то

они просто могут быть загружены с помощью соответствующих записей в файле /

boot/loader.conf .

Пользователям архитектуры i386необходимо добавить следующую опцию в их

файл конфигурации ядра, перестроить ядро и перезагрузиться:

options KVA_PAGES=512

Глава 19. Поддержка файловых систем

729

Эта опция расширит адресное пространство ядра, тем самым позволяя переменной

vm.kvm_size быть установленной за текущий предел в 1 ГБ (2 ГБ для PAE). Чтобы

найти наиболее подходящее значение для этой опции, разделите имеющийся объ-

ем ОЗУ, выраженный в мегабайтах, на 4. Приведенное выше значение 512 рекомен-

дуется для систем с 2 ГБ оперативной памяти.

19.2.1.3. Параметры loader.conf

Адресное пространство kmem должно быть увеличено на всех FreeBSD архитектурах.

На тестовой системе с одним гигабайтом физической памяти стабильная работа

была получена со следующими параметрами, которые необходимо внести в файл

/boot/loader.conf и перезагрузить систему.

vm.kmem_size="330M"

vm.kmem_size_max="330M"

vfs.zfs.arc_max="40M"

vfs.zfs.vdev.cache.size="5M"

За более детальными рекомендациями по тонкой настройке системы под ZFS, об-

ратитесь к странице: http://wiki.freebsd.org/ZFSTuningGuide .

19.2.2. Использование ZFS

Существует стартовый механизм, позволяющий монтировать ZFS пулы во время

инициализации системы. Чтобы его задействовать, выполните следующие коман-

ды:

# echo 'zfs_enable="YES"' >> /etc/rc.conf

# /etc/rc.d/zfs start

Здесь и далее в статье подразумевается, что в системе установлено три SCSI диска

с именами устройств da0, da1 и da2. Использующим IDE диски необходимо подста-

вить имена устройств ad вместо имен устройств SCSI.

19.2.2.1. Простой дисковый пул

Для создания простого пула ZFS без избыточности, задействовав при этом один

жесткий диск, воспользуйтесь командой zpool:

# zpool create example /dev/da0

Чтобы увидеть новый пул, просмотрите вывод команды df:

# df

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/ad0s1a 2026030 235230 1628718 13% /

devfs 1 1 0 100% /dev

/dev/ad0s1d 54098308 1032846 48737598 2% /usr

Использование ZFS

730

example 17547136 0 17547136 0% /example

Этот вывод четко показывает, что пул example был не только создан, но также и

примонтирован. Он также доступен, как и обычная файловая система, в нем можно

создавать файлы, а пользователи могут просматривать его содержимое, например:

# cd /example

# ls

# touch testfile

# ls -al

total 4

drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .

drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..

-rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfile

Однако в этом примере простого пула не задействованы никакие функциональные

возможности ZFS. Создайте файловую систему в этом пуле и активируйте сжатие

данных на ней:

# zfs create example/compressed

# zfs set compression=gzip example/compressed

С этого момента для файловой системы ZFS example/compressed активировано

сжатие данных. Попробуйте поместить на нее несколько больших файлов копируя

их в /example/compressed .

А вот как можно отключить сжатие данных:

# zfs set compression=off example/compressed

Для того чтобы размонтировать файловую систему, выполните следующую коман-

ду и проверьте результат утилитой df:

# zfs umount example/compressed

# df

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/ad0s1a 2026030 235232 1628716 13% /

devfs 1 1 0 100% /dev

/dev/ad0s1d 54098308 1032864 48737580 2% /usr

example 17547008 0 17547008 0% /example

Снова смонтируйте файловую систему и проверьте результат при помощи df:

# zfs mount example/compressed

# df

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/ad0s1a 2026030 235234 1628714 13% /

devfs 1 1 0 100% /dev

/dev/ad0s1d 54098308 1032864 48737580 2% /usr

example 17547008 0 17547008 0% /example

Глава 19. Поддержка файловых систем

731

example/compressed 17547008 0 17547008 0% /example/

compressed

Пул и файловая система также отображается в выводе команды mount:

# mount

/dev/ad0s1a on / (ufs, local)

devfs on /dev (devfs, local)

/dev/ad0s1d on /usr (ufs, local, soft-updates)

example on /example (zfs, local)

example/data on /example/data (zfs, local)

example/compressed on /example/compressed (zfs, local)

Как вы уже убедились, файловые системы ZFS после создания могут использовать-

ся как и обычные файловые системы; однако доступно множество других возмож-

ностей. В следующем примере мы создадим новую файловую систему data. На ней

мы будем содержать важные данные, поэтому файловая система сконфигурирова-

на хранить две копии каждого блока:

# zfs create example/data

# zfs set copies=2 example/data

Снова проверьте свободное и использованное место выполнив команду df:

# df

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/ad0s1a 2026030 235234 1628714 13% /

devfs 1 1 0 100% /dev

/dev/ad0s1d 54098308 1032864 48737580 2% /usr

example 17547008 0 17547008 0% /example

example/compressed 17547008 0 17547008 0% /example/

compressed

example/data 17547008 0 17547008 0% /example/data

Заметьте, что каждая файловая система в пуле имеет тот же объем свободного ме-

ста. Мы использовали команду df на протяжении этих примеров, чтобы показать,

что файловые системы занимают только необходимое им пространство, используя

ресурс одного и того же пула. ZFS уходит от привычных понятий "том (volume)"

и "раздел (partition)", позволяя файловым системам занимать один и тот же пул.

Уничтожьте файловые системы, потом уничтожьте пул, так как в них уже нет нуж-

ды:

# zfs destroy example/compressed

# zfs destroy example/data

# zpool destroy example

Жесткие диски со временем выходят из строя, это неизбежно. Когда этот диск вый-

дет из строя, данные будут утеряны. Одним из способов избежать потери данных

из-за вышедшего из строя жесткого диска является построение RAID массивов. ZFS

Использование ZFS

732

поддерживает эту функциональную возможность в своем дизайне, и это описано в

следующем разделе.

19.2.2.2. ZFS RAID-Z

Как уже было сказано выше, в этой статье подразумевается, что в нашей системе

в распоряжении есть три SCSI диска: da0, da1 и da2 (или ad0 и далее в случае IDE

дисков). Для того, чтобы создать RAID-Z пул, выполните следующую команду:

# zpool create storage raidz da0 da1 da2

Примечание

Sunрекомендует использовать от трех до девяти жестких

дисков в конфигурации RAID-Z. Если есть необходимость в ис-

пользовании 10 или более дисков, подумайте над тем, чтобы

разбить их на меньшие группы RAID-Z. Если у вас есть толь-

ко два диска и вам всё-таки требуется избыточность, возмож-

но лучшим вариантом будет создание ZFS зеркала. Смотрите

страницу справочника zpool(8) для получения более подроб-

ных сведений.

По завершении команды должен создаться пул storage . Как и прежде, это может

быть проверено при помощи команд mount(8) и df(1). Больше дисковых устройств

может быть задействовано путем добавления их в конец списка параметров ко-

манды, приведенной выше. Создайте в пуле новую файловую систему, называемую

home, в которой будут размещаться пользовательские файлы:

# zfs create storage/home

На данном этапе возможно активировать сжатие данных и организовать автомати-

ческое создание копий пользовательских домашних каталогов и файлов. Это может

быть достигнуто так же, как и ранее, при помощи следующих команд:

# zfs set copies=2 storage/home

# zfs set compression=gzip storage/home

Чтобы организовать в этой файловой системе хранение домашних каталогов поль-

зователей, скопируйте сюда их содержимое и создайте соответствующие символи-

ческие ссылки:

# cp -rp /home/* /storage/home

# rm -rf /home /usr/home

# ln -s /storage/home /home

# ln -s /storage/home /usr/home

Глава 19. Поддержка файловых систем

733

С этого момента пользовательские данные сохраняются на новой файловой систе-

ме /storage/home . Для проверки создайте учетную запись нового пользователя и

войдите ею в систему.

Попробуйте создать снимок (snapshot), к которому можно будет откатиться при

необходимости:

# zfs snapshot storage/home@08-30-08

Заметьте, что снимок (snapshot) захватит реальную файловую систему, а не домаш-

ний каталог или файл. Символ @ отделяет имя файловой системы или имя тома

от имени снимка. Когда возникнет необходимость восстановить пользовательские

домашние каталоги, выполните следующую команду:

# zfs rollback storage/home@08-30-08

Чтобы получить список имеющихся в наличии снимков, выполните команду ls в

каталоге .zfs/snapshot . Например, чтобы увидеть сделанный ранее снимок, вы-

полните следующую команду:

# ls /storage/home/.zfs/snapshot

Можно написать скрипт, выполняющий снимки пользовательских данных ежеме-

сячно; однако, со временем, они могут занять значительную часть дискового про-

странства. Предыдущий снимок может быть удален используя следующую коман-

ду:

# zfs destroy storage/home@08-30-08

Нет причины после наших экспериментов далее держать в текущем состоянии /

storage/home . Сделаем ее реальной файловой системой /home:

# zfs set mountpoint=/home storage/home

Выполнение команд df и mount покажет, что с этого момента операционная систе-

ма воспринимает нашу файловую систему как обычную /home:

# mount

/dev/ad0s1a on / (ufs, local)

devfs on /dev (devfs, local)

/dev/ad0s1d on /usr (ufs, local, soft-updates)

storage on /storage (zfs, local)

storage/home on /home (zfs, local)

# df

Filesystem 1K-blocks Used Avail Capacity Mounted on

/dev/ad0s1a 2026030 235240 1628708 13% /

devfs 1 1 0 100% /dev

/dev/ad0s1d 54098308 1032826 48737618 2% /usr

storage 26320512 0 26320512 0% /storage

storage/home 26320512 0 26320512 0% /home

Использование ZFS

734

На этом завершим конфигурацию RAID-Z. Чтобы во время ночных запусков

periodic(8) получать информацию о статусе созданных файловых систем, выполни-

те следующую команду:

# echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf

19.2.2.3. Восстановление RAID-Z

Каждая система программных RAID массивов предоставляет возможность отобра-

жать информацию о своем состоянии. ZFS - не исключение. Статус устройств RAIDZ

может быть просмотрен при помощи следующей команды:

# zpool status -x

Если пулы исправны и всё нормально, возвратится следующее сообщение:

all pools are healthy

А если есть какие-то неполадки, например диск выведен из массива, возвращенное

состояние пула будет подобным следующему:

pool: storage

state: DEGRADED

status: One or more devices has been taken offline by the ↺

administrator.

Sufficient replicas exist for the pool to continue functioning in a

degraded state.

action: Online the device using 'zpool online' or replace the ↺

device with

'zpool replace'.

scrub: none requested

config:

NAME STATE READ WRITE CKSUM

storage DEGRADED 0 0 0

raidz1 DEGRADED 0 0 0

da0 ONLINE 0 0 0

da1 OFFLINE 0 0 0

da2 ONLINE 0 0 0

errors: No known data errors

Вывод показывает, что устройство было переведено в автономный режим админи-

стратором. Это верно для данного отдельного примера. Чтобы перевести диск в ав-

тономный режим, была выполнена команда:

# zpool offline storage da1

Теперь после останова системы возможно заменить da1. Когда система загрузится

снова, выполните следующую команду чтобы заменить диск в массиве:

Глава 19. Поддержка файловых систем

735

# zpool replace storage da1

С этого момента статус может быть проверен опять и на этот раз без флага -x:

# zpool status storage

pool: storage

state: ONLINE

scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008

config:

NAME STATE READ WRITE CKSUM

storage ONLINE 0 0 0

raidz1 ONLINE 0 0 0

da0 ONLINE 0 0 0

da1 ONLINE 0 0 0

da2 ONLINE 0 0 0

errors: No known data errors

В выводе сообщается, что при перестроении массива ошибок обнаружено не было.

19.2.2.4. Проверка данных

Как уже было сказано ранее, ZFS использует контрольные суммы для проверки це-

лостности сохраненных данных. Подсчет и сохранение контрольных сумм включа-

ется автоматически во время создания файловых систем и может быть отключен

при помощи команды:

# zfs set checksum=off storage/home

Отключение подсчета контрольных сумм - не очень хорошая идея; особенно ввиду

того, что они занимают мало места, а также при их использовании нет существен-

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

верки целостности данных ZFS, используя контрольные суммы. Этот процесс изве-

стен как «очистка (scrubbing)». Чтобы проверить целостность данных пула storage ,

выполните следующую команду:

# zpool scrub storage

Этот процесс может занять значительное время в зависимости от количества со-

хранённых данных. Очистка (scrubbing) порождает интенсивный ввод/вывод, по-

этому только один экземпляр этой операции может выполняться в один момент

времени. После завершения очистки (scrubbing) статус обновится, его можно про-

смотреть выполнив следующий запрос:

# zpool status storage

pool: storage

state: ONLINE

scrub: scrub completed with 0 errors on Sat Aug 30 19:57:37 2008

config:

Использование ZFS

736

NAME STATE READ WRITE CKSUM

storage ONLINE 0 0 0

raidz1 ONLINE 0 0 0

da0 ONLINE 0 0 0

da1 ONLINE 0 0 0

da2 ONLINE 0 0 0

errors: No known data errors

Время завершения отображается в простом виде в этом примере. Очистка помогает

удостовериться в целостности данных на протяжении длительного времени.

В этом разделе была освещена лишь малая часть возможностей ZFS. За более по-

дробной информацией обратитесь к страницам справочника zfs(8) и zpool(8).