The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Раздел полезных советов: Настройка gmirror при использовании..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Настройка gmirror при использовании..."  +/
Сообщение от auto_tips (??) on 11-Апр-12, 16:17 
С релизом FreeBSD-9.0, GPT-формат разделов жестких дисков стал, наконец, делом обыденным, ведь даже новый инсталлятор предполагает использование GPT по-умолчанию. Однако в связи с переходом на GPT-разметку дисков возникают и сложности, поскольку очень многое, в том числе и документация, продолжает быть завязано на ныне устаревший механизм MBR-разделов или слайсов. Так, например, к своему огорчению я обнаружил, что большинство разделов Handbook'а посвященных дискам, GEOM-классам и файловым системам изобилуют примерами работ со старыми слайсами, а не используют для этой цели новый формат GPT.

Более того, в январе 2012 года, в разделе учебника, посвященного использованию gmirror, я внезапно наткнулся на [[http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ge... предостережение]], которое прямо указывает на невозможность сочетания FreeBSD-9.x, gmirror и GPT-разметки дисков:

Warning: Creating a mirror out of the boot drive may result in data loss if any data has been stored on the last sector of the disk. This risk is reduced if creating the mirror is done promptly after a fresh install of FreeBSD. The following procedure is also incompatible with the default installation settings of FreeBSD 9.X which use the new GPT partition scheme. GEOM will overwrite GPT metadata, causing data loss and possibly an unbootable system.

Примечательно, что в русскоязычном варианте Handbook'а часть этого предупреждения относительно использования GPT-разделов вместе с gmirror во FreeBSD-9.x попросту отсутствует.

Терзаемый неприятным чувством, что поддержка GPT дисков во FreeBSD далека еще от совершенства, я решил выяснить, действительно-ли в настоящий момент дисковая функциональность FreeBSD-9.0R не может объединить технологии gmirror - программного зеркала (RAID-1) и разделов GPT.

Чаще всего gmirror используется в двух вариантах. Первый, это формирование зеркала из "сырых" дисков, с последующим созданием на зеркале разделов и файловых систем. Договоримся для краткости называть его gmirror+GPT.

Второй способ предполагает создание одного, или нескольких разделов на диске и последующее зеркалирование этих разделов на другой диск. Этот метод будем называть GPT+gmirror.


++ gmirror+GPT

Итак, чтобы при помощи gmirror собрать RAID-1, а затем создать поверх него разделы GPT нам потребуется дистрибутив FreeBSD-9.0R и два установленных в компьютер жестких диска.

Рекомендуется, чтобы оба жестких диска были одинаковыми по всем характеристикам: объему, скорости вращения шпинделей, размеру буфера памяти и т.д. И хоть эти условия для применения gmirror не являются обязательными, однако нужно понимать, что в случае использования различия дисков, характеристики зеркала будут определяться худшим диском.

К сожалению, в настоящий момент инсталлятор FreeBSD не умеет управлять модулем gmirror, поэтому создавать RAID-1 нам придется своими собственными руками. Для этого загружаемся с инсталляционного диска но, запуская установку, переходим в shell, сразу, как только инсталлятор предоставит нам эту возможность:

[[IMG /opennews/pics_base/0_1334145441.png]]

Попав в командную строку, начинаем подготовку зеркала. Бегло проглядев вывод команды dmesg, обнаруживаем, что в связи с новым именованием устройств во FreeBSD-9.0, в нашем случае диски определились как ada0 и ada1. Ну, раз так, значит так, создадим из них зеркало gm0 и сразу же загрузим его:

   # gmirror label gm0 ada0 ada1
   # gmirror load

Теперь в системе появился новый диск - gm0. Убедиться в этом можно посмотрев вывод команды:

   # ls -la /dev/mirror/gm0

Однако этот диск пока сырой. Поэтому определим для него схему разбиения на разделы, в нашем случае — GPT и сделаем этот диск загрузочным:

   # gpart create -s gpt mirror/gm0
   # gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 mirror/gm0

На этом первая часть вмешательства в обычный ход инсталляции FreeBSD может быть закончена. В самом деле, зачем людям работать руками, если инсталлятор со всем остальным может справиться самостоятельно?  Поэтому смело набираем exit и выходим из shell'а, чтобы вернуться в инсталлятор, где нам будет предложено установить имя хоста и выбрать компоненты дистрибутива.

Далее, когда инсталлятор загрузит редактор разделов, наше программное зеркало будет ему доступно также, как и два физических диска ada0 и ada1. Теперь после нашего краткого вмешательства, инсталлятор беспрепятственно позволит создать на зеркале необходимые разделы. Более того все изменения будут даже динамически отражаться на обеих половинах зеркала:

[[IMG /opennews/pics_base/0_1334145506.png]]

Далее инсталляция пойдет как по маслу в обычном порядке и до своего логического завершения.

Когда все закончится, перезагружаемся проверить все-ли мы сделали правильно, но здесь нас поджидает небольшой fail. С прискорбием мы обнаруживаем, что система загрузиться не может: ядро попросту не понимает, что такое gmirror и не видит зеркала.

Выругавшись нехорошими словами, снова вставляем инсталляционный диск и загружаемся в так полюбившийся нам shell.

