diff options
Diffstat (limited to 'documentation/content/ru/books/handbook/geom/_index.adoc')
| -rw-r--r-- | documentation/content/ru/books/handbook/geom/_index.adoc | 1020 |
1 files changed, 794 insertions, 226 deletions
diff --git a/documentation/content/ru/books/handbook/geom/_index.adoc b/documentation/content/ru/books/handbook/geom/_index.adoc index b9462c1782..2ca21627fa 100644 --- a/documentation/content/ru/books/handbook/geom/_index.adoc +++ b/documentation/content/ru/books/handbook/geom/_index.adoc @@ -1,23 +1,25 @@ --- -title: "Глава 18. GEOM: Модульная инфраструктура преобразования дисковых запросов" -part: Часть III. Системное администрирование +description: 'В FreeBSD инфраструктура GEOM предоставляет доступ и управление классами, такими как главная загрузочная запись (MBR) и метки BSD, через использование провайдеров или устройств дисков в `/dev`.' +next: books/handbook/zfs +params: + path: /books/handbook/geom/ +part: 'Часть III. Администрирование системы' prev: books/handbook/disks -next: books/handbook/filesystems showBookMenu: true -weight: 22 -params: - path: "/books/handbook/geom/" +tags: ["GEOM", "RAID", "RAID0", "RAID1", "RAID3", "Striping", "bsdlabel", "newfs", "labelling", "UFS", "journaling"] +title: 'Глава 21. GEOM: Модульная инфраструктура трансформации дискового пространства' +weight: 25 --- [[geom]] -= GEOM: Модульная инфраструктура преобразования дисковых запросов += GEOM: Модульная инфраструктура трансформации дискового пространства :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 -:sectnumoffset: 18 +:sectnumoffset: 21 :partnums: :source-highlighter: rouge :experimental: @@ -47,360 +49,941 @@ toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] -[[GEOM-synopsis]] -== Краткий обзор +[[geom-synopsis]] +== Обзор + +В FreeBSD система GEOM обеспечивает доступ и управление классами, такими как главная загрузочная запись (MBR) и метки BSD, через использование провайдеров или дисковых устройств в [.filename]#/dev#. Поддерживая различные конфигурации программного RAID, GEOM прозрачно предоставляет доступ операционной системе и системным утилитам. -Эта глава описывает использование дисков, управляемых инфраструктурой GEOM во FreeBSD. Среди прочего, здесь описывается большая часть утилит управления RAID, использующих GEOM для настройки. В этой главе мы не будем вдаваться в подробности взаимодействия GEOM с подсистемой ввода/вывода или с программным кодом, эту информацию вы можете получить на странице справочника man:geom[4]. Эта глава также не является подробным руководством по настройке RAID. Мы обсудим только типы RAID, поддерживаемые GEOM. +В этой главе рассматривается использование дисков в рамках системы GEOM в FreeBSD. Это включает основные утилиты управления RAID, которые используют данную систему для настройки. Данная глава не является исчерпывающим руководством по конфигурациям RAID и рассматривает только поддерживаемые GEOM классификации RAID. -После прочтения этой главы вы будете знать: +Прочитав эту главу, вы будете знать: -* Какие типы RAID поддерживает GEOM. -* Как использовать стандартные утилиты для настройки, обслуживания и управления различными уровнями RAID. -* Как с помощью GEOM создавать зеркальные, последовательные и шифрованные дисковые последовательности, а так же последовательности из дисков, присоединённых удалённо. -* Как решать проблемы с дисками, присоединёнными к инфраструктуре GEOM. +* Какой тип поддержки RAID доступен через GEOM. +* Как использовать базовые утилиты для настройки, обслуживания и управления различными уровнями RAID. +* Как зеркалировать, чередовать, шифровать и удалённо подключать дисковые устройства с помощью GEOM. +* Как устранять неполадки с дисками, подключенными к системе GEOM. -Перед чтением этой главы вы должны: +Прежде чем читать эту главу, вы должны: -* Понимать, как FreeBSD работает с дисками (crossref:disks[disks, Устройства хранения]). -* Уметь сконфигурировать и установить новое ядро FreeBSD (crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD]). +* Понимание того, как FreeBSD работает с дисковыми устройствами (crossref:disks[disks,Хранение данных]). +* Знать, как настроить и установить новый ядро (crossref:kernelconfig[kernelconfig,Настройка ядра FreeBSD]). -[[GEOM-intro]] -== Введение в GEOM +[[geom-striping]] +== RAID0 - Striping -GEOM позволяет классам - MBR, BSD labels, и так далее - получить доступ к устройству и управлять им, используя поставщиков GEOM (providers) или специальные файлы устройств, расположенные в каталоге [.filename]#/dev#. GEOM поддерживает различные программные конфигурации RAID, и прозрачно предоставляет доступ к дискам системе и системным приложениям. +Чередование объединяет несколько дисков в один том. Чередование может быть выполнено с использованием аппаратных RAID-контроллеров. Подсистема GEOM предоставляет программную поддержку чередования дисков, также известного как RAID0, без необходимости в RAID-контроллере. -[[GEOM-striping]] -== RAID0 - Создание дисковой последовательности (Striping) +В RAID0 данные разбиваются на блоки, которые записываются на все диски массива. Как показано на следующей иллюстрации, вместо ожидания записи 256 КБ на один диск, RAID0 может одновременно записать по 64 КБ на каждый из четырех дисков массива, обеспечивая высокую производительность ввода-вывода. Эту производительность можно дополнительно повысить, используя несколько контроллеров дисков. -Создание дисковой последовательности (Striping) - метод, применяемый, чтобы скомбинировать несколько физических дисков в один логический. Во многих случаях это делается с использованием аппаратных контроллеров. Дисковая подсистема GEOM предоставляет программную поддержку RAID0, иногда называемую дисковой последовательностью (Stripe). +image::striping.png["Иллюстрация чередования дисков"] -В RAID уровня 0 данные разбиваются на блоки, которые параллельно записываются на все диски массива. Вместо того, чтобы ждать записи 256k на один диск, RAID0 может параллельно записывать по 64k на каждый из четырёх дисков, обеспечивая более высокую производительность ввода/вывода. Производительность также может быть увеличена за счет использования большего числа дисков. +Каждый диск в дисковой последовательности RAID0 должен быть одинакового размера, поскольку запросы ввода-вывода чередуются для чтения или записи на несколько дисков параллельно. -Все диски последовательности RAID0 должны быть одного размера, так как запись и считывание с дисков происходят параллельно. +[NOTE] +==== +RAID0 _не_ обеспечивает избыточности. Это означает, что если один диск в массиве выйдет из строя, все данные на дисках будут потеряны. Если данные важны, реализуйте стратегию резервного копирования, которая регулярно сохраняет резервные копии на удалённую систему или устройство. +==== -image::striping.png[Иллюстрация дисковой последовательности] +Процесс создания программного RAID0 на основе GEOM в системе FreeBSD с использованием обычных дисков выглядит следующим образом. После создания дисковой последовательности обратитесь к man:gstripe[8] для получения дополнительной информации о том, как управлять существующей дисковой последовательностью. [.procedure] -==== -*Procedure: Создание дисковой последовательности из неформатированных ATA дисков* +**** +*Procedure: Creating a Stripe of Unformatted ATA Disks* . Загрузите модуль [.filename]#geom_stripe.ko#: + -[source,shell] +[source, shell] .... # kldload geom_stripe .... + +. Убедитесь, что существует подходящая точка монтирования. Если этот том будет использоваться как корневой раздел, временно используйте другую точку монтирования, например, [.filename]#/mnt#. +. Определите имена устройств для дисков, которые будут объединены в дисковую последовательность, и создайте новое устройство для последовательности. Например, для объединения в последовательность двух неиспользуемых и неразмеченных ATA-дисков с именами устройств [.filename]#/dev/ad2# и [.filename]#/dev/ad3#: + -. Убедитесь, что существует подходящая точка монтирования. Если вы планируете сделать логический диск корневым разделом, используйте временную точку монтирования, например [.filename]#/mnt#: -+ -[source,shell] -.... -# mkdir /mnt -.... -+ -. Определите имена устройств, которые будут объединены в последовательность, и создайте новое устройство для последовательности. Например, чтобы создать дисковую последовательность из двух неиспользуемых и неразмеченных ATA дисков, например [.filename]#/dev/ad2# и [.filename]#/dev/ad3#: -+ -[source,shell] +[source, shell] .... # gstripe label -v st0 /dev/ad2 /dev/ad3 Metadata value stored on /dev/ad2. Metadata value stored on /dev/ad3. Done. .... + +. Запишите стандартную метку, также известную как таблица разделов, на новый том и установите код начальной загрузки по умолчанию: + -. Запишите стандартную метку, также известную как таблица разделов, в новый том, и установите стандартный загрузчик: -+ -[source,shell] +[source, shell] .... # bsdlabel -wB /dev/stripe/st0 .... + +. Этот процесс должен создать два дополнительных устройства в [.filename]#/dev/stripe# помимо [.filename]#st0# — [.filename]#st0a# и [.filename]#st0c#. На этом этапе можно создать файловую систему UFS на [.filename]#st0a# с помощью команды `newfs`: + -. Теперь в [.filename]#/dev/stripe# кроме [.filename]#st0# появились ещё два устройства - [.filename]#st0a# и [.filename]#st0c#. Теперь создайте файловую систему на устройстве [.filename]#st0a#, используя утилиту `newfs`: -+ -[source,shell] +[source, shell] .... # newfs -U /dev/stripe/st0a .... -+ -На экране промелькнет множество цифр, и через несколько секунд процесс будет завершен. Логический диск создан и готов к монтированию. ++ +По экрану пройдёт множество чисел, и через несколько секунд процесс завершится. Том создан и готов к монтированию. +. Чтобы вручную смонтировать созданную дисковую последовательность: ++ +[source, shell] +.... +# mount /dev/stripe/st0a /mnt +.... + +. Для автоматического монтирования этой чередующейся файловой системы во время загрузки добавьте информацию о томе в [.filename]#/etc/fstab#. В этом примере создается постоянная точка монтирования с именем [.filename]#stripe#: ++ +[source, shell] +.... +# mkdir /stripe +# echo "/dev/stripe/st0a /stripe ufs rw 2 2" \ +>> /etc/fstab +.... + +. Модуль [.filename]#geom_stripe.ko# также должен автоматически загружаться при инициализации системы, добавив строку в [.filename]#/boot/loader.conf#: ++ +[source, shell] +.... +# echo 'geom_stripe_load="YES"' >> /boot/loader.conf +.... +**** + +[[geom-mirror]] +== RAID1 - Зеркалирование + +RAID1, или _зеркалирование_, — это техника записи одних и тех же данных на несколько дисковых накопителей. Зеркала обычно используются для защиты от потери данных из-за выхода диска из строя. Каждый диск в зеркале содержит идентичную копию данных. При отказе одного из дисков зеркало продолжает работать, предоставляя данные с оставшихся исправных дисков. Компьютер продолжает функционировать, а администратор имеет возможность заменить вышедший из строя диск без прерывания работы пользователей. + +В этих примерах показаны две распространённые ситуации. Первый пример создаёт зеркало из двух новых дисков и использует его для замены существующего одиночного диска. Второй пример создаёт зеркало на одном новом диске, копирует на него данные со старого диска, а затем добавляет старый диск в зеркало. Хотя эта процедура немного сложнее, она требует только одного нового диска. + +Традиционно два диска в зеркале имеют одинаковую модель и объем, но man:gmirror[8] не требует этого. Зеркала, созданные с разными дисками, будут иметь объем, равный объему наименьшего диска в зеркале. Дополнительное место на более крупных дисках останется неиспользуемым. Диски, добавляемые в зеркало позже, должны иметь объем не меньше, чем у наименьшего диска, уже находящегося в зеркале. + +[WARNING] +==== +Приведённые здесь процедуры зеркалирования являются неразрушающими, но, как и при любых операциях с дисками, сначала создайте полную резервную копию. ==== -Смонтируйте его вручную: +[WARNING] +==== +В этих процедурах используется man:dump[8] для копирования файловых систем, однако он не работает с файловыми системами, использующими журналирование мягких обновлений. Информацию о том, как обнаружить и отключить журналирование мягких обновлений, смотрите в man:tunefs[8]. +==== + +[[geom-mirror-metadata]] +=== Проблемы с метаданными + +Многие дисковые системы хранят метаданные в конце каждого диска. Старые метаданные следует стереть перед повторным использованием диска для зеркала. Большинство проблем вызвано двумя конкретными типами оставшихся метаданных: таблицами разделов GPT и старыми метаданными от предыдущего зеркала. + +Метаданные GPT можно удалить с помощью man:gpart[8]. В этом примере удаляются как основная, так и резервная таблицы разделов GPT с диска [.filename]#ada8#: -[source,shell] +[source, shell] .... -# mount /dev/stripe/st0a /mnt +# gpart destroy -F ada8 .... -Чтобы монтировать созданную дисковую последовательность автоматически во время загрузки, добавьте информацию о ней в файл [.filename]#/etc/fstab#. Создайте постоянную точку монтирования и назовите её, к примеру, [.filename]#stripe#: +Диск может быть удален из активного зеркала, а его метаданные стерты за один шаг с помощью man:gmirror[8]. В этом примере диск [.filename]#ada8# удаляется из активного зеркала [.filename]#gm4#: -[source,shell] +[source, shell] .... -# mkdir /stripe -# echo "/dev/stripe/st0a /stripe ufs rw 2 2" \ - >> /etc/fstab +# gmirror remove gm4 ada8 .... -Чтобы модуль [.filename]#geom_stripe.ko# автоматически загружался во время инициализации системы, добавьте строку в [.filename]#/boot/loader.conf#: +Если зеркало не запущено, но старые метаданные зеркала остались на диске, используйте `gmirror clear` для их удаления: -[source,shell] +[source, shell] .... -# echo 'geom_stripe_load="YES"' >> /boot/loader.conf +# gmirror clear ada8 .... -[[GEOM-mirror]] -== RAID1 - Зеркалирование (Mirroring) +man:gmirror[8] хранит один блок метаданных в конце диска. Поскольку схемы разделов GPT также хранят метаданные в конце диска, зеркалирование целых GPT-дисков с помощью man:gmirror[8] не рекомендуется. Здесь используется разделение MBR, так как оно хранит таблицу разделов только в начале диска и не конфликтует с метаданными зеркала. -Зеркалирование (Mirroring) - технология, применяемая как в корпоративной среде, так и на домашних компьютерах. Она позволяет создавать резервные копии "на лету". Зеркалирование, по сути, означает, что диск A является копией диска B. Или, возможно, диск C+D является копией диска A+B. Вне зависимости от конфигурации, основной аспект - дублирование информации. Позже, эта информация может быть с легкостью восстановлена или сохранена как резервная копия без остановки системы, или даже физически помещена в хранилище данных. +[[geom-mirror-two-new-disks]] +=== Создание зеркала с двумя новыми дисками -Перед началом, убедитесь, что у вас есть два физических диска равной емкости. Далее в этом примере подразумевается, что это диски прямого доступа (direct access, man:da[4]) с интерфейсом SCSI. +В этом примере FreeBSD уже установлена на одном диске [.filename]#ada0#. К системе подключены два новых диска — [.filename]#ada1# и [.filename]#ada2#. На этих дисках будет создано новое зеркало, которое заменит старый одиночный диск. -=== Зеркалирование первичных дисков +Модуль ядра [.filename]#geom_mirror.ko# должен быть либо встроен в ядро, либо загружен при загрузке или во время работы. Вручную загрузите модуль ядра сейчас: -В статье предполагается, что FreeBSD установлена на первый жесткий диск, определяемый системой как [.filename]#da0#. Это устройство будет целевым для утилиты man:gmirror[8]. +[source, shell] +.... +# gmirror load +.... -Перед построением зеркала включите дополнительную отладочную информацию и откройте доступ к устройству. Это достигается установкой следующего значения переменной man:sysctl[8] `kern.geom.debugflags`: +Создайте зеркало с двумя новыми дисками: -[source,shell] +[source, shell] .... -# sysctl kern.geom.debugflags=17 +# gmirror label -v gm0 /dev/ada1 /dev/ada2 .... -Теперь создайте зеркало. Начните процесс с сохранения метаданных на первом диске. В результате выполнения следующей команды будет создано устройство вида [.filename]#/dev/mirror/gm#: +[.filename]#gm0# — это выбранное пользователем имя устройства, назначенное новому зеркалу. После запуска зеркала это имя устройства появляется в [.filename]#/dev/mirror/#. -[WARNING] -==== +Теперь таблицы разделов MBR и bsdlabel можно создавать на зеркале с помощью man:gpart[8]. В этом примере используется традиционная структура файловой системы с разделами для [.filename]#/#, swap, [.filename]#/var#, [.filename]#/tmp# и [.filename]#/usr#. Также подойдёт одиночный раздел [.filename]#/# и раздел подкачки. -Создание зеркала на диске, с которого произведена загрузка, может повлечь за собой потерю данных в том случае, если данными занят последний сектор диска. Риск повреждения данных меньше, если создание зеркала немедленно следует за свежей установкой FreeBSD. -==== +Разделы на зеркале не обязательно должны быть такого же размера, как и на существующем диске, но они должны быть достаточно большими, чтобы вместить все данные, уже находящиеся на [.filename]#ada0#. -[source,shell] +[source, shell] .... -# gmirror label -vb round-robin gm0 /dev/da0 +# gpart create -s MBR mirror/gm0 +# gpart add -t freebsd -a 4k mirror/gm0 +# gpart show mirror/gm0 +=> 63 156301423 mirror/gm0 MBR (74G) + 63 63 - free - (31k) + 126 156301299 1 freebsd (74G) + 156301425 61 - free - (30k) .... -Система должна выдать следующее сообщение: +[source, shell] +.... +# gpart create -s BSD mirror/gm0s1 +# gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1 +# gpart add -t freebsd-swap -a 4k -s 4g mirror/gm0s1 +# gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1 +# gpart add -t freebsd-ufs -a 4k -s 1g mirror/gm0s1 +# gpart add -t freebsd-ufs -a 4k mirror/gm0s1 +# gpart show mirror/gm0s1 +=> 0 156301299 mirror/gm0s1 BSD (74G) + 0 2 - free - (1.0k) + 2 4194304 1 freebsd-ufs (2.0G) + 4194306 8388608 2 freebsd-swap (4.0G) + 12582914 4194304 4 freebsd-ufs (2.0G) + 16777218 2097152 5 freebsd-ufs (1.0G) + 18874370 137426928 6 freebsd-ufs (65G) + 156301298 1 - free - (512B) +.... + +Сделайте зеркало загружаемым, установив загрузочный код в MBR и bsdlabel, а также настроив активный раздел: -[source,shell] +[source, shell] .... -Metadata value stored on /dev/da0. -Done. +# gpart bootcode -b /boot/mbr mirror/gm0 +# gpart set -a active -i 1 mirror/gm0 +# gpart bootcode -b /boot/boot mirror/gm0s1 +.... + +Отформатируйте файловые системы на новом зеркале, включив мягкие обновления. + +[source, shell] +.... +# newfs -U /dev/mirror/gm0s1a +# newfs -U /dev/mirror/gm0s1d +# newfs -U /dev/mirror/gm0s1e +# newfs -U /dev/mirror/gm0s1f +.... + +Файловые системы с исходного диска [.filename]#ada0# теперь можно скопировать на зеркало с помощью man:dump[8] и man:restore[8]. + +[source, shell] +.... +# mount /dev/mirror/gm0s1a /mnt +# dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -) +# mount /dev/mirror/gm0s1d /mnt/var +# mount /dev/mirror/gm0s1e /mnt/tmp +# mount /dev/mirror/gm0s1f /mnt/usr +# dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -) +# dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp && restore -rf -) +# dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -) +.... + +Отредактируйте файл [.filename]#/mnt/etc/fstab#, чтобы он указывал на файловые системы нового зеркала: + +[.programlisting] +.... +# Device Mountpoint FStype Options Dump Pass# +/dev/mirror/gm0s1a / ufs rw 1 1 +/dev/mirror/gm0s1b none swap sw 0 0 +/dev/mirror/gm0s1d /var ufs rw 2 2 +/dev/mirror/gm0s1e /tmp ufs rw 2 2 +/dev/mirror/gm0s1f /usr ufs rw 2 2 .... -Инициализируйте GEOM, это повлечет за собой загрузку модуля ядра [.filename]#/boot/kernel/geom_mirror.ko#: +Если модуль ядра [.filename]#geom_mirror.ko# не встроен в ядро, файл [.filename]#/mnt/boot/loader.conf# редактируется для загрузки модуля при старте системы: -[source,shell] +[.programlisting] +.... +geom_mirror_load="YES" +.... + +Перезагрузите систему, чтобы проверить новое зеркало и убедиться, что все данные скопированы. BIOS увидит зеркало как два отдельных диска, а не как зеркало. Поскольку диски идентичны, не имеет значения, какой из них выбран для загрузки. + +См. crossref:geom[gmirror-troubleshooting, Устранение неполадок], если возникли проблемы с загрузкой. Отключение питания и извлечение исходного диска [.filename]#ada0# позволит сохранить его в качестве автономной резервной копии. + +При использовании зеркало будет вести себя так же, как исходный одиночный диск. + +[[geom-mirror-existing-drive]] +=== Создание зеркала с существующим диском + +В этом примере FreeBSD уже установлена на одном диске [.filename]#ada0#. К системе подключён новый диск [.filename]#ada1#. На новом диске будет создано однодисковое зеркало, существующая система скопирована на него, после чего старый диск будет добавлен в зеркало. Эта несколько сложная процедура необходима, потому что `gmirror` требует размещения 512-байтового блока метаданных в конце каждого диска, а на существующем [.filename]#ada0# обычно всё пространство уже занято. + +Загрузите модуль ядра [.filename]#geom_mirror.ko#: + +[source, shell] .... # gmirror load .... -[NOTE] -==== -После успешного завершения команды будет создано устройство [.filename]#gm0# в каталоге [.filename]#/dev/mirror#. -==== +Проверьте размер носителя исходного диска с помощью `diskinfo`: -Включите автоматическую загрузку модуля [.filename]#geom_mirror.ko# во время старта операционной системы: +[source, shell] +.... +# diskinfo -v ada0 | head -n3 +/dev/ada0 + 512 # sectorsize + 1000204821504 # mediasize in bytes (931G) +.... + +Создайте зеркало на новом диске. Чтобы убедиться, что объем зеркала не превышает объем исходного диска [.filename]#ada0#, используется man:gnop[8] для создания виртуального диска того же размера. Этот диск не хранит данных, а служит только для ограничения размера зеркала. Когда man:gmirror[8] создает зеркало, он ограничит объем до размера [.filename]#gzero.nop#, даже если новый диск [.filename]#ada1# имеет больше места. Обратите внимание, что число _1000204821504_ во второй строке соответствует размеру носителя [.filename]#ada0#, показанному командой `diskinfo` выше. -[source,shell] +[source, shell] .... -# echo 'geom_mirror_load="YES"' >> /boot/loader.conf +# geom zero load +# gnop create -s 1000204821504 gzero +# gmirror label -v gm0 gzero.nop ada1 +# gmirror forget gm0 .... -Отредактируйте файл [.filename]#/etc/fstab#, заменив в нём упоминания старого имени устройства [.filename]#da0# новым именем устройства зеркала [.filename]#gm0#. +Поскольку [.filename]#gzero.nop# не хранит никаких данных, зеркало не считает его подключенным. Зеркалу указывается «забыть» неподключенные компоненты, удаляя ссылки на [.filename]#gzero.nop#. В результате получается зеркальное устройство, содержащее только один диск — [.filename]#ada1#. -[NOTE] -==== -Если man:vi[1] - ваш любимый текстовый редактор, то эта задача решается просто: +После создания [.filename]#gm0# просмотрите таблицу разделов на [.filename]#ada0#. Этот вывод сделан для диска объемом 1 ТБ. Если в конце диска осталось нераспределенное пространство, содержимое можно скопировать напрямую с [.filename]#ada0# на новое зеркало. + +Однако, если вывод показывает, что всё пространство на диске занято, как в следующем примере, то для метаданных зеркала размером 512 байт в конце диска не остаётся места. -[source,shell] +[source, shell] .... -# vi /etc/fstab +# gpart show ada0 +=> 63 1953525105 ada0 MBR (931G) + 63 1953525105 1 freebsd [active] (931G) .... -Сделайте резервную копию файла [.filename]#fstab#, набрав в man:vi[1] `:w /etc/fstab.bak`. Затем замените все части строк, содержащие имя устройства [.filename]#da0#, на имя [.filename]#gm0#, набрав `:%s/da/mirror\/gm/g`. -==== +В этом случае необходимо отредактировать таблицу разделов, уменьшив ёмкость на один сектор для [.filename]#mirror/gm0#. Процедура будет описана далее. + +В любом случае таблицы разделов на основном диске следует сначала скопировать с помощью `gpart backup` и `gpart restore`. + +[source, shell] +.... +# gpart backup ada0 > table.ada0 +# gpart backup ada0s1 > table.ada0s1 +.... + +Эти команды создают два файла, [.filename]#table.ada0# и [.filename]#table.ada0s1#. Этот пример приведен для диска объемом 1 ТБ: + +[source, shell] +.... +# cat table.ada0 +MBR 4 +1 freebsd 63 1953525105 [active] +.... + +[source, shell] +.... +# cat table.ada0s1 +BSD 8 +1 freebsd-ufs 0 4194304 +2 freebsd-swap 4194304 33554432 +4 freebsd-ufs 37748736 50331648 +5 freebsd-ufs 88080384 41943040 +6 freebsd-ufs 130023424 838860800 +7 freebsd-ufs 968884224 984640881 +.... + +Если в конце диска не отображается свободное пространство, размер и раздела, и последнего раздела должен быть уменьшен на один сектор. Отредактируйте два файла, уменьшив размер и раздела, и последнего раздела на единицу. Это последние числа в каждом списке. + +[source, shell] +.... +# cat table.ada0 +MBR 4 +1 freebsd 63 1953525104 [active] +.... + +[source, shell] +.... +# cat table.ada0s1 +BSD 8 +1 freebsd-ufs 0 4194304 +2 freebsd-swap 4194304 33554432 +4 freebsd-ufs 37748736 50331648 +5 freebsd-ufs 88080384 41943040 +6 freebsd-ufs 130023424 838860800 +7 freebsd-ufs 968884224 984640880 +.... + +Если хотя бы один сектор в конце диска был нераспределен, эти два файла можно использовать без изменений. + +Теперь восстановите таблицу разделов в [.filename]#mirror/gm0#: + +[source, shell] +.... +# gpart restore mirror/gm0 < table.ada0 +# gpart restore mirror/gm0s1 < table.ada0s1 +.... + +Проверьте таблицу разделов с помощью `gpart show`. В этом примере [.filename]#gm0s1a# для [.filename]#/#, [.filename]#gm0s1d# для [.filename]#/var#, [.filename]#gm0s1e# для [.filename]#/usr#, [.filename]#gm0s1f# для [.filename]#/data1# и [.filename]#gm0s1g# для [.filename]#/data2#. + +[source, shell] +.... +# gpart show mirror/gm0 +=> 63 1953525104 mirror/gm0 MBR (931G) + 63 1953525042 1 freebsd [active] (931G) + 1953525105 62 - free - (31k) + +# gpart show mirror/gm0s1 +=> 0 1953525042 mirror/gm0s1 BSD (931G) + 0 2097152 1 freebsd-ufs (1.0G) + 2097152 16777216 2 freebsd-swap (8.0G) + 18874368 41943040 4 freebsd-ufs (20G) + 60817408 20971520 5 freebsd-ufs (10G) + 81788928 629145600 6 freebsd-ufs (300G) + 710934528 1242590514 7 freebsd-ufs (592G) + 1953525042 63 - free - (31k) +.... + +Как срез, так и последний раздел должны иметь как минимум один свободный блок в конце диска. + +Создайте файловые системы на этих новых разделах. Количество разделов может варьироваться в соответствии с исходным диском, [.filename]#ada0#. + +[source, shell] +.... +# newfs -U /dev/mirror/gm0s1a +# newfs -U /dev/mirror/gm0s1d +# newfs -U /dev/mirror/gm0s1e +# newfs -U /dev/mirror/gm0s1f +# newfs -U /dev/mirror/gm0s1g +.... + +Сделайте зеркало загружаемым, установив загрузочный код в MBR и bsdlabel, а также настроив активный раздел: + +[source, shell] +.... +# gpart bootcode -b /boot/mbr mirror/gm0 +# gpart set -a active -i 1 mirror/gm0 +# gpart bootcode -b /boot/boot mirror/gm0s1 +.... -Независимо от аппаратного интерфейса дисков (SCSI или ATA), устройство RAID будет именоваться всегда одинаково - [.filename]#gm#. Содержимое файла [.filename]#fstab# должно выглядеть подобно следующему: +Настройте [.filename]#/etc/fstab# для использования новых разделов на зеркале. Сначала создайте резервную копию этого файла, скопировав его в [.filename]#/etc/fstab.orig#. + +[source, shell] +.... +# cp /etc/fstab /etc/fstab.orig +.... + +Отредактируйте файл [.filename]#/etc/fstab#, заменив [.filename]#/dev/ada0# на [.filename]#mirror/gm0#. [.programlisting] .... -# Device Mountpoint FStype Options Dump Pass# -/dev/mirror/gm0s1b none swap sw 0 0 -/dev/mirror/gm0s1a / ufs rw 1 1 -/dev/mirror/gm0s1d /usr ufs rw 0 0 -/dev/mirror/gm0s1f /home ufs rw 2 2 -#/dev/mirror/gm0s2d /store ufs rw 2 2 -/dev/mirror/gm0s1e /var ufs rw 2 2 -/dev/acd0 /cdrom cd9660 ro,noauto 0 0 +# Device Mountpoint FStype Options Dump Pass# +/dev/mirror/gm0s1a / ufs rw 1 1 +/dev/mirror/gm0s1b none swap sw 0 0 +/dev/mirror/gm0s1d /var ufs rw 2 2 +/dev/mirror/gm0s1e /usr ufs rw 2 2 +/dev/mirror/gm0s1f /data1 ufs rw 2 2 +/dev/mirror/gm0s1g /data2 ufs rw 2 2 .... -Перезагрузите систему: +Если модуль ядра [.filename]#geom_mirror.ko# не встроен в ядро, отредактируйте [.filename]#/boot/loader.conf# для его загрузки при старте системы: -[source,shell] +[.programlisting] .... -# shutdown -r now +geom_mirror_load="YES" .... -С этого момента во время каждой загрузки система должна использовать устройство [.filename]#gm0# вместо устройства [.filename]#da0#. Удостовериться в этом можно так: дождитесь загрузки системы, наберите команду `mount` и просмотрите её вывод: +Файловые системы с исходного диска теперь можно скопировать на зеркало с помощью man:dump[8] и man:restore[8]. Каждая файловая система, сохранённая с помощью `dump -L`, сначала создаст снимок, что может занять некоторое время. -[source,shell] +[source, shell] .... -# mount -Filesystem 1K-blocks Used Avail Capacity Mounted on -/dev/mirror/gm0s1a 1012974 224604 707334 24% / -devfs 1 1 0 100% /dev -/dev/mirror/gm0s1f 45970182 28596 42263972 0% /home -/dev/mirror/gm0s1d 6090094 1348356 4254532 24% /usr -/dev/mirror/gm0s1e 3045006 2241420 559986 80% /var -devfs 1 1 0 100% /var/named/dev +# mount /dev/mirror/gm0s1a /mnt +# dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -) +# mount /dev/mirror/gm0s1d /mnt/var +# mount /dev/mirror/gm0s1e /mnt/usr +# mount /dev/mirror/gm0s1f /mnt/data1 +# mount /dev/mirror/gm0s1g /mnt/data2 +# dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -) +# dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -) +# dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 && restore -rf -) +# dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 && restore -rf -) .... -Как и ожидалось, вывод выглядит корректно. И в заключение, чтобы начать синхронизацию данных, включите в зеркало диск [.filename]#da1# при помощи следующей команды: +Перезагрузите систему, загрузившись с [.filename]#ada1#. Если всё работает правильно, система загрузится с [.filename]#mirror/gm0#, который теперь содержит те же данные, что ранее были на [.filename]#ada0#. Обратитесь к разделу crossref:geom[gmirror-troubleshooting, Устранение неполадок], если возникли проблемы с загрузкой. + +На этом этапе зеркало всё ещё состоит только из одного диска [.filename]#ada1#. + +После успешной загрузки с [.filename]#mirror/gm0# последним шагом будет добавление [.filename]#ada0# в зеркало. + +[IMPORTANT] +==== +Когда диск [.filename]#ada0# добавляется в зеркало, его прежнее содержимое будет перезаписано данными из зеркала. Убедитесь, что [.filename]#mirror/gm0# имеет такое же содержимое, как [.filename]#ada0#, перед добавлением [.filename]#ada0# в зеркало. Если данные, ранее скопированные с помощью man:dump[8] и man:restore[8], не идентичны тому, что было на [.filename]#ada0#, верните [.filename]#/etc/fstab# к монтированию файловых систем на [.filename]#ada0#, перезагрузите систему и начните всю процедуру заново. +==== -[source,shell] +[source, shell] .... -# gmirror insert gm0 /dev/da1 +# gmirror insert gm0 ada0 +GEOM_MIRROR: Device gm0: rebuilding provider ada0 .... -Во время построения зеркала статус процесса построения может быть проверен следующей командой: +Синхронизация между двумя дисками начнется немедленно. Для просмотра прогресса используйте команду `gmirror status`. -[source,shell] +[source, shell] .... # gmirror status + Name Status Components +mirror/gm0 DEGRADED ada1 (ACTIVE) + ada0 (SYNCHRONIZING, 64%) .... -Вывод вышеприведённой команды для построенного и синхронизированного зеркала выглядит подобно следующему: +Через некоторое время синхронизация завершится. -[source,shell] +[source, shell] .... +GEOM_MIRROR: Device gm0: rebuilding provider ada0 finished. +# gmirror status Name Status Components -mirror/gm0 COMPLETE da0 - da1 +mirror/gm0 COMPLETE ada1 (ACTIVE) + ada0 (ACTIVE) .... -Если есть какие-либо неполадки или зеркало находится в процессе построения, в выводе команды будет обозначен статус `DEGRADED` вместо статуса `COMPLETE`. +[.filename]#mirror/gm0# теперь состоит из двух дисков [.filename]#ada0# и [.filename]#ada1#, и их содержимое автоматически синхронизируется между собой. При использовании [.filename]#mirror/gm0# будет вести себя так же, как исходный одиночный диск. -=== Решение проблем +[[gmirror-troubleshooting]] +=== Устранение неполадок -==== Система не загружается +Если система больше не загружается, возможно, потребуется изменить настройки BIOS для загрузки с одного из новых зеркалированных дисков. Для загрузки можно использовать любой из зеркальных дисков, так как они содержат идентичные данные. -Если система прекращает загрузку и выдает строку: +Если загрузка останавливается с таким сообщением, значит, что-то не так с зеркальным устройством: -[.programlisting] +[source, shell] .... -ffs_mountroot: can't find rootvp -Root mount failed: 6 +Mounting from ufs:/dev/mirror/gm0s1a failed with error 19. + +Loader variables: + vfs.root.mountfrom=ufs:/dev/mirror/gm0s1a + vfs.root.mountfrom.options=rw + +Manual root filesystem specification: + <fstype>:<device> [options] + Mount <device> using filesystem <fstype> + and with the specified (optional) option list. + + e.g. ufs:/dev/da0s1a + zfs:tank + cd9660:/dev/acd0 ro + (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /) + + ? List valid disk boot devices + . Yield 1 second (for background tasks) + <empty line> Abort manual input + mountroot> .... -Перезагрузите компьютер кнопкой питания или кнопкой "Reset". В загрузочном меню выберите опцию (6). Это приведет к тому, что система выдаст приглашение man:loader[8]. Загрузите модуль ядра вручную: +Проблема может быть вызвана тем, что забыли загрузить модуль [.filename]#geom_mirror.ko# , не добавив его в [.filename]#/boot/loader.conf#. Чтобы исправить её, загрузитесь с установочного носителя FreeBSD и выберите `Shell` при первом запросе. Затем загрузите модуль mirror и смонтируйте зеркальное устройство: -[source,shell] +[source, shell] .... -OK? load geom_mirror -OK? boot +# gmirror load +# mount /dev/mirror/gm0s1a /mnt .... -Если это сработало, модуль ядра по какой-либо причине не загрузился правильно. Проверьте корректность соответствующей записи в [.filename]#/boot/loader.conf#. Если проблема осталась, добавьте строку: +Отредактируйте файл [.filename]#/mnt/boot/loader.conf#, добавив строку для загрузки модуля mirror: [.programlisting] .... -options GEOM_MIRROR +geom_mirror_load="YES" +.... + +Сохраните файл и перезагрузите систему. + +Другие проблемы, вызывающие `ошибку 19`, требуют больше усилий для исправления. Хотя система должна загружаться с [.filename]#ada0#, появится ещё один запрос на выбор оболочки, если [.filename]#/etc/fstab# указан неверно. Введите `ufs:/dev/ada0s1a` в строке загрузчика и нажмите kbd:[Enter]. Отмените изменения в [.filename]#/etc/fstab#, затем смонтируйте файловые системы с исходного диска ([.filename]#ada0#) вместо зеркала. Перезагрузите систему и повторите процедуру снова. + +[source, shell] +.... +Enter full pathname of shell or RETURN for /bin/sh: +# cp /etc/fstab.orig /etc/fstab +# reboot .... -в файл конфигурации ядра, пересоберите и переустановите ядро. Это должно устранить проблему. +=== Восстановление после отказа диска -=== Восстановление после дисковых сбоев +Преимущество зеркалирования дисков заключается в том, что при отказе одного диска зеркало не теряет данных. В приведённом примере, если [.filename]#ada0# выйдет из строя, зеркало продолжит работать, предоставляя данные с оставшегося рабочего диска [.filename]#ada1#. -Примечательной особенностью зеркалирования является то, что если диск вышел из строя, то он, пожалуй, может быть заменён вообще без ущерба для данных. +Для замены вышедшего из строя диска завершите работу системы и физически замените неисправный диск новым диском равной или большей ёмкости. Производители используют довольно произвольные значения при указании ёмкости дисков в гигабайтах, и единственный способ точно убедиться в этом — сравнить общее количество секторов, отображаемое командой `diskinfo -v`. Диск с большей ёмкостью, чем у зеркала, будет работать, хотя дополнительное пространство на новом диске использоваться не будет. -Принимая во внимание предыдущую конфигурацию RAID1, предположим, что устройство [.filename]#da1# вышло из строя, и ему требуется замена. Перед заменой определите, какой именно диск вышел из строя, а потом выключите систему. Теперь дефектный диск может быть заменён новым, после чего необходимо снова загрузить систему. После загрузки системы для замещения диска в зеркале могут быть использованы следующие команды: +После перезагрузки компьютера зеркало будет работать в "деградированном" режиме с одним диском. Необходимо указать зеркалу забыть диски, которые в данный момент не подключены: -[source,shell] +[source, shell] .... # gmirror forget gm0 .... -[source,shell] +Любые старые метаданные должны быть удалены с заменяемого диска, следуя инструкциям в crossref:geom[geom-mirror-metadata, Проблемы с метаданными]. Затем заменяющий диск, [.filename]#ada4# в данном примере, добавляется в зеркало: + +[source, shell] .... -# gmirror insert gm0 /dev/da1 +# gmirror insert gm0 /dev/ada4 .... -Для наблюдения за статусом построения используйте команду `gmirror status`. Вывод этой команды достаточно прост и понятен. +Синхронизация начинается при установке нового диска в зеркало. Этот процесс копирования данных зеркала на новый диск может занять некоторое время. Производительность зеркала значительно снизится во время копирования, поэтому добавление новых дисков лучше выполнять при низкой нагрузке на компьютер. + +Ход выполнения можно отслеживать с помощью `gmirror status`, который показывает диски, находящиеся в процессе синхронизации, и процент завершения. Во время повторной синхронизации статус будет `DEGRADED`, а по завершении процесса изменится на `COMPLETE`. + +[[geom-raid3]] +== RAID3 - чередование на уровне байтов с выделенной четностью + +RAID3 — это метод объединения нескольких дисков в один том с выделенным диском четности. В системе RAID3 данные разбиваются на байты, которые записываются на все диски массива, за исключением одного диска, выполняющего роль выделенного диска четности. Это означает, что операции чтения в RAID3 обращаются ко всем дискам массива. Производительность может быть повышена за счет использования нескольких контроллеров дисков. Массив RAID3 обеспечивает отказоустойчивость на уровне одного диска, а его емкость составляет 1 - 1/n от общей емкости всех дисков массива, где n — количество жестких дисков в массиве. Такая конфигурация в основном подходит для хранения данных большого объема, таких как мультимедийные файлы. + +Для создания массива RAID3 требуется как минимум 3 физических жестких диска. Каждый диск должен быть одинакового размера, так как запросы ввода-вывода чередуются для чтения или записи на несколько дисков параллельно. Кроме того, из-за особенностей RAID3 количество дисков должно быть равно 3, 5, 9, 17 и так далее, то есть соответствовать формуле 2^n + 1. + +Этот раздел демонстрирует, как создать программный RAID3 в системе FreeBSD. + +[NOTE] +==== +Хотя теоретически возможно загружаться с массива RAID3 в FreeBSD, такая конфигурация встречается редко и не рекомендуется. +==== + +=== Создание выделенного массива RAID3 + +В FreeBSD поддержка RAID3 реализована классом GEOM man:graid3[8]. Создание выделенного массива RAID3 в FreeBSD требует выполнения следующих шагов. + +[.procedure] +. Сначала загрузите модуль ядра [.filename]#geom_raid3.ko#, выполнив одну из следующих команд: ++ +[source, shell] +.... +# graid3 load +.... ++ +или: ++ +[source, shell] +.... +# kldload geom_raid3 +.... + +. Убедитесь, что существует подходящая точка монтирования. Эта команда создает новый каталог для использования в качестве точки монтирования: ++ +[source, shell] +.... +# mkdir /multimedia +.... + +. Определите имена устройств для дисков, которые будут добавлены в массив, и создайте новое устройство RAID3. Последнее указанное устройство будет использоваться в качестве выделенного диска четности. В этом примере используются три неразделенных ATA-диска: [.filename]#ada1# и [.filename]#ada2# для данных, а [.filename]#ada3# для четности. ++ +[source, shell] +.... +# graid3 label -v gr0 /dev/ada1 /dev/ada2 /dev/ada3 +Metadata value stored on /dev/ada1. +Metadata value stored on /dev/ada2. +Metadata value stored on /dev/ada3. +Done. +.... + +. Разделите только что созданное устройство [.filename]#gr0# и разместите на нем файловую систему UFS: ++ +[source, shell] +.... +# gpart create -s GPT /dev/raid3/gr0 +# gpart add -t freebsd-ufs /dev/raid3/gr0 +# newfs -j /dev/raid3/gr0p1 +.... ++ +По экрану пройдёт множество чисел, и через некоторое время процесс завершится. Том создан и готов к монтированию: ++ +[source, shell] +.... +# mount /dev/raid3/gr0p1 /multimedia/ +.... ++ +Массив RAID3 теперь готов к использованию. + +Для сохранения данной конфигурации после перезагрузки системы требуется дополнительная настройка. + +[.procedure] +. Модуль [.filename]#geom_raid3.ko# должен быть загружен перед монтированием массива. Для автоматической загрузки модуля ядра во время инициализации системы добавьте следующую строку в [.filename]#/boot/loader.conf#: ++ +[.programlisting] +.... +geom_raid3_load="YES" +.... + +. Следующую информацию о разделе необходимо добавить в [.filename]#/etc/fstab#, чтобы автоматически монтировать файловую систему массива во время загрузки системы: ++ +[.programlisting] +.... +/dev/raid3/gr0p1 /multimedia ufs rw 2 2 +.... + +[[geom-graid]] +== Устройства с программным RAID + +Некоторые материнские платы и карты расширения добавляют простые аппаратные компоненты, обычно только ПЗУ, что позволяет компьютеру загружаться с RAID-массива. После загрузки доступ к RAID-массиву обеспечивается программным обеспечением, работающим на основном процессоре компьютера. Такой "аппаратно-ускоренный программный RAID" создаёт массивы, не зависящие от конкретной операционной системы и функционирующие ещё до её загрузки. + +Несколько уровней RAID поддерживаются в зависимости от используемого оборудования. Полный список см. в man:graid[8]. + +man:graid[8] требует наличия модуля ядра [.filename]#geom_raid.ko#, который включён в ядро [.filename]#GENERIC# начиная с FreeBSD 9.1. При необходимости его можно загрузить вручную командой `graid load`. + +[[geom-graid-creating]] +=== Создание массива + +В устройствах с программным RAID часто есть меню, которое можно вызвать, нажав специальные клавиши при загрузке компьютера. Это меню позволяет создавать и удалять RAID-массивы. man:graid[8] также может создавать массивы напрямую из командной строки. + +`graid label` используется для создания нового массива. В данном примере используется материнская плата с чипсетом Intel software RAID, поэтому указан формат метаданных Intel. Новый массив получает метку [.filename]#gm0#, это зеркало (RAID1), и использует диски [.filename]#ada0# и [.filename]#ada1#. + +[CAUTION] +==== +Некоторое пространство на дисках будет перезаписано при создании нового массива. Предварительно создайте резервную копию существующих данных! +==== + +[source, shell] +.... +# graid label Intel gm0 RAID1 ada0 ada1 +GEOM_RAID: Intel-a29ea104: Array Intel-a29ea104 created. +GEOM_RAID: Intel-a29ea104: Disk ada0 state changed from NONE to ACTIVE. +GEOM_RAID: Intel-a29ea104: Subdisk gm0:0-ada0 state changed from NONE to ACTIVE. +GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE. +GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to ACTIVE. +GEOM_RAID: Intel-a29ea104: Array started. +GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from STARTING to OPTIMAL. +Intel-a29ea104 created +GEOM_RAID: Intel-a29ea104: Provider raid/r0 for volume gm0 created. +.... + +Проверка состояния показывает, что новое зеркало готово к использованию: + +[source, shell] +.... +# graid status + Name Status Components +raid/r0 OPTIMAL ada0 (ACTIVE (ACTIVE)) + ada1 (ACTIVE (ACTIVE)) +.... + +Устройство массива отображается в [.filename]#/dev/raid/#. Первый массив называется [.filename]#r0#. Дополнительные массивы, если они есть, будут называться [.filename]#r1#, [.filename]#r2# и так далее. + +В меню BIOS на некоторых из этих устройств можно создавать массивы со специальными символами в их именах. Чтобы избежать проблем с этими специальными символами, массивам присваиваются простые числовые имена, например, [.filename]#r0#. Для отображения фактических меток, таких как [.filename]#gm0# в примере выше, используйте man:sysctl[8]: + +[source, shell] +.... +# sysctl kern.geom.raid.name_format=1 +.... + +[[geom-graid-volumes]] +=== Несколько томов + +Некоторые устройства программного RAID поддерживают более одного _тома_ в массиве. Томы работают подобно разделам, позволяя разделять пространство на физических дисках и использовать его различными способами. Например, устройства программного RAID от Intel поддерживают два тома. В этом примере создаётся зеркало размером 40 ГБ для безопасного хранения операционной системы, а затем том RAID0 (чередующийся) размером 20 ГБ для быстрого временного хранения: + +[source, shell] +.... +# graid label -S 40G Intel gm0 RAID1 ada0 ada1 +# graid add -S 20G gm0 RAID0 +.... + +Тома появляются как дополнительные записи [.filename]#rX# в каталоге [.filename]#/dev/raid/#. Массив с двумя томами будет отображать [.filename]#r0# и [.filename]#r1#. + +См. man:graid[8] для информации о количестве томов, поддерживаемых различными устройствами программного RAID. + +[[geom-graid-converting]] +=== Преобразование одиночного диска в зеркало + +При определенных условиях возможно преобразовать существующий одиночный диск в массив man:graid[8] без переформатирования. Чтобы избежать потери данных во время преобразования, существующий диск должен соответствовать следующим минимальным требованиям: + +* Диск должен быть размечен с использованием схемы разделов MBR. Схемы разделов GPT или другие схемы с метаданными в конце диска будут перезаписаны и повреждены метаданными man:graid[8]. +* Для размещения метаданных man:graid[8] в конце диска должно быть достаточно неразмеченного и неиспользуемого пространства. Размер этих метаданных может варьироваться, но самые большие занимают 64 МБ, поэтому рекомендуется иметь как минимум столько свободного места. + +Если диск соответствует этим требованиям, начните с создания полной резервной копии. Затем создайте зеркало с одним диском на этом диске: + +[source, shell] +.... +# graid label Intel gm0 RAID1 ada0 NONE +.... + +Метаданные `man:graid[8]` были записаны в конец диска в неиспользуемое пространство. Теперь можно вставить второй диск в зеркало: + +[source, shell] +.... +# graid insert raid/r0 ada1 +.... + +Данные с исходного диска начнут немедленно копироваться на второй диск. Зеркало будет работать в деградировавшем состоянии до завершения копирования. + +[[geom-graid-inserting]] +=== Добавление новых дисков к массиву + +Диски могут быть добавлены в массив в качестве замены отказавших или отсутствующих дисков. Если нет отказавших или отсутствующих дисков, новый диск становится запасным. Например, добавление нового диска в рабочее зеркало из двух дисков приведет к зеркалу из двух дисков с одним запасным, а не к зеркалу из трех дисков. + +В примере зеркального массива данные сразу же начинают копироваться на только что вставленный диск. Любая существующая информация на новом диске будет перезаписана. + +[source, shell] +.... +# graid insert raid/r0 ada1 +GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE. +GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to NEW. +GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NEW to REBUILD. +GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 rebuild start at 0. +.... + +[[geom-graid-removing]] +=== Удаление дисков из массива + +Отдельные диски можно навсегда удалить из массива и стереть их метаданные: + +[source, shell] +.... +# graid remove raid/r0 ada1 +GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from ACTIVE to OFFLINE. +GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-[unknown] state changed from ACTIVE to NONE. +GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from OPTIMAL to DEGRADED. +.... + +[[geom-graid-stopping]] +=== Остановка массива + +Массив можно остановить без удаления метаданных с дисков. Массив будет перезапущен при загрузке системы. + +[source, shell] +.... +# graid stop raid/r0 +.... + +[[geom-graid-status]] +=== Проверка состояния массива + +Статус массива можно проверить в любое время. После добавления диска в зеркало в приведённом выше примере данные копируются с исходного диска на новый: + +[source, shell] +.... +# graid status + Name Status Components +raid/r0 DEGRADED ada0 (ACTIVE (ACTIVE)) + ada1 (ACTIVE (REBUILD 28%)) +.... + +Некоторые типы массивов, такие как `RAID0` или `CONCAT`, могут не отображаться в отчете о состоянии при выходе дисков из строя. Чтобы увидеть эти частично неработоспособные массивы, добавьте `-ga`: + +[source, shell] +.... +# graid status -ga + Name Status Components +Intel-e2d07d9a BROKEN ada6 (ACTIVE (ACTIVE)) +.... + +[[geom-graid-deleting]] +=== Удаление массивов + +Массивы уничтожаются путём удаления всех томов из них. Когда удаляется последний оставшийся том, массив останавливается, а метаданные удаляются с дисков: + +[source, shell] +.... +# graid delete raid/r0 +.... + +[[geom-graid-unexpected]] +=== Удаление неожиданных массивов + +Диски могут неожиданно содержать метаданные man:graid[8], оставшиеся от предыдущего использования или тестирования производителем. man:graid[8] обнаружит эти диски и создаст массив, что помешает доступу к отдельному диску. Для удаления нежелательных метаданных: + +[.procedure] +. Загрузите систему. В меню загрузки выберите `2` для перехода в приглашение загрузчика. Введите: ++ +[source, shell] +.... +OK set kern.geom.raid.enable=0 +OK boot +.... ++ +Система загрузится с отключенным man:graid[8]. +. Создайте резервную копию всех данных на затронутом диске. +. В качестве обходного решения обнаружение массива man:graid[8] можно отключить, добавив ++ +[.programlisting] +.... +kern.geom.raid.enable=0 +.... ++ +в файл [.filename]#/boot/loader.conf#. ++ +Для постоянного удаления метаданных man:graid[8] с затронутого диска загрузитесь с установочного CD-ROM или USB-накопителя FreeBSD и выберите `Shell`. Используйте команду `status`, чтобы найти имя массива, обычно это `raid/r0`: ++ +[source, shell] +.... +# graid status + Name Status Components +raid/r0 OPTIMAL ada0 (ACTIVE (ACTIVE)) + ada1 (ACTIVE (ACTIVE)) +.... ++ +Удалите том по имени: ++ +[source, shell] +.... +# graid delete raid/r0 +.... ++ +Если отображается более одного тома, повторите процесс для каждого тома. После удаления последнего массива том будет уничтожен. ++ +Перезагрузите систему и проверьте данные, восстановив их из резервной копии при необходимости. После удаления метаданных запись `kern.geom.raid.enable=0` в файле [.filename]#/boot/loader.conf# также можно удалить. [[geom-ggate]] == Сетевые устройства GEOM Gate -GEOM включает в себя поддержку работы с удаленными устройствами по сети, например с дисками, CD-ROM и т.д. путем использования gate утилит. Это подобно работе с NFS. +GEOM предоставляет простой механизм для удаленного доступа к устройствам, таким как диски, компакт-диски и файловые системы, с использованием сетевого демона GEOM Gate - ggated. Система с устройством запускает серверный демон, который обрабатывает запросы от клиентов, использующих ggatec. Устройства не должны содержать конфиденциальных данных, так как соединение между клиентом и сервером не шифруется. -Для начала необходимо создать файл экспорта. В этом файле указывается, кому разрешен доступ к экспортируемым ресурсам и какой уровень доступа предоставляется. Например для того, чтобы экспортировать четвертый слайс первого SCSI диска, достаточно следующей записи в файле [.filename]#/etc/gg.exports#: +Аналогично NFS, который рассматривается в crossref:network-servers[network-nfs,"Network File System (NFS)"], ggated настраивается с использованием файла экспорта. Этот файл определяет, каким системам разрешён доступ к экспортируемым ресурсам и какой уровень доступа им предоставляется. Например, чтобы предоставить клиенту `192.168.1.5` права на чтение и запись для четвёртого раздела первого SCSI-диска, создайте файл [.filename]#/etc/gg.exports# со следующей строкой: [.programlisting] .... -192.168.1.0/24 RW /dev/da0s4d +192.168.1.5 RW /dev/da0s4d .... -Это позволит всем компьютерам внутри частной сети получить доступ к разделу [.filename]#da0s4d#. - -Чтобы экспортировать устройство, убедитесь, что оно не смонтировано, и запустите сервер man:ggated[8]: +Перед экспортом устройства убедитесь, что оно не смонтировано. Затем запустите `ggated`: -[source,shell] +[source, shell] .... # ggated .... -Теперь, чтобы смонтировать устройство на клиентском компьютере выполните следующие команды: +Для указания альтернативного порта прослушивания или изменения расположения файла экспорта по умолчанию доступно несколько вариантов. Подробности см. в man:ggated[8]. + +Для доступа к экспортированному устройству на клиентской машине сначала используйте `ggatec`, указав IP-адрес сервера и имя экспортированного устройства. В случае успеха эта команда выведет имя устройства `ggate`, которое нужно смонтировать. Смонтируйте указанное имя устройства на свободную точку монтирования. В этом примере выполняется подключение к разделу [.filename]#/dev/da0s4d# на `192.168.1.1`, затем монтируется [.filename]#/dev/ggate0# в [.filename]#/mnt#: -[source,shell] +[source, shell] .... # ggatec create -o rw 192.168.1.1 /dev/da0s4d ggate0 # mount /dev/ggate0 /mnt .... -С этого момента устройство доступно в точке монтирования [.filename]#/mnt#. +Устройство на сервере теперь может быть доступно через [.filename]#/mnt# на клиенте. Для получения дополнительной информации о `ggatec` и нескольких примеров использования обратитесь к man:ggatec[8]. [NOTE] ==== -Необходимо заметить, что попытка смонтировать устройство, уже смонтированное как сетевой или локальный диск, закончится неудачей. +Монтирование завершится ошибкой, если устройство в данный момент смонтировано на сервере или любом другом клиенте в сети. Если требуется одновременный доступ к сетевым ресурсам, используйте NFS. ==== -Когда устройство больше не нужно, оно может быть размонтировано командой man:umount[8], как любое другое дисковое устройство. +Когда устройство больше не требуется, размонтируйте его с помощью `umount`, чтобы ресурс стал доступен другим клиентам. [[geom-glabel]] -== Метки дисковых устройств +== Маркировка дисковых устройств -Во время загрузки системы, ядро FreeBSD создает файлы для обнаруженных устройств. Этот метод обнаружения устройств создает некоторые проблемы, например если новое дисковое устройство подключается через USB. Может получиться так, что этому диску будет присвоено имя устройства [.filename]#da0#, а устройство с прежним именем [.filename]#da0# получит следующее имя, [.filename]#da1#. Это приведет к проблемам монтирования файловых систем, записанных в [.filename]#/etc/fstab#. На самом деле, это может даже помешать загрузке системы. +Во время инициализации системы ядро FreeBSD создает узлы устройств по мере их обнаружения. Такой метод поиска устройств вызывает некоторые проблемы. Например, что если новое дисковое устройство будет добавлено через USB? Вполне вероятно, что флеш-накопитель может получить имя устройства [.filename]#da0#, а исходное устройство [.filename]#da0# сместится на [.filename]#da1#. Это вызовет проблемы с монтированием файловых систем, если они указаны в [.filename]#/etc/fstab#, что также может помешать загрузке системы. -Одно из решений состоит в расположении SCSI устройств в таком порядке, чтобы новые устройства, добавляемые к SCSI контроллеру, занимали свободные номера устройств. Но что делать с USB устройствами, которые могут занять место основного SCSI диска? Это случается потому, что USB устройства обычно тестируются до SCSI контроллера. Решение может состоять в подключении этих устройств после загрузки системы. Другое решение - использование ATA диска и исключение SCSI устройств из [.filename]#/etc/fstab#. +Одно из решений — последовательное подключение SCSI-устройств, чтобы новое устройство, добавленное к SCSI-карте, получало неиспользуемые номера. Но что делать с USB-устройствами, которые могут заменить основной SCSI-диск? Это происходит потому, что USB-устройства обычно определяются раньше SCSI-карты. Один из вариантов — подключать такие устройства только после загрузки системы. Другой способ — использовать только один ATA-диск и никогда не указывать SCSI-устройства в [.filename]#/etc/fstab#. -Есть и лучшее решение. С помощью утилиты `glabel`, администратор или пользователь могут пометить дисковые устройства и использовать эти метки в [.filename]#/etc/fstab#. Поскольку `glabel` сохраняет метки в последнем секторе заданного устройства, они сохраняются и после перезагрузки. Используя эти метки вместо имени устройств, можно всегда смонтировать файловую систему независимо от назначенного имени устройства. +Лучшим решением будет использование `glabel` для маркировки дисковых устройств и применение меток в [.filename]#/etc/fstab#. Поскольку `glabel` сохраняет метку в последнем секторе заданного провайдера, метка останется неизменной после перезагрузки. Используя эту метку в качестве устройства, файловую систему можно всегда монтировать, независимо от того, через какой узел устройства к ней обращаются. [NOTE] ==== -Очевидно, что метки должны быть постоянными. Утилита `glabel` может использоваться для создания как временных, так и постоянных меток. Только постоянные метки сохраняются после перезагрузок. Прочтите man:glabel[8] для получения более подробной информации о различии между метками. +`glabel` может создавать как временные, так и постоянные метки. Только постоянные метки сохраняются после перезагрузки. Дополнительную информацию о различиях между метками можно найти в man:glabel[8]. ==== === Типы меток и примеры -Существует два типа меток, основной (generic) тип и метки файловой системы. Метки могут быть постоянными или временными. Постоянные метки создаются командой man:tunefs[8] или man:newfs[8]. В дальнейшем они будут автоматически создаваться в подкаталоге каталога [.filename]#/dev#, имя которого определяется в соответствии с типом файловой системы. Например, метки файловых систем UFS2 будут расположены в каталоге [.filename]#/dev/ufs#. Постоянные метки также можно создать при помощи команды `glabel label`. Эти метки не зависят от типа файловой системы, поэтому они будут перечисляться в каталоге [.filename]#/dev/label#. +Постоянные метки могут быть общими или метками файловой системы. Постоянные метки файловой системы можно создать с помощью man:tunefs[8] или man:newfs[8]. Такие метки создаются в подкаталоге [.filename]#/dev# и именуются в соответствии с типом файловой системы. Например, метки файловой системы UFS2 будут созданы в [.filename]#/dev/ufs#. Общие постоянные метки можно создать с помощью `glabel label`. Они не привязаны к конкретной файловой системе и будут размещены в [.filename]#/dev/label#. -Временные метки не сохраняются после перезагрузки. Эти метки создаются в каталоге [.filename]#/dev/label#, они хорошо подходят для экспериментов. Временную метку можно создать командой `glabel create`. За более детальной информацией обратитесь к странице справочника man:glabel[8]. +Временные метки удаляются при следующей перезагрузке. Эти метки создаются в [.filename]#/dev/label# и подходят для экспериментов. Временную метку можно создать с помощью `glabel create`. -Чтобы создать постоянную метку для файловой системы UFS2 не нарушая самих данных, выполните следующую команду: +Чтобы создать постоянную метку для файловой системы UFS2 без уничтожения данных, выполните следующую команду: -[source,shell] +[source, shell] .... # tunefs -L home /dev/da3 .... -[WARNING] -==== - -Если файловая система заполнена, это может привести к повреждению данных; в случае заполненной файловой системы надо или удалить ненужные файлы, или не добавлять метки. -==== - -Метка должна появиться в [.filename]#/dev/ufs# и может быть добавлена в [.filename]#/etc/fstab#: +Теперь в [.filename]#/dev/ufs# должна существовать метка, которую можно добавить в [.filename]#/etc/fstab#: [.programlisting] .... @@ -409,37 +992,37 @@ ggate0 [NOTE] ==== -Во время запуска `tunefs` файловая система не должна быть смонтирована. +Файловая система не должна быть смонтирована при попытке запуска `tunefs`. ==== -Теперь файловую систему можно смонтировать как обычно: +Теперь файловую систему можно смонтировать: -[source,shell] +[source, shell] .... # mount /home .... -Если модуль ядра [.filename]#geom_label.ko# указан в [.filename]#/boot/loader.conf# и загружается вместе с системой, или в ядре указана опция `GEOM_LABEL`, метку устройства можно изменять без какого-либо негативного для системы эффекта. +Начиная с этого момента, при условии, что модуль ядра [.filename]#geom_label.ko# загружается при загрузке через [.filename]#/boot/loader.conf# или присутствует опция ядра `GEOM_LABEL`, изменение узла устройства не окажет негативного влияния на систему. -Файловая система может быть создана с меткой по умолчанию путем использования флага `-L` команды `newfs`. Обратитесь к странице справочника man:newfs[8] за более подробной информацией. +Файловые системы также могут быть созданы с меткой по умолчанию с использованием флага `-L` в `newfs`. Подробнее см. в man:newfs[8]. -Для удаления метки можно использовать следующую команду: +Следующая команда может быть использована для удаления метки: -[source,shell] +[source, shell] .... # glabel destroy home .... -В следующем примере показано, как устанавливаются метки на разделы загрузочного диска. +Следующий пример показывает, как назначить метки разделам загрузочного диска. -.Установка меток на разделы загрузочного диска +.Разметка разделов на загрузочном диске [example] ==== -Установка и задействование постоянных меток на разделах загрузочного диска предоставит возможность операционной системе загружаться нормально в том случае, если диск был переключен на другой контроллер, или даже переставлен на другую машину. В этом примере был задействован один диск ATA, определяемый системой как [.filename]#ad0#. Также в примере подразумевается, что система использует типичную для FreeBSD схему разделения дискового пространства на слайсы и размещения на них файловых систем [.filename]#/#, [.filename]#/var#, [.filename]#/usr#, [.filename]#/tmp# и раздела подкачки. +Постоянная маркировка разделов на загрузочном диске позволяет системе продолжать нормальную загрузку, даже если диск будет перемещен на другой контроллер или перенесен в другую систему. В этом примере предполагается, что используется один ATA-диск, который система в настоящее время распознает как [.filename]#ad0#. Также предполагается, что используется стандартная схема разделов FreeBSD с [.filename]#/#, [.filename]#/var#, [.filename]#/usr#, [.filename]#/tmp#, а также разделом подкачки. -Перезагрузите систему, дождитесь меню загрузчика. Нажатием клавиши kbd:[4] выберите однопользовательский режим. Далее, введите следующие команды: +Перезагрузите систему, и на запросе man:loader[8] нажмите kbd:[4], чтобы загрузиться в однопользовательском режиме. Затем введите следующие команды: -[source,shell] +[source, shell] .... # glabel label rootfs /dev/ad0s1a GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs @@ -454,7 +1037,7 @@ GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap # exit .... -Система продолжит загрузку в многопользовательский режим. По завершении загрузки откройте файл [.filename]#/etc/fstab# и замените в нём традиционные имена файлов устройств на соответствующие устройствам метки. Результат будет выглядеть подобно следующему: +Система продолжит загрузку в многопользовательском режиме. После завершения загрузки отредактируйте файл [.filename]#/etc/fstab# и замените стандартные имена устройств на соответствующие метки. Итоговый файл [.filename]#/etc/fstab# будет выглядеть следующим образом: [.programlisting] .... @@ -466,9 +1049,9 @@ GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap /dev/label/var /var ufs rw 2 2 .... -Перезагрузите еще раз систему. Если всё прошло успешно, система загрузится как обычно, а вывод команды `mount` отобразит следующее: +Систему теперь можно перезагрузить. Если всё прошло успешно, она загрузится в обычном режиме, и команда `mount` покажет: -[source,shell] +[source, shell] .... # mount /dev/label/rootfs on / (ufs, local) @@ -480,9 +1063,9 @@ devfs on /dev (devfs, local) ==== -Начиная с FreeBSD 7.2, GEOM класс man:glabel[8] поддерживает новый тип меток для файловых систем UFS. Новый тип меток базируется на уникальных идентификаторах файловых систем, называемых `ufsid`. Во время загрузки системы они автоматически создаются и помещаются в каталог [.filename]#/dev/ufsid#. Перечисление меток должным образом в файле [.filename]#/etc/fstab# делает возможным монтирование разделов по значениям `ufsid`. Чтобы получить перечень файловых систем и соответствующих им меток `ufsid`, выполните команду `glabel status`: +Класс man:glabel[8] поддерживает тип метки для файловых систем UFS, основанный на уникальном идентификаторе файловой системы, `ufsid`. Эти метки могут быть найдены в [.filename]#/dev/ufsid# и создаются автоматически во время запуска системы. Можно использовать метки `ufsid` для монтирования разделов с помощью [.filename]#/etc/fstab#. Для получения списка файловых систем и соответствующих им меток `ufsid` используйте команду `glabel status`: -[source,shell] +[source, shell] .... % glabel status Name Status Components @@ -490,7 +1073,7 @@ ufsid/486b6fc38d330916 N/A ad4s1d ufsid/486b6fc16926168e N/A ad4s1f .... -В данном примере [.filename]#ad4s1d# содержит файловую систему [.filename]#/var#, а [.filename]#ad4s1f# соответствует файловой системе [.filename]#/usr#. Эти файловые системы можно также монтировать, указав значения их `ufsid` в файле [.filename]#/etc/fstab#: +В приведённом выше примере [.filename]#ad4s1d# соответствует [.filename]#/var#, а [.filename]#ad4s1f# — [.filename]#/usr#. Используя указанные значения `ufsid`, эти разделы можно смонтировать, добавив следующие строки в [.filename]#/etc/fstab#: [.programlisting] .... @@ -498,69 +1081,54 @@ ufsid/486b6fc16926168e N/A ad4s1f /dev/ufsid/486b6fc16926168e /usr ufs rw 2 2 .... -Таким способом могут быть смонтированы любые разделы с метками `ufsid`, что исключает необходимость создания постоянных меток вручную и в то же время позволяет воспользоваться преимуществами монтирования по меткам. +Любые разделы с метками `ufsid` могут быть смонтированы таким образом, что устраняет необходимость вручную создавать постоянные метки, сохраняя при этом преимущества монтирования, независимого от имён устройств. [[geom-gjournal]] -== Журналирование UFS средствами GEOM - -С выходом FreeBSD 7.0 был реализован долгожданный механизм ведения журналов для файловых систем. Сама реализация этого механизма осуществляется средствами системы GEOM, а конфигурирование выполняется утилитой man:gjournal[8]. - -Что такое журналирование? Журналирование сохраняет протокол транзакций файловой системы, то есть: изменения, составляющие логически завершенную операцию записи, сперва вносятся в журнал, а модификация метаданных и данных самого файла выполняется позже. В дальнейшем журнал может быть задействован для повторного выполнения транзакций на файловой системе с целью предотвращения нарушения целостности файловой системы. +== Журналирование UFS через GEOM -Журналирование - это еще одним механизм предотвращения утери данных и нарушения целостности файловой системы. В отличие от механизма Soft Updates, который отслеживает и периодически сохраняет обновления метаданных, и механизма снэпшотов, который создает образ файловой системы, сам журнал хранится в специально отведенном для этой задачи пространстве диска, и, в некоторых случаях, может содержаться целиком на отдельном диске. +Поддержка журналирования для файловых систем UFS доступна в FreeBSD. Реализация предоставляется через подсистему GEOM и настраивается с помощью `gjournal`. В отличие от других реализаций журналирования файловых систем, метод `gjournal` работает на уровне блоков и не является частью файловой системы. Это расширение GEOM. -В отличие от других реализаций журналирования файловых систем, метод `gjournal` работает на блочном уровне, он не встроен в файловую систему; это лишь надстройка над системой GEOM. +В журналировании хранится журнал транзакций файловой системы, таких как изменения, составляющие полную операцию записи на диск, до того как метаданные и записи файлов будут записаны на диск. Этот журнал транзакций может быть позднее воспроизведен для повторного выполнения операций файловой системы, предотвращая её рассогласование. -Чтобы включить поддержку `gjournal`, в файле конфигурации ядра FreeBSD должна присутствовать следующая опция (включено по умолчанию для FreeBSD 7.0 и более поздних версий систем): +Этот метод предоставляет ещё один механизм защиты от потери данных и нарушения целостности файловой системы. В отличие от мягких обновлений, которые отслеживают и контролируют обновления метаданных, и снимков, создающих образ файловой системы, журнал хранится в отдельном месте на диске, специально выделенном для этой задачи. Для повышения производительности журнал может храниться на другом диске. В такой конфигурации провайдер журнала или устройство хранения должны быть указаны после устройства, для которого включается ведение журнала. -[.programlisting] -.... -options UFS_GJOURNAL -.... - -Журналируемым устройствам, монтируемым во время загрузки системы, также потребуется модуль ядра [.filename]#geom_journal.ko#. Внесите следующую запись в файл [.filename]#/boot/loader.conf#: +Ядро [.filename]#GENERIC# предоставляет поддержку `gjournal`. Чтобы автоматически загружать модуль ядра [.filename]#geom_journal.ko# при загрузке, добавьте следующую строку в [.filename]#/boot/loader.conf#: [.programlisting] .... geom_journal_load="YES" .... -В качестве альтернативы, функции вышеупомянутого модуля можно встроить в специализированное ядро. Для этого добавьте следующую опцию в файл конфигурации ядра: +Если используется собственный вариант ядра, убедитесь, что следующая строка присутствует в конфигурационном файле ядра: [.programlisting] .... options GEOM_JOURNAL .... -Для создания журнала на новой файловой системе выполните следующие шаги (здесь и далее подразумевается, что [.filename]#da4# есть новый SCSI диск): +После загрузки модуля журнал можно создать на новой файловой системе, выполнив следующие шаги. В этом примере [.filename]#da4# — это новый SCSI-диск: -[source,shell] +[source, shell] .... # gjournal load # gjournal label /dev/da4 .... -На этом этапе в каталоге [.filename]#/dev# должны присутствовать файлы устройств [.filename]#/dev/da4# и [.filename]#/dev/da4.journal#. Теперь необходимо создать файловую систему: - -[source,shell] -.... -# newfs -O 2 -J /dev/da4.journal -.... - -Предыдущая команда создаст файловую систему UFS2 на журналируемом устройстве. +Это загрузит модуль и создаст узел устройства [.filename]#/dev/da4.journal# на [.filename]#/dev/da4#. -Смонтируйте устройство в требуемый каталог файловой системы: +Файловая система UFS теперь может быть создана на журналируемом устройстве, а затем смонтирована в существующей точке монтирования: -[source,shell] +[source, shell] .... +# newfs -O 2 -J /dev/da4.journal # mount /dev/da4.journal /mnt .... [NOTE] ==== -В случае наличия нескольких слайсов, журнал создается для каждого из них. Например, если есть два слайса, и они называются [.filename]#ad4s1# и [.filename]#ad4s2#, то утилитой `gjournal` создаются файлы устройств [.filename]#ad4s1.journal# и [.filename]#ad4s2.journal#. +В случае нескольких разделов журнал будет создан для каждого отдельного раздела. Например, если [.filename]#ad4s1# и [.filename]#ad4s2# являются разделами, то `gjournal` создаст [.filename]#ad4s1.journal# и [.filename]#ad4s2.journal#. ==== -Для увеличения производительности может потребоваться хранение журнала на отдельном диске. В таких случаях необходимо указать имя поставщика журнала или устройства хранения после имени устройства, на котором планируется включение журналирования. Журналирование также может быть активировано утилитой `tunefs` на действующих файловых системах; однако, всегда создавайте резервную копию перед попытками изменить настройки файловой системы. В большинстве случаев, выполнение команды `gjournal` завершится ошибкой, если создание журнала невозможно, в то время как некорректное использование команды `tunefs` не защитит против потери данных. +Журналирование также можно включить на существующих файловых системах с помощью `tunefs`. Однако _всегда_ делайте резервную копию перед изменением существующей файловой системы. В большинстве случаев `gjournal` завершится с ошибкой, если не сможет создать журнал, но это не защищает от потери данных из-за неправильного использования `tunefs`. Дополнительную информацию об этих командах можно найти в man:gjournal[8] и man:tunefs[8]. -Также возможно журналирование загрузочного диска системы FreeBSD. За детальными инструкциями по этой возможности обратитесь к статье extref:{gjournal-desktop}[Настройка журналирования UFS для настольного компьютера]. +Возможно журналирование загрузочного диска в системе FreeBSD. Подробные инструкции приведены в статье extref:{gjournal-desktop}[Реализация журналирования UFS на настольном ПК]. |
