Пример 18-1. Установка меток на разделы загрузочного диска



Установка и задействование постоянных меток на разделах загрузочного диска предоставит возможность операционной системе загружаться нормально в том случае, если диск был переключен на другой контроллер, или даже переставлен на другую машину. В этом примере был задействован один диск ATA, определяемый системой как ad0. Также в примере подразумевается, что система использует типичную для FreeBSD схему разделения дискового пространства на слайсы и размещения на них файловых систем /, /var, /usr, /tmp и раздела подкачки.

Перезагрузите систему, дождитесь меню загрузчика. Нажатием клавиши 4 выберите однопользовательский режим. Далее, введите следующие команды:

# glabel label rootfs /dev/ad0s1a

GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs

# glabel label var /dev/ad0s1d

GEOM_LABEL: Label for provider /dev/ad0s1d is label/var

# glabel label usr /dev/ad0s1f

GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr

# glabel label tmp /dev/ad0s1e

GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp

# glabel label swap /dev/ad0s1b

GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap

# exit

Система продолжит загрузку в многопользовательский режим. По завершении загрузки откройте файл /etc/fstab и замените в нём традиционные имена файлов устройств на соответствующие устройствам метки. Результат будет выглядеть подобно следующему:

# Device           Mountpoint FStype Options    Dump Pass#

/dev/label/swap    none       swap sw         0  0

/dev/label/rootfs  /          ufs rw         1  1

/dev/label/tmp     /tmp       ufs rw         2  2

/dev/label/usr     /usr          ufs rw         2  2

/dev/label/var     /var       ufs rw         2  2

Перезагрузите еще раз систему. Если всё прошло успешно, система загрузится как обычно, а вывод команды mount отобразит следующее:

# mount

/dev/label/rootfs on / (ufs, local)

devfs on /dev (devfs, local)

/dev/label/tmp on /tmp (ufs, local, soft-updates)

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

/dev/label/var on /var (ufs, local, soft-updates)

Начиная с FreeBSD 7.2, GEOM класс glabel(8) поддерживает новый тип меток для файловых систем UFS. Новый тип меток базируется на уникальных идентификаторах файловых систем, называемых ufsid. Во время загрузки системы они автоматически создаются и помещаются в каталог /dev/ufsid. Перечисление меток должным образом в файле /etc/fstab делает возможным монтирование разделов по значениям ufsid. Чтобы получить перечень файловых систем и соответствующих им меток ufsid, выполните команду glabel status:

% glabel status

             Name Status Components

ufsid/486b6fc38d330916 N/A ad4s1d

ufsid/486b6fc16926168e N/A ad4s1f

В данном примере ad4s1d содержит файловую систему /var, а ad4s1f соответствует файловой системе /usr. Эти файловые системы можно также монтировать, указав значения их ufsid в файле /etc/fstab:

/dev/ufsid/486b6fc38d330916   /var   ufs   rw   2 2

/dev/ufsid/486b6fc16926168e   /usr   ufs   rw   2 2

Таким способом могут быть смонтированы любые разделы с метками ufsid, что исключает необходимость создания постоянных меток вручную и в то же время позволяет воспользоваться преимуществами монтирования по меткам.

Журналирование UFS средствами GEOM

С выходом FreeBSD 7.0 был реализован долгожданный механизм ведения журналов для файловых систем. Сама реализация этого механизма осуществляется средствами системы GEOM, а конфигурирование выполняется утилитой gjournal(8).

Что такое журналирование? Журналирование сохраняет протокол транзакций файловой системы, то есть: изменения, составляющие логически завершенную операцию записи, сперва вносятся в журнал, а модификация метаданных и данных самого файла выполняется позже. В дальнейшем журнал может быть задействован для повторного выполнения транзакций на файловой системе с целью предотвращения нарушения целостности файловой системы.

Журналирование — это еще одним механизм предотвращения утери данных и нарушения целостности файловой системы. В отличие от механизма Soft Updates, который отслеживает и периодически сохраняет обновления метаданных, и механизма снэпшотов, который создает образ файловой системы, сам журнал хранится в специально отведенном для этой задачи пространстве диска, и, в некоторых случаях, может содержаться целиком на отдельном диске.

В отличие от других реализаций журналирования файловых систем, метод gjournal работает на блочном уровне, он не встроен в файловую систему; это лишь надстройка над системой GEOM.

Чтобы включить поддержку gjournal, в файле конфигурации ядра FreeBSD должна присутствовать следующая опция (включено по умолчанию для FreeBSD 7.0 и более поздних версий систем):

options UFS_GJOURNAL

Журналируемым устройствам, монтируемым во время загрузки системы, также потребуется модуль ядра geom_journal.ko. Внесите следующую запись в файл /boot/loader.conf:

geom_journal_load="YES"

В качестве альтернативы, функции вышеупомянутого модуля можно встроить в специализированное ядро. Для этого добавьте следующую опцию в файл конфигурации ядра:

options GEOM_JOURNAL

Для создания журнала на новой файловой системе выполните следующие шаги (здесь и далее подразумевается, что da4 есть новый SCSI диск):

# gjournal load

# gjournal label /dev/da4

На этом этапе в каталоге /dev должны присутствовать файлы устройств /dev/da4 и /dev/da4.journal. Теперь необходимо создать файловую систему:

# newfs -O 2 -J /dev/da4.journal

Предыдущая команда создаст файловую систему UFS2 на журналируемом устройстве.

Смонтируйте устройство в требуемый каталог файловой системы:

# mount /dev/da4.journal /mnt