Далее загружаем модуль gmirror и, вспомнив, что корневая файловая система находится на gm0p3, монтируем корень в /mnt.

   # gmirror load
   # mount /dev/mirror/gm0p3 /mnt

Теперь остается добавить модуль gmirror в loader.conf для загрузки его вместе с ядром при старте системы:

   # echo ‘geom_mirror_load="YES"’ > /mnt/boot/loader.conf

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

   gptboot: invalid backup GPT header

Andrey V. Elsukov – один из разработчиков FreeBSD объясняет это предупреждение так:
"Причина понятна - GPT была создана поверх зеркала. Размер провайдера mirror/gm0 на 1 сектор меньше, чем размер диска, так как gmirror забирает последний сектор для хранения своих метаданных. Загрузчик gptboot ничего не знает о программном зеркале и ищет резервный заголовок GPT в конце диска, а там находятся метаданные gmirror.
Тут есть небольшое разногласие между gptboot и GEOM_PART_GPT. Некоторое время назад я изменил алгоритм проверки корректности GPT в GEOM_PART_GPT. А именно, после прочтения основного заголовка GPT и проверки его контрольной суммы, резервный заголовок считывается по хранящемуся в основном заголовке адресу. В случае, когда основной заголовок повреждён, резервный заголовок ищется в конце диска."

Как видим из объяснения разработчика, ничего вроде бы страшного не происходит. И хотя у нас отсутствует запасной заголовок GPT в конце диска, это не критично, правда до тех пор, пока все работает.


++ GPT+gmirror

Этот вариант отличает от предыдущего тем, что зеркалируетяс не диск целиком, а отдельные его разделы. Как и для первого случая, нам потребуется дистрибутив FreeBSD-9.0R и два жестких диска, установленных в машину. Как и прежде рекомендуется, чтобы диски были полностью одинаковыми. Тем не менее, если случилось так, что один диск больше другого, то инсталляцию FreeBSD лучше проводить на диск меньшего объема. Это поможет избежать лишних расчетов размеров разделов при зеркалировании их с большего диска на меньший.

В остальном первоначальная установка FreeBSD-9.0R ничем не отличается от обычной инсталляции по-умолчанию. Вся настройка зеркалирования начинается, в тот момент, когда мы загружаем свежепроинсталлированную систему и попадаем в консоль.

Как и в предыдущем случае, диски определились как ada0 и ada1. FreeBSD установлена на меньший по размеру диск – ada0. Первым делом сохраним разметку диска и восстановим её на другом диске:

   # gpart backup ada0 > ada0.gpt
   # gpart restore -F /dev/ada1 < ada0.gpt
   # gpart show

[[IMG /opennews/pics_base/0_1334145557.png]]

Как видно на скриншоте, разделы удачно скопировались и на бОльшем диске осталось 5GB свободного неразмеченного места. Теперь по логике вещей, можно начать зеркалирование разделов.

Однако нужно забыть сделать диск ada1 загрузочным, ведь мы зеркалируем не весь диск целиком, а только его разделы. Иначе с выходом из строя ada0, система не сможет загрузится с ada1. Поэтому:

   # gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1

Кроме того, раздел /dev/da0p3 – содержит корневую файловую систему, он смонтирован, и размонтировать его не получится, поэтому в текущем положении изменить его не возможно.

Поэтому перезагружаем систему и загружаемся с инсталляционного диска, где привычно уже заходим в shell и на каждом разделе диска ada0 создаем зеркало и загружаем его:

   # gmirror label -vb round-robin boot /dev/ada0p1
   # gmirror label -vb round-robin swap /dev/ada0p2
   # gmirror label -vb round-robin root /dev/ada0p3
   # gmirror load

Итого у нас получаютcя 3 зеркала. Сразу же добавляем к зеркалам по их второй половине:

   # gmirror insert boot /dev/ada1p1
   # gmirror insert swap /dev/ada1p2
   # gmirror insert root /dev/ada1p3

Начнется процедура зеркалирования, длительность которой зависит от объема данных и характеристик жестких дисков. Наблюдать за этим увлекательным процессом можно при помощи команды:

   # gmirror status

А пока дожидаемся окончания этого процесса, чтобы зря не терять времени, можно не спеша сделать еще 2 полезные вещи. Первая, добавить модуль gmirror в загрузку ядра:

   # mount /dev/mirror/root /mnt
   # echo ‘geom_mirror_load="YES"’ > /mnt/boot/loader.conf

И вторая, отредактировать fstab в соответствии с измененными под зеркала именами разделов:

   # cat /mnt/etc/fstab
   #Device        Mountpoint    FStype    Options    Dump    Pass#
   /dev/mirror/swap    none        swap        sw        0    0
   /dev/mirror/root    /        ufs        rw        1    1

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


