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).
|