The OpenNET Project / Index page

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

Настройка gmirror при использовании GPT во FreeBSD 9
С релизом FreeBSD-9.0, GPT-формат разделов жестких дисков стал, наконец, делом
обыденным, ведь даже новый инсталлятор предполагает использование GPT
по-умолчанию. Однако в связи с переходом на GPT-разметку дисков возникают и
сложности, поскольку очень многое, в том числе и документация, продолжает быть
завязано на ныне устаревший механизм MBR-разделов или слайсов. Так, например, к
своему огорчению я обнаружил, что большинство разделов Handbook'а посвященных
дискам, GEOM-классам и файловым системам изобилуют примерами работ со старыми
слайсами, а не используют для этой цели новый формат GPT.

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



Попав в командную строку, начинаем подготовку зеркала. Бегло проглядев вывод
команды 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. Теперь после
нашего краткого вмешательства, инсталлятор беспрепятственно позволит создать на
зеркале необходимые разделы. Более того все изменения будут даже динамически
отражаться на обеих половинах зеркала:



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

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



Как видно на скриншоте, разделы удачно скопировались и на бОльшем диске
осталось 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 &#8216;geom_mirror_load="YES"&#8217; > /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, нужно
обязательно дожидаться окончания процесса синхронизации, иначе вы потеряете данные.
 