URL:
Обсуждается: http://www.opennet.dev/tips/info/2681.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от freebsd (??) on 11-Апр-12, 16:17 
Кому это нужно? Есть ZFS.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Kibab email(ok) on 11-Апр-12, 17:50 
Иногда лучше жевать, чем говорить ;-)
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Раздел полезных советов: Настройка gmirror при использовании..."  +/
Сообщение от Kibab email(ok) on 11-Апр-12, 17:56 
Статья годная!
Можно было бы только добавить, что можно с инсталляционного диска сделать зеркала разделов всего на одном диске, далее перезагрузиться в мультиюзер и оттуда добавить к зеркалам остальные разделы. Будет меньше простой сервера.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 11-Апр-12, 20:41 
Добавлять диск в зеркало как ada0 - не совсем верно, т.к. при его замене, если не окажется аналогичного и будете ставить какой-то другой, может статься так, что он меньше на несколько секторов, в итоге получите большой облом - диск в массив не воткнется.
С mbr-ом я всегда создаю один или два слайса, немногим меньше, чем объем диска (обычно просто просто выравниваю по целому число ГБ), слайсы вставляю в зеркало, т.е. как-то так:
gmirror label -b round-robin label1 ada1s1
gmirror label -n -b round-robin label2 ada1s1
и на зеркалах уже делаю разделы:
bsdlabel -w /dev/mirror/label1
bsdlabel -e /dev/mirror/label1
...

От сюда у меня возникает вопрос по gpt, который давно уже крутится в голове (сорри, что не на форум вылаживаю)...  Я не хочу, по выше оговоренной причине делать зеркало на весь диск, но в gpt нет слайсов, а есть только разделы. Разделы, хотя бы по соображениям безопасности (они имеют разный набор флагов монтировния), я делаю отдельные для:
/
/usr
/var
/tmp
/home
/backup
следовательно, я должен сделать для каждого раздела зеркало, т.е. всего 6-ть зеркал, как-то это кривовато... объясняю почему: если не выключить автосинхрон на зеркалах, то шесть зеркал просто "замучают" головку диска и упадет скорость синхронизации, но что еще хуже - сервисы себя будут чувствовать очень не комфортно в этот промежуток времени. Запускать последовательно синхронизацию зеркал - то же то еще счастье, нужно следить когда закончится очередной синхрон и стартовать следующий. В своих конфигурациях на mbr я обычно делаю маленький слайс под / и /usr и включаю на нам авто-синхронизацию, остальные разделы делаю на втором, большом, слайсе, на котором автосинхрон выключен, а запускаю я синхронизацию на втором зеркале вручную, в некритичное время, и тогда, когда закончилась синхронизация первого зеркала.

Бегло опробовав создавать mbr-разделы на gpt-разделах:
bsdlabel -w /dev/ada1p3
bsdlabel -e /dev/ada1p3
глюков не нашел, т.е. по идее, с gpt-разделми можно работать как с mbr-слайсами, но возникате вопрос насколько это правильно? к тому же mbr-раздел больше 2Т не сделаешь...
Понятно, что zfs тут разруливает со своими разделами очень хорошо, но нужна ufs... не охота держать шесть зеркал... кто как делает и какие мысли есть по этому поводу?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от iZEN (ok) on 11-Апр-12, 21:28 
> я делаю
> отдельные для:
> /
> /usr
> /var
> /tmp
> /home
> /backup
> следовательно, я должен сделать для каждого раздела зеркало, т.е. всего 6-ть зеркал,
> как-то это кривовато...

Зачем вы выносите /usr на отдельный раздел, я не понял?
Достаточно держать в этом системном каталоге две точки монтирования для отдельных ФС: /usr/local и /usr/home (у вас это /home).

> Бегло опробовав создавать mbr-разделы на gpt-разделах:
> bsdlabel -w /dev/ada1p3
> bsdlabel -e /dev/ada1p3
> глюков не нашел,

А смысл?
Если только в отдельном GPT-разделе устанавливать образ FreeBSD с собственными настройками и особенностями работы.

> т.е. по идее, с gpt-разделми можно работать как с
> mbr-слайсами, но возникате вопрос насколько это правильно?

"Матрёшка" одной системы внутри "матрёшки" другой системы. Но зачем?
Разделов GPT должно хватить для всего.

> к тому же mbr-раздел больше 2Т не сделаешь...

Разметку MBR нельзя распространить на всё адресуемое пространство на дисках размером больше 2 ТБ — так точнее.

> Понятно, что zfs тут разруливает со своими разделами очень хорошо, но нужна
> ufs... не охота держать шесть зеркал... кто как делает и какие мысли есть по этому поводу?

GPT с отдельными зеракалируемыми разделами GEOM Mirror лучше всего. Например, можно (даже нужно) сделать независимые загрузочные разделы или сделать разделы с различающимися системными файлами и конфигурацией на двух дисках, чтобы иметь возможность быстрого отката или переключения на заведомо рабочую системную конфигурацию. Можно отвести некоторые независимые разделы для graid3, если предполагается использование >2 дисков. Составить зеркала только для действительно важных разделов, а другие GPT-разделы использовать "как есть" без объединения в RAID.


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 11-Апр-12, 22:26 
>Зачем вы выносите /usr на отдельный раздел, я не понял?
>Достаточно держать в этом системном каталоге две точки монтирования для отдельных ФС: /usr/local и /usr/home (у вас это /home).

Исторически так сложилось, хотя я согласен, что вынос /usr/local более логично, но не суть важно /usr или /usr/local - это не меняет кол-ва зеркал.

