The OpenNET Project / Index page

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

Миграция FC4 на программный RAID-1 (зеркало) (fedora raid disk partition)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: fedora, raid, disk, partition,  (найти похожие документы)
From: Ворона Александр <http://vorona.com.ua/>; Date: Mon, 15 Mar 2007 14:31:37 +0000 (UTC) Subject: Миграция FC4 на программный RAID-1 (зеркало) Оригинал: http://vorona.com.ua/articles/FC4migrateRAID/index.html Имеем FC4 и ядра: самосборное 2.6.13.1(в ядре md и raid1) и родное стоковое 2.6.11-1.1369_FC4(всё есть модулями). Задача - подцепить 2-й винт и завести RAID 1(зеркало). Я использовал более извращённый метод, чем описаный во многих HOWTO и README, зато гораздо более быстрый(однако идеологически неверный, но вполне подходящий для моего случая - домашний полунедонастроенный комп). Существующая разбивка на разделы (Samsung 200G ATA133) hdc1 /boot 100M hdc2 / 1G hdc3 /usr 15G hdc4 extended hdc5 /var 15G hdc6 /var/spool 10G hdc7 /usr/src 15G hdc8 /home 10G hdc9 /tmp 7G hdc10 /usr/data 110G 1. Подключаем новый винт hda и разбиваем его цилиндр в цилиндр с hdc. fdisk -l /dev/hdc или знание размеров разделов вам поможет :) Или вариант попроще sfdisk -d /dev/hdc|sfdisk /dev/hda 2. Грузимся с 1-го CD от федоры в linux rescue либо ещё каким-либо образом грузим линух без использования существующего винта hdc(понадобятся mdadm, resize2fs, fdisk, mount и возможно fsck). Добираемся до шелла. 3. убеждаемся что в текущем ядре есть поддержка raid и уровня raid 1. Это можно легко проверить, посмотрев в файл /proc/mdstat. Если файла нет - у вас нет поддержки raid в ядре (пробуем грузить модуль md). При наличии файла смотрим в строчку Personalitis - там должен быть указан raid1. Если не указан, пробуем каким-либо образом загрузить модуль raid1 4. отмонтируем раздел, если он был примонтирован, и делаем resize2fs /dev/hdc9 (ну или какой там у вас раздел с ненужными данными). Если попросит fsck, чекнем и опять. 5. resize2fs скажет - нечего делать, существующий размер столько-то блоков. 6. опять говорим resize2fs /dev/hdc9, но после раздела указываем , т.е. обрезаем файловую систему(не раздел!) сверху, оставляя место под raid superblock 7. Создаём raid: mdadm -C /dev/md9 -l 1 -n 2 /dev/hdc9 /dev/hda9 Создать устройство /dev/md9, raid level 1, количество дисков 2. Разделы указываем именно в таком порядке - с первого на остальные будет производиться клонирование. Укажете не в том порядке - потеряете данные. mdadm предупредит что на /dev/hdc9 есть ext2 файловая система и запросит подтверждение создания raid. Подтверждаем. 8. смотрим /proc/mdstat - началось клонирование. Вот тут мы и извратились - ушли от копирования с живого раздела в деградированный raid, т.к. копирование за нас сделал драйвер raid1. 9. опять ресайзим, но уже не hdc9 а md9 до размера раздела, который стал немного меньше по сравнению с hdc9 resize2fs /dev/md9 10. меняем типы разделов /dev/hdc9 и /dev/hda9 с Linux(0x82) на Linux RIAD autodetect (0xFD) с помощью команды fdisk'а t и сохраняем изменения командой w. 11. монтируем в удобное место root-раздел для правки fstab mount -t ext3 /dev/hdc2 /mnt/tmp 12. правим /mnt/tmp/etc/fstab - заменяем /dev/hdc9 , соответствующий точке монтирования /tmp, на /dev/md9. Если fstab до этого руками не правили, то вместо /dev/hdc9 может быть что-то вроде LABEL=/tmp 13. посматривая в /proc/mdstat, дожидаемся окончания клонирования. Устройство /dev/md9 готово к использованию вместо /dev/hdc9 14. Проверяем на всяк случай ядра:моё 2.6.13.1 содержит md и raid1, федорное содержит md, а raid1 подгрузит по необходимости(если сможет). 15. грузимся с hdc и проверяем в двух ядрах что /dev/md9 успешно завелся как /tmp. желательно проверить на нём целостность файловой системы и сохранность данных. 16. если с /tmp всё нормально, то повторяем пункты 2 и с 4-го по 12-й для всех разделов кроме рутового /dev/hdc2 и обязательно дожидаемся пока доклонируются все разделы. Ещё один контрольный ребут под 2-мя ядрами. 17. Если всё прошло нормально, то все разделы кроме рутового находятся в raid и загрузочным является только hdc. Сделаем загрузочным и hda grub grub > device (hd0) /dev/hda grub > root (hd0,0) grub > setup (hd0) Замечу что в строчке root указывается раздел /boot считая с нуля. У меня это первый раздел hdc1 и hda1 (grub не понимает software raid, да и не нужно это имхо), поэтому и получаем hd0,0. Если у вас /boot не первый, не забудьте проверить boot flag соответствующего раздела fdisk'ом, и при необходимости установить. 18. Теперь мы должны грузиться как с hdc так и с hda, ну и естественно с ними двумя и по очереди ;) 19. Осталось самое интересное - поместить рутовый раздел в raid. Проделываем уже знакомую и ничем не отличающуюся процедуру п. 2 и пп. 4-12. Монтиируем boot-раздел чтобы поправить параметр ядра root raidstart /dev/md1 mkdir /mnt/tmp mount -t ext3 /dev/md1 /mnt/tmp Правим grub.conf vi /mnt/tmp/grub/grub.conf Устанавливаем параметр root ядра в /dev/md2. Например для стокового ядра получаем строчку kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/md2 Сохраняемся, отмонтируемся и перегружаемся 20. kernel в панике, как самосборное с вкомпиленой поддержкой raid1, так и стоковое. Ну стоковому простительно - raid1 нет, а вот почему самосборное ругается... При загрузке grub нажатием a редактируем root опять в /dev/hdc2 и нажатием b грузимся. Легче уже - загрузились хоть с половинным рейдом для рутового раздела, что наглядно видно из /proc/mdstat. Странно - рейд-таки создался, но загрузиться с него не удалось...После танцев с бубном над initrd поставленной на raid на другом компе этой же федоры оказывается что простой вставки/вкомпиливания модуля raid1 в ядро недостаточно. Нужно ядру сказать некую хитрую строчку raidautorun /dev/mdX для каждого существующего в системе рейд-массива(ну а как минимум для рутового раздела перед "Creating root device"). Благо это за нас сделает mkinitrd(если сделает ;)) 21. Для самосборного ядра с вкомпиленным raid1 mkinitrd --builtin=raid1 --omit-scsi-modules /boot/initrd-2.6.13.1.img 2.6.13.1 для стокового mkinitrd --with=raid1 --omit-scsi-modules /boot/initrd-2.6.11-1.1369_FC4.img 2.6.11-1.1369_FC4 ну и смотрим чтобы не ругался чем-то вроде cannot stat /dev/md2 Затем проверяем: ищем raidautorun в initrd. Если нашли вразумительное - танцы с бубном закончились. Если нет - копайте mkinitrd, чтобы он втулил нужную вашему рутовому разделу строчку в initrd 22. ну и последний ребут. С наслаждением наблюдаем загрузку целиком с raid 1. Как я потом разобрался самосборное ядро с вкомпиленым raid1 просто не успевало запустить /dev/md2, но уже пыталось его примонтировать. Выходит raidautorun фактически просто говорит ядру дождаться создания девайса. 23. Вывод из вышесказанного - если поменяете потом рутовый раздел - не забудьте сказать mkinitrd

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, Michael Shigorin (?), 23:11, 10/04/2007 [ответить]    [к модератору]
  • +/
    http://www.opennet.ru/base/sys/root_soft_raid.txt.html :-)
     
  • 2, Michael Shigorin (?), 17:55, 16/04/2007 [ответить]    [к модератору]
  • +/
    См. тж. п. 10 (convert existing filesystem to RAID 1) из README.recipes от mdadm -- "сперва делаем degraded на втором, потом ФС, потом данные, а потом отмонтируем и добавляем туда первый; дабы не засовывать raid superblock силой и не ресайзить ФС"
     

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




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor