Как создать загрузочную избыточную систему Debian с программным обеспечением raid10 с 3 или 4 (или более) дисками?

Как создать систему Debian, которая является загрузочной, имеет программный raid10 и все еще загружается, когда я вынимаю один или несколько (загрузочных) дисков? Я хотел бы использовать как можно меньше дисков, желательно 3 или 4. И каждый диск, который является частью рейда, должен быть загрузочным.

Я выбираю raid10, потому что это самый быстрый избыточный уровень рейда и все еще дает мне достаточно места. Raid5 или 6 слишком медленный (и может иметь теоретический предел http://www.zdnet.com/blog/storage/why-raid-5-stops-working-in-2009/162), а raid1 этого не делает дать мне достаточно места и менее гибок. Raid0 совсем не избыточен.

2 ответа

Решение

Здесь я опишу странную версию, это программный raid10, построенный из 3 дисков (известно, что знающие люди не верили в 3 диска raid10). Допустим, у вас есть сервер высотой 1U с 4 отсеками для дисков, и вы хотели бы иметь один свободный отсек для диска хранения или для горячего резервирования. Все диски имеют одинаковый размер, хотя в этом нет необходимости, если вы создаете разделы в соответствии с диском наименьшего размера.

Вы вставляете компакт-диск Debian или USB-накопитель и начинаете установку системы. Когда вы дойдете до той части, где начинаете разбивать диски, сделайте следующее...

Каждый диск, который является частью рейда, должен иметь загрузочный раздел размером около 1 ГБ, который НЕ является частью рейда. Создайте эти разделы как обычно, они должны быть одинакового размера. Отметьте их как загрузочные, точка монтирования на одном из дисков должна быть / boot, остальные можно оставить как отключенные.

/dev/sda1 - /boot
/dev/sdb1 - not mounted
/dev/sdc1 - not mounted

Если вы предпочитаете (я делаю) создавать отдельные разделы для обычных мест, вы можете сделать это:

/dev/sd[abc]2 - swap  (Yes we have redundant swap, why not, it ought to be faster than swap outside the raid10)
/dev/sd[abc]3 - /
/dev/sd[abc]4 - /usr
/dev/sd[abc]5 - /tmp
/dev/sd[abc]6 - /var
/dev/sd[abc]7 - /opt
/dev/sd[abc]8 - /home

В противном случае просто создайте один раздел для раздела подкачки и один большой раздел на каждом диске. Обратите внимание, что вы не можете разделить softraid (mdadm), поэтому сначала вы создаете разделы. (Изменить: Начиная с ядра 2.6.28, можно разбить рейд как любое другое блочное устройство, хотя я предпочитаю вышеописанный метод.)

Создайте рейды из каждого раздела, кроме первого. Например:

mdadm --create /dev/md0 --level=10 --raid-devices=3 /dev/sd[abc]2

и так далее.

В установке Debian вы будете использовать соответствующие опции меню вместо команды mdadm, это было просто для иллюстрации. Если у вас есть 4-й диск в системе, либо добавьте его в качестве оперативного резерва, 4-го участника рейда или в качестве хранилища, если только вы не сделаете последний, убедитесь, что он имеет ту же таблицу разделов и загрузочные свойства, что и другие диски. Я оставлю это на ваше усмотрение.

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

Просто установите Debian как обычно. Как только вы дойдете до стадии установки grub, вам придется сделать немного больше, чем обычно.

Мы предполагаем, что /dev/sda1 монтируется в /boot. Убедитесь, что MBR сохранена в /dev/sda, /dev/sdb и /dev/sdc. Итак, мы говорим grub, что все 3 диска являются загрузочными.

Как только вся система будет установлена, вы сможете загрузить систему, и у вас будет работающая загрузочная система Debian на raid10 с 3 дисками. Однако он не является полностью избыточным в случае сбоя диска, то есть он не будет магически загружаться с другого диска. Для этого вам необходимо сделать точные копии загрузочного раздела в /dev/sda1 на другие диски.

Для этого используйте dd (bs=500M сильно увеличит dd, настройте 500M примерно на 2/3 памяти вашей системы):

dd bs=500M if=/dev/sda1 of=/dev/sdb1
dd bs=500M if=/dev/sda1 of=/dev/sdc1

Теперь убедитесь, что ваш BIOS настроен на попытку загрузки со всех 3 дисков, порядок не имеет значения. Пока биос будет пытаться загрузиться с любого диска, в случае сбоя одного из дисков система будет автоматически загружаться с другого диска, поскольку идентификаторы UUID точно такие же.

Есть небольшая загвоздка, не забывайте иногда повторять команду dd, если / boot изменился, скажем, с обновлением ядра. Сделайте это еженедельной работой cron, если хотите.

Это всегда весело, проверьте вашу избыточную систему, изменив приоритет загрузки BIOS. И если вам повезет, проверьте это, вынув один диск во время работы.:-) На самом деле я думаю, что вы должны сделать это, чтобы быть абсолютно уверенным, что это полностью излишне, зачем еще идти через неприятности. Тем не менее, это забавное упражнение. Если вы все сделали правильно (а я правильно записал), ваша система все равно будет загружаться, когда рейд станет ухудшаться. Также как если бы вы использовали аппаратный рейд. Я тестировал его на различных серверах 1U и 2U с 2, 3, 4 и более дисками.

Это также будет работать с raid1.

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

Поздний ответ, но не могли бы вы сделать то, что я делал в течение некоторого времени?

Я использую двухдисковый RAID1 для большинства моих серверов.

Они настроены таким образом, что md0 монтируется как / boot и занимает примерно 250 МБ raid1, а md1 монтируется как / и является оставшейся частью емкости диска, исключая область подкачки на каждом диске.

Таким образом, любые изменения в / boot отражаются в соответствии с обоими дисками, хотя во время загрузки ОС будет использовать тот, о котором биос сказал.

Просто не забудьте перезапустить grub-install / dev / sd *, чтобы каждый диск содержал действительный / boot. ОС будет автоматически поддерживать / загружаться в правильной синхронизации друг с другом.

Другие вопросы по тегам