>А смысл?
>Если только в отдельном GPT-разделе устанавливать образ FreeBSD с собственными настройками и особенностями работы.

Смысл только в одном - сократить кол-во зеркал.

>"Матрёшка" одной системы внутри "матрёшки" другой системы. Но зачем?
>Разделов GPT должно хватить для всего.

для 1000 зеркал, да, хватит :)

>GPT с отдельными зеракалируемыми разделами GEOM Mirror лучше всего.
>Например, можно (даже нужно) сделать независимые загрузочные разделы
>или сделать разделы с различающимися системными файлами и конфигурацией
>на двух дисках, чтобы иметь возможность быстрого отката или переключения на
>заведомо рабочую системную конфигурацию. Можно отвести некоторые независимые
>разделы для graid3, если предполагается использование >2 дисков. Составить
>зеркала только для действительно важных разделов, а другие GPT-разделы
>использовать "как есть" без объединения в RAID.

Зазеркалено (ну или raid 3/5/6/10... - кому как нравится) - должно быть все, кроме своп разделов, их вообще нельзя располагать на каких-то программных райдах, если, в будущем, возможно, потребуется снять корку с ядра и искать баги в этих самых программных райдах. Ну и у меня почти 200 серверов сейчас, мне совершенно не до игр с синхроном 1000-и разделов на каждом и с поднятием какой-то инфы, которая когда-то лежала вот так: "другие GPT-разделы использовать \"как есть\" без объединения в RAID". То что есть сейчас у меня с mbr: два раздела, один маленький с автосинхроном, один большой с ручным запуском синхронизации - я считаю идеальным вариантом, того же охота и от gpt, т.е. охота просто не плодить лишних и однотипных сущностей... 2-а зеркала - это нормально, 6 - явный перебор.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "+ 1"  +/
Сообщение от ALD email on 11-Апр-12, 23:35 
Перевел половину серверов на ZFS, правда засада с sendfile...
ZFS по сравнению с GPT более удобно и с точки зрения обслуживания проще.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

8. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Alexander Sheiko email on 11-Апр-12, 23:41 
...с неслабыми аппетитами к оперативной памяти.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

9. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от dima (??) on 12-Апр-12, 04:20 
ну почему все через жопу :(
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от iZEN (ok) on 12-Апр-12, 07:44 
Вообще, давно можно ZFS во FreeBSD без разметки на разделы.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

11. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от iZEN (ok) on 12-Апр-12, 07:45 
> ну почему все через жопу :(

Так надо.


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

12. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от iZEN (ok) on 12-Апр-12, 07:46 
> ...с неслабыми аппетитами к оперативной памяти.

2 ГБ минимум ОЗУ потребуется ZFS, чтобы начать нормально работать. Модули памяти нынче дёшевы.


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

13. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 12-Апр-12, 09:42 
> Вообще, давно можно ZFS во FreeBSD без разметки на разделы.

Можно, только все же лучше отдавать не весь винт под ФС, а чуть меньше, это можно без разделов?
Ну и к обсуждаемому вопросу это отношение не имеет.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Slava (??) on 12-Апр-12, 15:01 
>> Однако нужно забыть сделать диск ada1 загрузочным

Всё-таки наверное лучше НЕ забыть )

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Alexander Sheiko email on 12-Апр-12, 22:40 
> 2 ГБ минимум ОЗУ потребуется ZFS, чтобы начать нормально работать. Модули памяти
> нынче дёшевы.

Всего навсего, если сравнить с UFS. В 2 гига можно влепить не один сервер.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

16. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Bocha email(??) on 13-Апр-12, 06:12 
"Кроме того, раздел /dev/da0p3 - содержит корневую файловую систему" - наверное всё таки ada0p3? А то при чем тут сказёвый диск непонятно откуда.

А вообще суть строчки в том, что раздел смонтирован, и размонтировать его не получится, поэтому в текущем положении изменить его не возможно.

А так ли это? Разве sysctl kern.geom.debugflags=16 не решает эту проблему? А то как-то тупо, получается, что удаленно зеркало построить нельзя. Вот раньше gmirror тоже не мог метадату записать на рабочий винт, Operation not permitted дескать, но делаем sysctl kern.geom.debugflags=16 и всё получается, остается поправить fstab и перезагрузиться, скрестив пальцы.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 13-Апр-12, 07:38 
>> 2 ГБ минимум ОЗУ потребуется ZFS, чтобы начать нормально работать. Модули памяти
>> нынче дёшевы.
> Всего навсего, если сравнить с UFS. В 2 гига можно влепить не
> один сервер.

Каждому инструменту свое место.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Настройка gmirror при использовании GPT во FreeBSD 9"  –1 +/
Сообщение от butcher (ok) on 13-Апр-12, 11:31 
Второй метод считаю некорректным, хоть он и рабочий. Зеркало нужно делать до того, как создали файловые системы. Либо использовать резервирование последних блоков для метаданных GEOM классов при вызове newfs (ключ -r).
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

19. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от butcher (ok) on 13-Апр-12, 12:49 
> Бегло опробовав создавать mbr-разделы на gpt-разделах:
> bsdlabel -w /dev/ada1p3
> bsdlabel -e /dev/ada1p3
> глюков не нашел, т.е. по идее, с gpt-разделми можно работать как с
> mbr-слайсами, но возникате вопрос насколько это правильно? к тому же mbr-раздел
> больше 2Т не сделаешь...
> Понятно, что zfs тут разруливает со своими разделами очень хорошо, но нужна
> ufs... не охота держать шесть зеркал... кто как делает и какие
> мысли есть по этому поводу?

1. Привыкайте пользоваться gpart(8).
2. Сейчас gptboot умеет загружать систему только с GPT раздела с типом "freebsd-ufs". Поэтому вам придётся как минимум для корневой системы и загрузочного кода создать два GPT раздела: "freebsd-boot" и "freebsd-ufs". А для остальных вы вполне можете создать обычный раздел с типом "freebsd" и внутри него уже привычную вам BSD label.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

20. "Настройка gmirror при использовании GPT во FreeBSD 9"  –1 +/
Сообщение от Аноним (??) on 13-Апр-12, 14:21 
> Второй метод считаю некорректным, хоть он и рабочий. Зеркало нужно делать до
> того, как создали файловые системы. Либо использовать резервирование последних блоков
> для метаданных GEOM классов при вызове newfs (ключ -r).

Полностью согласен. Более того, при полном заполнении раздела затерем последние блоки, в которых geom-методанные со всеми вытекающим последствиями...

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

21. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от mitiok (ok) on 14-Апр-12, 12:27 
используйте load. ошибки вынуждавшие использовать исключиельно round-robin исправлены 100500 лет назад
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

22. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Nekit email(??) on 14-Апр-12, 12:59 
>> Терзаемый неприятным чувством, что поддержка GPT...

Мда... Матчасть совсем не изучена.

Во-первых: GPT в этом релизе довели до ума, другими словами, теперь она совсем не сырая.
Во-вторых: GPT делает копию таблицы разделов в конце диска. Ну и gmirror то же так делает. В итоге получается, что при создании зеркала затирается резервная копия разделов GPT. Отсюда:
1) сообщения (точнее даже предупреждения) об ошибках на этапе загрузки.
2) риск потери данных, всвязи отсутствия бэкапа сектора GPT.