11.04.2012 , Автор: Mikhail Zakharov
Ключи: freebsd, gpt, raid, gmirror / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Диски и файлы / RAID массивы

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, freebsd (??), 16:17, 11/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кому это нужно? Есть ZFS.
     
     
  • 2.2, Kibab (ok), 17:50, 11/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Иногда лучше жевать, чем говорить ;-)
     
  • 2.7, ALD (?), 23:35, 11/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Перевел половину серверов на ZFS, правда засада с sendfile...
    ZFS по сравнению с GPT более удобно и с точки зрения обслуживания проще.
     
  • 2.8, Alexander Sheiko (?), 23:41, 11/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    ...с неслабыми аппетитами к оперативной памяти.
     
     
  • 3.12, iZEN (ok), 07:46, 12/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > ...с неслабыми аппетитами к оперативной памяти.

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


     
     
  • 4.15, Alexander Sheiko (?), 22:40, 12/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > 2 ГБ минимум ОЗУ потребуется ZFS, чтобы начать нормально работать. Модули памяти
    > нынче дёшевы.

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

     
     
  • 5.17, Аноним (-), 07:38, 13/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> 2 ГБ минимум ОЗУ потребуется ZFS, чтобы начать нормально работать. Модули памяти
    >> нынче дёшевы.
    > Всего навсего, если сравнить с UFS. В 2 гига можно влепить не
    > один сервер.

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

     

  • 1.3, Kibab (ok), 17:56, 11/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Статья годная!
    Можно было бы только добавить, что можно с инсталляционного диска сделать зеркала разделов всего на одном диске, далее перезагрузиться в мультиюзер и оттуда добавить к зеркалам остальные разделы. Будет меньше простой сервера.
     
  • 1.4, Аноним (-), 20:41, 11/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Добавлять диск в зеркало как ada0 - не совсем верно, т к при его замене, если н... большой текст свёрнут, показать
     
     
  • 2.5, iZEN (ok), 21:28, 11/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > я делаю
    > отдельные для:
    > /
    > /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.


     
     
  • 3.6, Аноним (-), 22:26, 11/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Исторически так сложилось, хотя я согласен, что вынос usr local более логично, ... большой текст свёрнут, показать
     
     
  • 4.10, iZEN (ok), 07:44, 12/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще, давно можно ZFS во FreeBSD без разметки на разделы.
     
     
  • 5.13, Аноним (-), 09:42, 12/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Вообще, давно можно ZFS во FreeBSD без разметки на разделы.

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

     
  • 4.34, playnet (ok), 16:15, 24/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >Зазеркалено (ну или raid 3/5/6/10... - кому как нравится) - должно быть все, кроме своп разделов, их вообще нельзя располагать на каких-то программных райдах,

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

     
     
  • 5.36, Аноним (-), 10:29, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >>Зазеркалено (ну или raid 3/5/6/10... - кому как нравится) - должно быть все, кроме своп разделов, их вообще нельзя располагать на каких-то программных райдах,
    > ...и при смерти диска с активным свопом с большой вероятностью получаем кернел
    > паник, ага. Так что глупый совет. И первым делом надо именно
    > зеркалировать свопы. На моих серверах так - /boot-zfs, swap-gmirror, /root-zfs и
    > уже рут делится как полагается.

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

     
  • 2.19, butcher (ok), 12:49, 13/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Бегло опробовав создавать 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.

     
  • 2.24, terr0rist (ok), 12:38, 16/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > если не выключить автосинхрон на зеркалах, то шесть зеркал просто "замучают" головку диска и упадет скорость синхронизации

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

     
     
  • 3.25, Аноним (-), 13:42, 16/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    а давайте проверим, че уж голословно-то говорить uname -r 8 2-RELEASE mdcon... большой текст свёрнут, показать
     
     
  • 4.27, nuclight (ok), 01:26, 17/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Этот тест ни разу не показателен, по той причине, что разделы одного диска имеют одного общего GEOM-провайдера (так сказать, родителя) - сам диск. А md-разделы в тесте - не имеют. Если хотите проверить утверждение об очередности синхронизации зеркал на одном диске, проверяйте на реальном диске.
     
     
  • 5.29, Аноним (-), 10:11, 17/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Этот тест ни разу не показателен, по той причине, что разделы одного
    > диска имеют одного общего 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%)

     
  • 2.28, nuclight (ok), 01:33, 17/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, не нужно отдельный /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 после начала загрузки. Скрипт заодно и отрепортить может, "хозяин, случалось тут".
     
     
  • 3.30, Аноним (-), 10:37, 17/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Во-первых, не нужно отдельный /tmp (это уже на один раздел меньше)

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

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

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

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

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

     
     
  • 4.32, nuclight (ok), 20:50, 18/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> Во-первых, не нужно отдельный /tmp (это уже на один раздел меньше)
    > на /tmp у меня стоит noexec и nosymfollow, на /var я не
    > могу поставить, как минимум noexec, потому что оно нужно для портов
    > (/var/db/pkg/), ну и симлинки иногда нужны

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

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

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

     
     
  • 5.33, Аноним (-), 22:32, 18/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >> могу поставить, как минимум noexec, потому что оно нужно для портов
    >> (/var/db/pkg/), ну и симлинки иногда нужны
    > Это на самом деле нафиг не нужно. Когда-то много лет назад я
    > тоже баловался флагами на /tmp - только никакой реальной безопасности это
    > не привносило (сейчас типично свалить туда скрипт и запустить его как
    > perl /tmp/malware.pl без всяких +x). А вот  регулярный геморрой с
    > make installworld из-за этого имел. В итоге отказался, тем более, что
    > это более эффективное использование диска - не два ограниченных раздела для
    > временных, а один - вдруг кому-то разово приспичит больше, чем там
    > есть?..

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

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

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

     
  • 3.31, iZEN (ok), 21:18, 17/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Во-вторых, автосинхронизацию зеркал один фиг необходимо выключать - потому что пересекается
    > с fsck, и всё получается медленно и долго. Лучше написать свой
    > скрипт, который проверит и стартует синхронизацию разделов (по очереди) через минут
    > так 40 после начала загрузки. Скрипт заодно и отрепортить может, "хозяин,
    > случалось тут".

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


     

  • 1.9, dima (??), 04:20, 12/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ну почему все через жопу :(
     
     
  • 2.11, iZEN (ok), 07:45, 12/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > ну почему все через жопу :(

    Так надо.


     

  • 1.14, Slava (??), 15:01, 12/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Однако нужно забыть сделать диск ada1 загрузочным

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

     
  • 1.16, Bocha (??), 06:12, 13/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "Кроме того, раздел /dev/da0p3 - содержит корневую файловую систему" - наверное всё таки ada0p3? А то при чем тут сказёвый диск непонятно откуда.

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

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

     
  • 1.18, butcher (ok), 11:31, 13/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Второй метод считаю некорректным, хоть он и рабочий. Зеркало нужно делать до того, как создали файловые системы. Либо использовать резервирование последних блоков для метаданных GEOM классов при вызове newfs (ключ -r).
     
     
  • 2.20, Аноним (-), 14:21, 13/04/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Второй метод считаю некорректным, хоть он и рабочий. Зеркало нужно делать до
    > того, как создали файловые системы. Либо использовать резервирование последних блоков
    > для метаданных GEOM классов при вызове newfs (ключ -r).

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

     
     
  • 3.23, Black Hawk (?), 12:38, 15/04/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Интересно почему?
    ведь newfs уже вызывается на зеркало непосредственно (newfs <someflags> /dev/mirror/gm<N>)
    и как оно все перезатрет не понятно
     
     
  • 4.26, Аноним (-), 13:59, 16/04/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Интересно почему?
    > ведь 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. Дальше он перезагружается в рабочую систему, и у него она даже работает, но!, с выше оговоренным косяком.

     

  • 1.21, mitiok (ok), 12:27, 14/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    используйте load. ошибки вынуждавшие использовать исключиельно round-robin исправлены 100500 лет назад
     
  • 1.22, Nekit (??), 12:59, 14/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Терзаемый неприятным чувством, что поддержка GPT...

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

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

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

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

     
  • 1.35, Oleg (??), 00:20, 08/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хорошо написано.
    Еще одна статья о настройке RAID1 на разделах GPT, используя как инструмент gmirror: http://muff.kiev.ua/content/gmirror-programnyi-raid-1-i-gpt
     
  • 1.37, Владимир (??), 17:47, 23/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    БОльшое спасибо за статью, однако
    "mount /dev/mirror/gm0p3 /mnt" выдает Invalid argument
     
  • 1.38, шмидт (?), 11:11, 24/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    в первой части (вторую вообще не читал) не нужно перезагружаться второй раз, когда инстолляция закончена, то инстоллятор предлагает зайти сразу в консоль, там корневая фс уже смонтирована в /mnt и можно поправить конфиг загрузчика.
     
  • 1.40, robin (?), 16:41, 11/05/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    если ada0 диск был заменен. как восстановить массив ?
     
     
  • 2.41, Oleg (??), 18:13, 11/05/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > если ada0 диск был заменен. как восстановить массив ?

    gmirror insert gm0 /dev/ada0

     
     
  • 3.42, robin (?), 12:49, 12/05/2015 [^] [^^] [^^^] [ответить]  
  • +/
    а если зерколо из раздеов ? а не с целых дисков
     
     
  • 4.43, robin (?), 12:53, 12/05/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > а если зерколо из раздеов ? а не с целых дисков, например:

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

     

  • 1.44, robin (?), 15:31, 12/05/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    сам спросил сам ответил:
    Восстановление после дисковых сбоев. допустим диск 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

     
  • 1.45, mezantrop (ok), 09:38, 26/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ха, я думал, что эта моя старенькая заметка давно потерялась! Только странно, что она здесь проходит под чужим аккаунтом  - однофамилец из Новосибирска. Понятно, что много воды утекло уже и текст, наверное, не актуален, но если можно, поправьте, пожалуйста :)
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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