Как мне создать систему Debian, которая является загрузочной, имеет программный raid10 и все равно будет загружаться, когда я извлечу один или несколько (загрузочных) дисков? Я хотел бы использовать как можно меньше дисков, желательно 3 или 4. И каждый диск, входящий в рейд, должен быть загрузочным.
Я выбираю raid10, потому что это самый быстрый избыточный уровень рейда, и он по-прежнему дает мне довольно много места. Рейд 5 или 6 слишком медленный (и может иметь теоретический предел http://www.zdnet.com/blog/storage/why-raid-5-stops-working-in-2009/162 ), а raid1 не дает мне достаточно места и менее гибок. Raid0 вообще не является избыточным.
Я опишу здесь странный, программный 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 на 3-х дисковом raid10. Однако он еще не является полностью избыточным на случай отказа диска, то есть он не сможет волшебным образом загрузиться с другого диска. Для этого вам необходимо сделать точные копии загрузочного раздела на / 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 дисков, порядок не имеет значения. Пока BIOS будет пытаться загрузиться с любого диска, в случае выхода из строя одного из дисков система автоматически загрузится с другого диска, потому что UUID точно такие же.
Есть небольшая загвоздка: не забывайте иногда повторять команду dd, если / boot изменился, скажем, при обновлении ядра. Сделайте это еженедельной работой cron, если хотите.
Это всегда весело, проверьте свою резервную систему, изменив приоритет загрузки BIOS. И если вам повезет, проверьте его, выдернув один диск во время его работы. :-) На самом деле я думаю, что вам нужно сделать это, чтобы быть абсолютно уверенным в том, что он полностью избыточен, иначе зачем еще создавать проблемы. Хотя, тем не менее, это забавное упражнение. Если вы все сделали правильно (а я правильно записал), ваша система все равно будет загружаться, когда уровень рейда ухудшится. Так же, как если бы вы использовали аппаратный рейд. Я тестировал его на различных серверах 1U и 2U с 2, 3, 4 и более дисками.
Это также будет работать с raid1.
Кстати, вы должны использовать загрузочный раздел, который не является частью рейда, потому что в противном случае ваша система не сможет загрузиться. Должен быть способ запуска рейда, и, поскольку это softraid, сначала нужно загрузить ядро, чтобы рейд был распознан.
Поздний ответ, но не могли бы вы сделать то, что я делал в течение некоторого времени?
Я использую установку RAID1 с 2 дисками для большинства своих серверов.
Они настроены так: md0 монтируется как / boot и занимает примерно 250 МБ raid1, а md1 монтируется как / и представляет собой оставшуюся часть емкости диска, за исключением области подкачки на каждом диске.
Таким образом, любые изменения в / boot отражаются соответственно на обоих дисках, даже если во время загрузки ОС будет использовать тот, который ей велел BIOS.
Просто не забудьте повторно запустить grub-install / dev / sd *, чтобы каждый диск содержал действительный / boot. ОС автоматически синхронизирует / загружается друг с другом.