А так работать вполне будет, что и выявлено к концу статьи.

И кстати, об этом писал сам человек, который занимается разработкой GPT во фри.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

23. "Настройка gmirror при использовании GPT во FreeBSD 9"  +1 +/
Сообщение от Black Hawk email on 15-Апр-12, 12:38 
Интересно почему?
ведь newfs уже вызывается на зеркало непосредственно (newfs <someflags> /dev/mirror/gm<N>)
и как оно все перезатрет не понятно
Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

24. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от terr0rist (ok) on 16-Апр-12, 12:38 
> если не выключить автосинхрон на зеркалах, то шесть зеркал просто "замучают" головку диска и упадет скорость синхронизации

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

25. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 16-Апр-12, 13:42 
>> если не выключить автосинхрон на зеркалах, то шесть зеркал просто "замучают" головку диска и упадет скорость синхронизации
> во фре сидят не болваны, и синхронизация происходит не одновременно, а по
> очереди. Хотя может быть это и не написано нигде, но я
> в этом имел неоднократно возможность убедиться.

а давайте проверим, че уж голословно-то говорить?
# uname -r
8.2-RELEASE

# mdconfig -a -t malloc -s 512m -u1
# mdconfig -a -t malloc -s 512m -u2
# mdconfig -a -t malloc -s 512m -u3
# mdconfig -a -t malloc -s 512m -u4
# mdconfig -a -t malloc -s 512m -u5
# mdconfig -a -t malloc -s 512m -u6

# gmirror label -v -b round-robin test1 /dev/md1 && gmirror label -v -b round-robin test2 /dev/md2 && gmirror label -v -b round-robin test3 /dev/md3 && gmirror status
Metadata value stored on /dev/md1.
Done.
Metadata value stored on /dev/md2.
Done.
Metadata value stored on /dev/md3.
Done.
           Name    Status  Components
   mirror/test1  COMPLETE  md1
   mirror/test2  COMPLETE  md2
   mirror/test3  COMPLETE  md3

# gmirror insert test1 md4 && gmirror insert test2 md5 && gmirror insert test3 md6 && gmirror status && gmirror status && gmirror status && gmirror status && gmirror status && gmirror status && gmirror status
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (1%)
   mirror/test2  DEGRADED  md2
                           md5 (1%)
   mirror/test3  DEGRADED  md3
                           md6 (0%)
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (2%)
   mirror/test2  DEGRADED  md2
                           md5 (1%)
   mirror/test3  DEGRADED  md3
                           md6 (1%)
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (2%)
   mirror/test2  DEGRADED  md2
                           md5 (2%)
   mirror/test3  DEGRADED  md3
                           md6 (2%)
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (3%)
   mirror/test2  DEGRADED  md2
                           md5 (3%)
   mirror/test3  DEGRADED  md3
                           md6 (2%)
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (4%)
   mirror/test2  DEGRADED  md2
                           md5 (3%)
   mirror/test3  DEGRADED  md3
                           md6 (3%)
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (5%)
   mirror/test2  DEGRADED  md2
                           md5 (4%)
   mirror/test3  DEGRADED  md3
                           md6 (4%)
           Name    Status  Components
   mirror/test1  DEGRADED  md1
                           md4 (5%)
   mirror/test2  DEGRADED  md2
                           md5 (5%)
   mirror/test3  DEGRADED  md3
                           md6 (5%)