Замечание: В случае наличия нескольких слайсов, журнал создается для каждого из них. Например, если есть два слайса, и они называются ad4s1 и ad4s2, то утилитой gjournal создаются файлы устройств ad4s1.journal и ad4s2.journal.

Для увеличения производительности может потребоваться хранение журнала на отдельном диске. В таких случаях необходимо указать имя поставщика журнала или устройства хранения после имени устройства, на котором планируется включение журналирования. Журналирование также может быть активировано утилитой tunefs на действующих файловых системах; однако, всегда создавайте резервную копию перед попытками изменить настройки файловой системы. В большинстве случаев, выполнение команды gjournal завершится ошибкой, если создание журнала невозможно, в то время как некорректное использование команды tunefs не защитит против потери данных.

Также возможно журналирование загрузочного диска системы FreeBSD. За детальными инструкциями по этой возможности обратитесь к статье Настройка журналирования UFS для настольного компьютера (http://www.FreeBSD.org/doc/ru_RU.KOI8-R/articles/gjournal-desktop).


Глава 19.

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

Краткий обзор

Файловые системы — неотъемлемая часть любой операционной системы. Они позволяют пользователям записывать и хранить файлы, получать доступ к данным, и, конечно-же, пользоваться жесткими дисками. У разных операционных систем есть одна общая черта — их основная файловая система (native filesystem). Для FreeBSD это Fast File System (или FFS), которая произошла от Unix™ File System (сокращенно UFS).

FreeBSD также поддерживает ряд других файловых систем, тем самым предоставляя возможность получать доступ к данным от других операционных систем локально, например: к данным, находящимся на подключенных USB устройствах хранения, флэш-накопителях и жестких дисках. В списке поддерживаемых есть файловые системы, разработанные для других операционных систем, например Linux Extended File System (EXT) и Sun Z File System (ZFS).

FreeBSD имеет разные уровни поддержки для разных файловых систем. Для некоторых будет достаточно загрузки модуля ядра, другим может потребоваться установка набора утилит (toolset). Цель этого раздела — дать представления пользователям FreeBSD о возможностях использования других файловых систем на их операционных системах. Начнем с Sun Z file system.

После прочтения этого раздела вы будете знать:

• Разницу между основной и поддерживаемой файловой системой.

• Какие файловые системы поддерживаются FreeBSD.

• Как подключить, сконфигурировать, получить доступ и использовать поддерживаемые файловые системы.

Перед прочтением этого раздела вам необходимо:

• Понимать основы UNIX и FreeBSD (Гл. 3).

• Знать азы конфигурирования и компиляции ядра (Гл. 8).

• Уметь устанавливать приложения сторонних разработчиков в FreeBSD (Гл. 4).

• Быть знакомым с именованием дисков и устройств хранения в FreeBSD (Гл. 17).

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

Файловая система ZFS, разработанная компанией Sun, основана на использовании метода пулов устройств хранения данных. Это значит, что емкость носителя занимается только тогда, когда она становится необходимой для сохранения данных. ZFS также была разработана с упором на максимальную целостность данных, поддерживая снимки (snapshot), множество копий и контрольные суммы данных. Новая модель репликации данных, известная как RAID-Z, подобна RAID-5, но специально разработана для предотвращения повреждений данных при записи.

Настройка ZFS

Подсистема ZFS занимает значительную часть ресурсов системы. Чтобы получить от нее максимум эффективности в повседневном использовании, потребуется выполнить некоторые настройки. ZFS является экспериментальной функциональной возможностью в FreeBSD, но ситуация может измениться в ближайшем будущем; однако на данный момент рекомендуется выполнить следующие шаги.

Память

Общий размер ОЗУ должен быть как минимум равен одному гигабайту, хотя рекомендуется два гигабайта или более. Во всех нижеследующих примерах используется система с 1ГБ памяти совместно с другими специальными настройками.

Известно, что некоторые пользователи преуспели в использовании ZFS на системах, имеющих менее одного гигабайта памяти, но с таким ограниченным объемом ОЗУ и при серьезной загрузке машины очень вероятны паники FreeBSD из-за нехватки памяти.

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

Рекомендуется исключить из файла конфигурации ядра неиспользуемые драйвера и опции. Так как большинство драйверов устройств доступно в виде модулей, то они просто могут быть загружены с помощью соответствующих записей в файле /boot/loader.conf.

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

options    KVA_PAGES=512

Эта опция расширит адресное пространство ядра, тем самым позволяя переменной vm.kvm_size быть установленной за текущий предел в 1 ГБ (2 ГБ для PAE). Чтобы найти наиболее подходящее значение для этой опции, разделите имеющийся объем ОЗУ, выраженный в мегабайтах, на 4. Приведенное выше значение 512 рекомендуется для систем с 2 ГБ оперативной памяти.

Параметры 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.

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

Существует стартовый механизм, позволяющий монтировать ZFS пулы во время инициализации системы. Чтобы его задействовать, выполните следующие команды:

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

# /etc/rc.d/zfs start

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

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

Для создания простого пула 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

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

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

С этого момента пользовательские данные сохраняются на новой файловой системе /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

На этом завершим конфигурацию RAID-Z. Чтобы во время ночных запусков periodic(8) получать информацию о статусе созданных файловых систем, выполните следующую команду:

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

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

Каждая система программных RAID массивов предоставляет возможность отображать информацию о своем состоянии. ZFS — не исключение. Статус устройств RAID-Z может быть просмотрен при помощи следующей команды:

# 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. Когда система загрузится снова, выполните следующую команду чтобы заменить диск в массиве:

# 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

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

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

Как уже было сказано ранее, 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:

 

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


Глава 20.


Дата добавления: 2018-10-26; просмотров: 211; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!