(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Мигрируем с raid1 на raid10 без потери данных в Debian

Источник: habrahabr
Shannon

Есть raid1 из 2 дисков, есть 2 дополнительных диска, нужно добавить эти 2 диска в массив и мигрировать на raid10 без потери данных. Ситуация усложняется тем, что boot расположен не в raid, а находит только на одном из дисков, и для усиления отказоустойчивости сервера загрузчик нужно переместить в raid1.

Все описанные действия проводились на рабочем боевом сервере. Схема универсальная, подойдет для любых других начальных условий. Так же аналогично можно мигрировать с raid10 на raid1.

Имеем:
На диске /dev/sdd1 находится /boot
На массиве /dev/md1 находится /
На массиве /dev/md2 находится swap
Если у вас с загрузчиком вопрос уже решен, можете перейти сразу к разделу с миграцией.

Переносим загрузчик


На диске /dev/sdd есть данные и есть загрузчик, поэтому его будем считать эталоном, все остальные диски можно считать пустыми. Для надежности, загрузчик мы не будем размещать на raid10, а оставим на raid1 из 2х дисков (можно и на 3х и на 4х), для большей отказоустойчивости.

Создаем на диске sdb разделы один в один как на sdd. Либо вручную, например, с помощью
fdisk /dev/sdb
Либо просто дублируем разделы
sfdisk -d /dev/sdd --force / sfdisk /dev/sdb --force
Сам загрузчик находится на /dev/sdd1, поэтому деградированный raid1 /dev/md4 создадим следующим образом
mdadm --create /dev/md4 --level=1 --raid-disks=2 missing /dev/sdb1 mke2fs -j /dev/md4
После создания любого нового массива, нужно обновить информацию о всех raid, иначе после перезагрузки все развалится
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Теперь перезагрузим сервер, и после перезагрузки увидим странный массив /dev/md127 от которого нужно избавиться, и наш /dev/md4, который может не появиться, т.к. вместо него /dev/md127. Решить эту проблему достаточно просто, достаточно остановить эти 2 массива и добавить заново /dev/md4
mdadm -S /dev/md127 mdadm -S /dev/md4 mdadm --examine --scan >> /etc/mdadm/mdadm.conf mdadm --assemble /dev/md4
Для надежности стоит еще раз перезагрузиться и после этого мы подходим к самой ответственной части, нужно отредактировать загрузчик GRUB2 так, чтобы он грузил сервер с созданного массива. Для этого нужно узнать UUID старого диска с загрузчиком /dev/sdd1 и нового массива /dev/md4
root@server:~# ls -l /dev/disk/by-uuid total 0 lrwxrwxrwx 1 root root 9 Nov 9 20:56 4d7faa7f-25b3-4a14-b644-682ffd52943b -> ../../sdd1 lrwxrwxrwx 1 root root 9 Nov 9 20:56 29683c02-5bd7-4805-8608-5815ba578b6c -> ../../md4
Отредактируем /boot/grub/grub.cfg. Везде, где встречается старый UUID - 4d7faa7f-25b3-4a14-b644-682ffd52943b заменяем на наш новый UUID - 29683c02-5bd7-4805-8608-5815ba578b6c, по сути это будет в каждой секции search.
Везде, где есть set root, тоже нужно сделать замену. Например, было так
set root='(hd0)'
А будем вот так
set root='(md/4)'

Пример получившегося нового конфига

insmod raid
insmod mdraid
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod ext2
set root='(md/4)'
search --no-floppy --fs-uuid --set 59f76eb9-00d2-479e-b94e-6eb54fc574d4
set locale_dir=($root)/grub/locale

А секция ### BEGIN /etc/grub.d/10_linux ### будет выглядеть так

menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
insmod raid
insmod mdraid
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod ext2
set root='(md/4)'
search --no-floppy --fs-uuid --set 59f76eb9-00d2-479e-b94e-6eb54fc574d4
echo 'Loading Linux 2.6.32-5-amd64 ...'
linux /vmlinuz-2.6.32-5-amd64 root=/dev/md1 ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-5-amd64
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {


Очень важно, чтобы теперь вы не перезагружались, поэтому что изменив этот файл, загрузчик уже будет думать, что информация для загрузки находится на /dev/md4, а там пока еще ничего нет. Чтобы оставить себе лазейку, не редактируйте секцию recovery mode, так вы сможете загрузиться со старыми данными, правда для этого вам понадобится доступ через KVM-IP или чтобы сотрудник ДЦ выбрал при загрузке recovery mode.

Теперь необходимо обновить ram-диск, иначе система просто не загрузится
update-initramfs -u
После того, как мы внесли изменения в загрузчик, можно переносить содержимое /boot на созданный массив /dev/md4
mkdir /mnt/md4 mount /dev/md4 /mnt/md4 rsync -avHxl --progress --inplace --exclude 'lost+found' /boot/ /mnt/md4/ umount /mnt/md4/
Мы должны убедиться, что загрузчик GRUB2 установлен на 2х жестких дисках (или 4х, смотря сколько вы захотели добавить в массив), а так же на массиве /dev/md4. Самый надежный способ это сделать, выполнить
dpkg-reconfigure grub-pc
где нужно выбрать все диски, на которые нужно добавить загрузчик.

Кроме загрузчика, и сама система должна правильно понять, что загрузчик теперь в другом месте, для этого достаточно отредактировать файлы /etc/fstab и /etc/mtab. Нас интересует строка, где монтируется /boot. UUID нам не понадобится, вместо него указываем название нашего raid-массива.
В файле /etc/fstab
#UUID=7092eb46-9ee8-4a32-b9a7-5d759cc74af0 /boot ext3 defaults 0 2 /dev/md4 /boot ext3 defaults 0 2
В файле /etc/mtab
#/dev/sdd1 /boot ext3 rw 0 0 /dev/md4 /boot ext3 rw 0 0
Теперь можно перезагружаться, и если вы все сделали правильно, система загрузится с /dev/md4, а /dev/sdd1 уже не используется. Осталось только дособрать наш деградированный массив
mdadm /dev/md4 --add /dev/sdd1

Мигрируем с raid1 на raid10 без потери данных


Ситуация все та же, есть raid1 массив из 2х дисков и 2 свободных диска, нужно собрать это все в raid10 и чтобы данные были целы.
Для новых дисков нужно создать структуру разделов идентичную тем, что уже в raid
sfdisk -d /dev/sdd --force / sfdisk /dev/sda --force sfdisk -d /dev/sdd --force / sfdisk /dev/sdb --force
На /dev/md4 находится /boot
На /dev/md1 находится /
На /dev/md2 находится swap

/boot мы не будем трогать, оставим его как raid1, данные сохранить нужно только на /dev/md1 (массив состоит из /dev/sda6, /dev/sdb6, /dev/sdc6, /dev/sdd6).

Чтобы сохранить данные, мы соберем деградированный raid10 массив из 3 дисков, и перенесем туда данные с raid1, после этого разберем raid1 и доделаем raid10.

Для начала вытащим 1 диск из raid1, т.к. нам нужно минимум 3 диска для создания raid10
mdadm /dev/md1 --fail /dev/sdc6 --remove /dev/sdc6
Собираем деградированный RAID10 как /dev/md3 и монтируем его. Обязательно добавим запись о новом массиве, чтобы после перезагрузки он оставался
mdadm --create /dev/md3 --level=10 --raid-devices=4 /dev/sda6 /dev/sdb6 /dev/sdc6 missing mke2fs -j /dev/md3 mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Если случайно перезагрузились до того, как записали данные о массивах, то выполните
mdadm --examine --scan >> /etc/mdadm/mdadm.conf mdadm --assemble /dev/md3
Переносим данные с /dev/md1 на /dev/md3
mkdir /mnt/md3 mount -t ext3 /dev/md3 /mnt/md3 rsync -avHxl --progress --inplace --exclude 'lost+found' / /mnt/md3/ umount /mnt/md3
Всё, данные сохранены на raid10 и миграция почти завершена. Теперь нужно указать системе, чтобы она использовала новый /dev/md3, вместо старого /dev/md1. Для этого надо отредактировать файлы /etc/fstab и /etc/mtab.
В файле /etc/fstab нужно сделать замену UUID /dev/md1 на UUID /dev/md3
ls -l /dev/disk/by-uuid lrwxrwxrwx 1 root root 9 Nov 9 20:56 29683c02-5bd7-4805-8608-5815ba578b6c -> ../../md3
Получаем следующее
#UUID=4d7faa7f-25b3-4a14-b644-682ffd52943b / ext3 errors=remount-ro 0 1 UUID=29683c02-5bd7-4805-8608-5815ba578b6c / ext3 errors=remount-ro 0 1
В файле /etc/mtab нужно просто заменить везде вместо /dev/md1 новый /dev/md3
/dev/md3 / ext3 rw,errors=remount-ro 0 0
Когда меняется устройство для /boot или / нужно обязательно редактировать конфигурацию загрузчика /boot/grub/grub.cfg и выполнять update-initramfs, иначе грузится не будет.

В файле /boot/grub/grub.cfg везде, где встречается 4d7faa7f-25b3-4a14-b644-682ffd52943b (старый UUID у /dev/md1) заменяем на наш новый UUID - 29683c02-5bd7-4805-8608-5815ba578b6c, по сути это важно для секций search.
А внутри секции
### BEGIN /etc/grub.d/10_linux ###
заменим root=/dev/md1 на root=/dev/md3

И после этого обязательно выполнить
update-initramfs -u
Нужно перезагрузиться, чтобы корень / стал новым массивом /dev/md3 и обращений к старом raid1 уже не было. Закончить создание raid10 нужно добавлением того диска, который сейчас в raid1 (/dev/sdd6). Но для начала нужно его остановить и очистить раздел
mdadm -S /dev/md1 mdadm --zero-superblock /dev/sdd6
И только теперь добавить диск в массив raid10 и обновить данные о массивах
mdadm /dev/md3 --add /dev/sdd6 mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Вот и все, миграция с raid1 на raid10 без потери данных завершена.

P.S. В итоге я вернулся обратно на raid1, т.к. в моем случае, сам переход с raid1 на raid10 не дал каких-либо внушительных результатов, намного лучше себя показал raid1 из 4х дисков.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Дискуссии и обсуждения общего плана »
Написать редактору 
 Рекомендовать » Дата публикации: 14.02.2014 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
The BAT! Home- 1 компьютер
ABBYY Lingvo x6 Многоязычная Профессиональная версия, электронный ключ
ESET NOD32 SMALL Business Pack newsale for 3 user
SAP CRYSTAL Server 2013 WIN INTL 5 CAL License
ESET NOD32 Parental Control – универсальная лицензия на 1 год для всей семьи
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Реестр Windows. Секреты работы на компьютере
Один день системного администратора
Краткие описания программ и ссылки на них
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Как выводить деньги в лучших казино? (6)
Порой игрок казино из рейтинга 2021 https://casino2021.net/ все сделал точно, заявка на вывод...
 
Отличается ли ДрифтКазино от беттинга? (31)
Друзья, давно заметил, что на Дрифте уже несколько месяцев во всю рекламируется и предлагается...
 
Помощь по MS Access (341)
Доброе время суток. Случайно оказался на этом сайте, искал статьи по OLAP. Вижу, что...
 
Актуальное зеркало БК Марафон на сегодня (1)
На основном сайте БК Марафон https://rabochee-zerkalo-marafon.ru/ зеркало доступно прямо в...
 
Рабочее зеркало Марафонбет (1)
Копии зеркал МарафонБет публикуют на официальных страничках в социальных сетях или на сайте...
 
 
 



    
rambler's top100 Rambler's Top100