удивительно, правда, они все разом синхрония?

но это еще фигня, а не фигня то, что автосинхрон запускается ДО fsck, при падении сервера, а одновременная работа fsck и gmirror знаете насколько увеличивает продолжительность чека фс?

Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

26. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 16-Апр-12, 13:59 
> Интересно почему?
> ведь newfs уже вызывается на зеркало непосредственно (newfs <someflags> /dev/mirror/gm<N>)
> и как оно все перезатрет не понятно

А где вы видите newfs?, я вот вижу, что человек делает разметку ada1, как на ada0:

># gpart backup ada0 > ada0.gpt
># gpart restore -F /dev/ada1 < ada0.gpt

далее, он нам говорит, что ada0 это тот винт, с которого работает сейчас система и значит на нем уже отформатированы разделы и имеют информацию:

>Кроме того, раздел /dev/da0p3 – содержит корневую файловую систему, он смонтирован,
>и размонтировать его не получится, поэтому в текущем положении изменить его не
>возможно.

далее, загрузившись с сидюка он создает зеркало на том самом рабочем ada0:

>gmirror label -vb round-robin boot /dev/ada0p1

и тарам-пам-пам: монтирует созданное зеркало и правит там fstab. Дальше он перезагружается в рабочую систему, и у него она даже работает, но!, с выше оговоренным косяком.

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

27. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от nuclight email(ok) on 17-Апр-12, 01:26 
Этот тест ни разу не показателен, по той причине, что разделы одного диска имеют одного общего GEOM-провайдера (так сказать, родителя) - сам диск. А md-разделы в тесте - не имеют. Если хотите проверить утверждение об очередности синхронизации зеркал на одном диске, проверяйте на реальном диске.
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

28. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от nuclight email(ok) on 17-Апр-12, 01:33 
Во-первых, не нужно отдельный /tmp (это уже на один раздел меньше), да и с /usr надо немного не так (он на /, а отдельным делается /usr/local), короче вот:

  $ ls -lod /tmp /usr/obj /usr/ports /usr/src
  lrwxr-xr-x  1 root  wheel  -        12  8 янв  2010 /tmp@ -> /var/tmp/tmp
  lrwxr-xr-x  1 root  wheel  -        13 29 дек  2009 /usr/obj@ -> local/BSD/obj
  lrwxr-xr-x  1 root  wheel  -        15 29 дек  2009 /usr/ports@ -> local/BSD/ports
  lrwxr-xr-x  1 root  wheel  -        13 29 дек  2009 /usr/src@ -> local/BSD/src
  drwxrwxrwt  8 root  wheel  sunlnk 1024 16 апр 03:13 /var/tmp/tmp/

Во-вторых, автосинхронизацию зеркал один фиг необходимо выключать - потому что пересекается с fsck, и всё получается медленно и долго. Лучше написать свой скрипт, который проверит и стартует синхронизацию разделов (по очереди) через минут так 40 после начала загрузки. Скрипт заодно и отрепортить может, "хозяин, случалось тут".
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

29. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 17-Апр-12, 10:11 
> Этот тест ни разу не показателен, по той причине, что разделы одного
> диска имеют одного общего GEOM-провайдера (так сказать, родителя) - сам диск.
> А md-разделы в тесте - не имеют. Если хотите проверить утверждение
> об очередности синхронизации зеркал на одном диске, проверяйте на реальном диске.

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

# uname -r
8.2-RELEASE

# gmirror label -v -b round-robin test1 /dev/ad0s3 && gmirror label -v -b round-robin test2 /dev/ad0s4 && gmirror status
Metadata value stored on /dev/ad0s3.
Done.
Metadata value stored on /dev/ad0s4.
Done.
           Name    Status  Components
   mirror/test1  COMPLETE  ad0s3
   mirror/test2  COMPLETE  ad0s4

# gmirror insert test1 /dev/ad2s3 && gmirror insert test2 /dev/ad2s4 && gmirror status && sleep 1 && gmirror status && sleep 1 && gmirror status
           Name    Status  Components
   mirror/test1  DEGRADED  ad0s3
                           ad2s3 (0%)
   mirror/test2  DEGRADED  ad0s4
                           ad2s4 (0%)
           Name    Status  Components
   mirror/test1  DEGRADED  ad0s3
                           ad2s3 (5%)
   mirror/test2  DEGRADED  ad0s4
                           ad2s4 (4%)
           Name    Status  Components
   mirror/test1  DEGRADED  ad0s3
                           ad2s3 (9%)
   mirror/test2  DEGRADED  ad0s4
                           ad2s4 (9%)

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

30. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 17-Апр-12, 10:37 
> Во-первых, не нужно отдельный /tmp (это уже на один раздел меньше)

на /tmp у меня стоит noexec и nosymfollow, на /var я не могу поставить, как минимум noexec, потому что оно нужно для портов (/var/db/pkg/), ну и симлинки иногда нужны

> Во-вторых, автосинхронизацию зеркал один фиг необходимо выключать - потому что пересекается
> с fsck, и всё получается медленно и долго. Лучше написать свой
> скрипт, который проверит и стартует синхронизацию разделов (по очереди) через минут
> так 40 после начала загрузки.

Да, я уже упоминал выше, что fsck и одновременный синхрон - то еще зло. И авто-старт синхрона - не чем не лучше, если сервер упал, то нужно разбираться в причинах, до старта синхронизации. Случалось, что автоматика выкидывала из зеркала не тот диск, в зеркале оставался диск с 40-ми или 4-ми ошибками, при синхронизации с такого диска, синхрон спотыкается о бед-блок и замораживается, например на 20% и что тут не делай - дальше синхрон не идет, единственный вариант - развалить зеркало и собрать новое, на втором винте, который был ошибочно выкинут, но, если этот диск уже побывал в синхроне и синхрон не завершился - информация на нем, с большой долей вероятности, будет не консистентна, со всеми вытекающими. Поэтому я всегда смотрю причину в логах, если есть какие-то сомнения или подозрения, прогоняю по винтам dd, затем запускаю синхрон.
А в целом идея годная, можно написать скрипт, который будет последовательно синхронизировать зеркала после того, как его ручками запустишь, костыльно, но работать будет...

>Скрипт заодно и отрепортить может, "хозяин, случалось тут".

Тут, все же, лучше всего, если за этим следит мониторинг, и если нужно, требует твоего вмешательства.

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

31. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от iZEN (ok) on 17-Апр-12, 21:18 
> Во-вторых, автосинхронизацию зеркал один фиг необходимо выключать - потому что пересекается
> с fsck, и всё получается медленно и долго. Лучше написать свой
> скрипт, который проверит и стартует синхронизацию разделов (по очереди) через минут
> так 40 после начала загрузки. Скрипт заодно и отрепортить может, "хозяин,
> случалось тут".

fsck может штатно запуститься с задержкой, какой требуется. Нужно просто указать требуемое зачение опции (количество секунд после старта ядра системы) background_fsck_delay в rc.conf: http://www.freebsd.org/cgi/man.cgi?query=rc.conf


Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

32. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от nuclight email(ok) on 18-Апр-12, 20:50 
>> Во-первых, не нужно отдельный /tmp (это уже на один раздел меньше)
> на /tmp у меня стоит noexec и nosymfollow, на /var я не
> могу поставить, как минимум noexec, потому что оно нужно для портов
> (/var/db/pkg/), ну и симлинки иногда нужны

Это на самом деле нафиг не нужно. Когда-то много лет назад я тоже баловался флагами на /tmp - только никакой реальной безопасности это не привносило (сейчас типично свалить туда скрипт и запустить его как perl /tmp/malware.pl без всяких +x). А вот  регулярный геморрой с make installworld из-за этого имел. В итоге отказался, тем более, что это более эффективное использование диска - не два ограниченных раздела для временных, а один - вдруг кому-то разово приспичит больше, чем там есть?..

>[оверквотинг удален]
> синхрон спотыкается о бед-блок и замораживается, например на 20% и что
> тут не делай - дальше синхрон не идет, единственный вариант -
> развалить зеркало и собрать новое, на втором винте, который был ошибочно
> выкинут, но, если этот диск уже побывал в синхроне и синхрон
> не завершился - информация на нем, с большой долей вероятности, будет
> не консистентна, со всеми вытекающими. Поэтому я всегда смотрю причину в
> логах, если есть какие-то сомнения или подозрения, прогоняю по винтам dd,
> затем запускаю синхрон.
> А в целом идея годная, можно написать скрипт, который будет последовательно синхронизировать
> зеркала после того, как его ручками запустишь, костыльно, но работать будет...

Ну, вот видите, даже и руками убедиться оказывается лучше. Тем более стоит отключать (тут вспоминаем, с чего тред начался).

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

33. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 18-Апр-12, 22:32 
>[оверквотинг удален]
>> могу поставить, как минимум noexec, потому что оно нужно для портов
>> (/var/db/pkg/), ну и симлинки иногда нужны
> Это на самом деле нафиг не нужно. Когда-то много лет назад я
> тоже баловался флагами на /tmp - только никакой реальной безопасности это
> не привносило (сейчас типично свалить туда скрипт и запустить его как
> perl /tmp/malware.pl без всяких +x). А вот  регулярный геморрой с
> make installworld из-за этого имел. В итоге отказался, тем более, что
> это более эффективное использование диска - не два ограниченных раздела для
> временных, а один - вдруг кому-то разово приспичит больше, чем там
> есть?..

по noexec-у согласен, хотя nosymfollow все же работает, в купе с nosuid, к тому же /tmp у меня монтируется в async режиме без soft updates, это, на ряду с noatime, дает некоторый прирост скорости.

>Ну, вот видите, даже и руками убедиться оказывается лучше. Тем более стоит отключать (тут вспоминаем, с чего тред начался).

Лучше то оно лучше, оно и так, всегда ручками пускается. А вот осадочек все же есть из-за лишних сущностей. Попробую на каком-нибудь новом сервере, погоняю с полгодика и видно будет насколько оно мешает или не мешает.

Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

34. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от playnet (ok) on 24-Апр-12, 16:15 
>Зазеркалено (ну или raid 3/5/6/10... - кому как нравится) - должно быть все, кроме своп разделов, их вообще нельзя располагать на каких-то программных райдах,

...и при смерти диска с активным свопом с большой вероятностью получаем кернел паник, ага. Так что глупый совет. И первым делом надо именно зеркалировать свопы. На моих серверах так - /boot-zfs, swap-gmirror, /root-zfs и уже рут делится как полагается.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

35. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Oleg (??) on 08-Май-12, 00:20 
Хорошо написано.
Еще одна статья о настройке RAID1 на разделах GPT, используя как инструмент gmirror: http://muff.kiev.ua/content/gmirror-programnyi-raid-1-i-gpt
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

36. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Аноним (??) on 10-Май-12, 10:29 
>>Зазеркалено (ну или raid 3/5/6/10... - кому как нравится) - должно быть все, кроме своп разделов, их вообще нельзя располагать на каких-то программных райдах,
> ...и при смерти диска с активным свопом с большой вероятностью получаем кернел
> паник, ага. Так что глупый совет. И первым делом надо именно
> зеркалировать свопы. На моих серверах так - /boot-zfs, swap-gmirror, /root-zfs и
> уже рут делится как полагается.

своп - это подстраховка, а не панацея, если у вас сервера уходят в своп - думайте, что у вас не так.

Ответить | Правка | ^ к родителю #34 | Наверх | Cообщить модератору

37. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Владимир (??) on 23-Ноя-12, 17:47 
БОльшое спасибо за статью, однако
"mount /dev/mirror/gm0p3 /mnt" выдает Invalid argument
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

38. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от шмидт email on 24-Сен-13, 11:11 
в первой части (вторую вообще не читал) не нужно перезагружаться второй раз, когда инстолляция закончена, то инстоллятор предлагает зайти сразу в консоль, там корневая фс уже смонтирована в /mnt и можно поправить конфиг загрузчика.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

40. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от robin email on 11-Май-15, 16:41 
если ada0 диск был заменен. как восстановить массив ?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

41. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от Oleg (??) on 11-Май-15, 18:13 
> если ada0 диск был заменен. как восстановить массив ?

gmirror insert gm0 /dev/ada0

Ответить | Правка | ^ к родителю #40 | Наверх | Cообщить модератору

42. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от robin email on 12-Май-15, 12:49 
а если зерколо из раздеов ? а не с целых дисков
Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

43. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от robin email on 12-Май-15, 12:53 
> а если зерколо из раздеов ? а не с целых дисков, например:

$ gmirror status
       Name    Status  Components
mirror/boot  COMPLETE  ada0p1 (ACTIVE)
                       ada1p1 (ACTIVE)
mirror/root  COMPLETE  ada0p2 (ACTIVE)
                       ada1p2 (ACTIVE)
mirror/swap  COMPLETE  ada0p3 (ACTIVE)
                       ada1p3 (ACTIVE)

Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

44. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от robin email on 12-Май-15, 15:31 
сам спросил сам ответил:
Восстановление после дисковых сбоев. допустим диск ada0 - заменен на новый.

1. смортим структуру рейда. видим три масива которые нужно пересобрать boot root swap
# gmirror status
       Name    Status  Components
mirror/boot  DEGRADED  ada1p1 (ACTIVE)
mirror/root  DEGRADED  ada1p2 (ACTIVE)
mirror/swap  DEGRADED  ada1p3 (ACTIVE)

2. сохраним разметку диска и восстановим её на другом диске:
# gpart backup ada1 > ada1.gpt
# gpart restore -F /dev/ada0 < ada1.gpt
# gpart show

=>     34  4194237  ada1  GPT  (2.0G)
       34     1024     1  freebsd-boot  (512K)
     1058  3982336     2  freebsd-ufs  (1.9G)
  3983394   208896     3  freebsd-swap  (102M)
  4192290     1981        - free -  (991K)

=>     34  4194237  ada0  GPT  (2.0G)
       34     1024     1  freebsd-boot  (512K)
     1058  3982336     2  freebsd-ufs  (1.9G)
  3983394   208896     3  freebsd-swap  (102M)
  4192290     1981        - free -  (991K)

3. нужно сделать диск ada0 загрузочным, ведь мы зеркалируем не весь
диск целиком, а только его разделы. Иначе с выходом из строя ada0, система не
сможет загрузится с ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0

4. восстанавливаем boot
# gmirror forget boot
# gmirror insert boot /dev/ada0p1

5. восстанавливаем root
# gmirror forget root
# gmirror insert root /dev/ada0p2

6. восстанавливаем root
# gmirror forget swap
# gmirror insert swap /dev/ada0p3

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

45. "Настройка gmirror при использовании GPT во FreeBSD 9"  +/
Сообщение от mezantrop (ok) on 26-Июл-17, 09:38 
Ха, я думал, что эта моя старенькая заметка давно потерялась! Только странно, что она здесь проходит под чужим аккаунтом  - однофамилец из Новосибирска. Понятно, что много воды утекло уже и текст, наверное, не актуален, но если можно, поправьте, пожалуйста :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру