Миграция на новый жесткий диск с RAID1

Исходные данные: Linux-server Debian Squeezy, Intel CoreQuad, Ultra24. SATA-HD 250Gb.
Цель — 2SATA-HD 2Tb в RAID1 массиве без переустановки системы.

Инструкцию собирал по частям.

Первый этап — перенос системы на жесткий диск 2Tb
В кратком виде алгоритм будет таким:
1. Создать разделы у «пациента», как Вы хотите.
2. Скопировать файлы из разделов «донора» в разделы «пациента».
3. Установить загрузчик (grub)

Шаг1
Разделы можно создавать чем угодно — gparted, fdisk, cfdisk.
Родные разделы были такие
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 60G 12G 48G 20% /
udev 10M 216K 9,8M 3% /dev
tmpfs 795M 268K 794M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 1,6G 0 1,6G 0% /run/shm
/dev/sda5 180G 92G 88G 50% /home

Создавал разделы с помощью fdisk. Пока задействовал только один 2Tb HD — определился как /dev/sdb
~# fdisk /dev/sdb
Справка по командам — m

a) создаём таблицу разделов
b)создаём разделы sdb1 — primary fs — 83 — boot, sdb2 — extended fs 5, sdb5 — logical fs — 83
c) записываем изменения на диск — w

Форматируем разделы

~# mkfs.ext3 /dev/sdb1
~# mkfs.ext3 /dev/sdb5

Шаг2
Копируем разделы.
Для копирования создаём две директории /mnt/root и /mnt/home и монтируем туда новые разделы

~# mkdir /mnt/root
~# mkdir /mnt/home
~# mount /dev/sdb1 /mnt/root
~# mount /dev/sdb5 /mnt/home

Теперь копируем туда содержимое донора. Для раздела / создаём файл с исключениями

~# cat /home/exclude_list
/etc/fstab
/mnt
/media
/tmp
/home

А теперь копируем файлы с пом. команды:
rsync -xrlptgoEv —progress —exclude-from=/путь/до/exclude_list /путь/откуда/копируем/ /путь/куда/копируем/
Аналогично выполняем вышеприведённую команду для всех смонтированных разделов. Только обязательно в конце «/путь/откуда/копируем/» указывайте слеш.

~# rsync -xrlptgoEv --progress --exclude-from=/home/exclude_list / /mnt/root
~# rsync -xrlptgoEv --progress /home/ /mnt/home

Правим fstab на диске-пациенте, указываем новый UUID

/mnt/root/etc/fstab

Досоздаём директории на диске пациенте (их там пока нет)

~# mkdir /mnt/root/home
~# mkdir /mnt/root/mnt

Устанавливаем GRUB на новый жесткий диск

~#grub-install /dev/sdb

Перезагружаемся с нового диска — GRUB выпадет в rescue mode

В Grub Rescue Mode доступно очень немного команд. И поэтому восстановление происходит следующим образом: сначала нужно всеми силами попытаться подгрузить все модули, чтобы стала доступна вся функциональность Grub, а затем уже запуститься с нужного раздела будет легко.

Как известно, Grub состоит из двух частей.

Первая часть записана в MBR диска. Она и содержит базовую функциональность, то есть в ней есть консоль в rescue mode и ничего больше. В rescue mode нет даже команд загрузки системы с нужного раздела. Поэтому-то и нужно вначале определить, на каком разделе находится вторая часть груба (она лежит в каталоге /boot/grub), подгрузить недостающие модули. И только потом можно будет дать команду запуска с нужного раздела.

В rescue mode доступно всего четыре команды:

ls
set
unset
insmod

Вначале следует дать команду:
ls

В ответ она выведет, например, следующее:
(hd0) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1)

По непонятным причинам, в данном примере Grub даже не понимает, какие файловые системы находятся на разделах дисков, и почему-то их считает как msdos.

Нам нужно постараться угадать, какие диски мы видим. В данном случае видно два диска. Диск с индексом 0 содержит три раздела, диск с индексом 1 содержит два раздела. Я знаю, что мой линукс, который мне нужно загрузить, находится на диске с тремя разделами. Поэтому делаю вывод, что мне нужен hd0.

По непонятным причинам Grub называет разделы в обратном порядке. И становится непонятно, что имеется в виду под (hd0,msdos3) — первый раздел или третий? Тут можно выкрутиться, использовав синтаксис (hd0,1). Нужно помнить, что в Grub счет дисков начинается с 0, а счет разделов — с 1.

Так как я знаю, что Linux в моем случае установлен на первый раздел, то нужный мне раздел будет обозначаться (hd0,1). Выяснив обозначение радела, нужно дать команды:

set prefix=(hd0,1)/boot/grub
set root=(hd0,1)

Этими командами мы указываем использовать диск (hd0,1) для дальнейших команд. После чего нужно проверить, действительно ли на этом разделе есть то что нам нужно. Даем команду:

ls /boot/grub

… и если в ответ получаем список всех файлов в этой директории, то считам, что дальше все пойдет как по маслу.

Даем команды:

insmod ext2
insmod normal
normal

После чего Grub перейдёт в полнофункциональный режим. Он автоматически найдет все операционки, которые можно подгружать, и покажет своё Grub-меню.

После загрузки обновляем конфиг GRUB

# update-grub

Следующий этап — массив RAID1
Новые исходные данные

Имеем два жестких диска /dev/sda и /dev/sdb, одинакового размера. Диск /dev/sdb — новый, подключенный в систему. Диск /dev/sda имеет слкдующие разделы:

/dev/sda1 — раздел / , ext3
/dev/sda2 — extended — его не трогаем
/dev/sda5 — раздел /home, ext3

Задача — получить RAID1-массив следующего вида:

/dev/md0 (состоящий из /dev/sda1 и /dev/sdb1) — раздел /, ext3
/dev/md2 (состоящий из /dev/sda5 и /dev/sdb5) — раздел /home, ext4

Установка утилиты mdadm

Для настройки и управления программным RAID-ом в Linux используется утилита mdadm. Установим ее:

#apt-get install initramfs-tools mdadm

MD arrays needed for the root file system: all

Загрузим необходимые модули ядра:

#modprobe linear
#modprobe multipath
#modprobe raid0
#modprobe raid1
#modprobe raid5
#modprobe raid6
#modprobe raid10

Модули raid0,raid5,raid6,raid10 — опционально, нам нужет raid1.
Для того чтобы удостовериться, что все необходимые модули и компоненты установлены, выполним следующую команду:

#cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices:
#

Если Вы видите что-то подобное, значит все хорошо.

Подготовка /dev/sdb

Оба диска в массиве должны иметь абсолютно одинаковое разбиение. В зависимости от используемого типа таблицы разделов (MBR или GPT) необходимо использовать соответствующие утилиты для копирования таблицы разделов.

Жесткий диск с таблицей разделов MBR

Для жесткого диска с MBR используем утилиту sfdisk:

#sfdisk -d /dev/sda | sfdisk --force /dev/sdb
hecking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/sdb1 * 2048 999423 997376 83 Linux
/dev/sdb2 999424 1998847 999424 5 Extended
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
/dev/sdb5 999424 1998847 999424 83 Linux

Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
#

где /dev/sda — диск источник, /dev/sdb — диск назначения.

Удостоверимся, что все верно:

#fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b0ecb

Device Boot Start End Blocks Id System
/dev/sda1 * 1 63 498688 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 63 125 499712 5 Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5 125 653 4242432 83 Linux
Partition 5 does not end on cylinder boundary.

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 63 498688 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2 63 125 499712 5 Extended
Partition 2 does not end on cylinder boundary.
/dev/sdb5 125 653 4242432 83 Linux
Partition 5 does not end on cylinder boundary.
#

На следующем шаге изменим тип трех разделов жесткого диска /dev/sdb на Linux raid autodetect:

#fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): t
Partition number (1-5): 1
Hex code (type L to list codes): L

0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
#

Очищаем суперблоки RAID на разделах /dev/sdb, в случае если этот диск уже использовался в RAID-массивах:

#mdadm --zero-superblock /dev/sdb1
#mdadm --zero-superblock /dev/sdb5

Если жесткий диск новый, будет выдано следующее сообщение:

# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
#

В противном случае- никаких сообщений не будет.

Создание RAID-массивов

Создадим два RAID-массива: /dev/md0, /dev/md1. Раздел /dev/sdb1 будет входить в /dev/md0, /dev/sdb5 в /dev/md1. Разделы жесткого диска /dev/sda, на данном этапе, в RAID-массивы включены быть не могут, так как они используются системой. Используем опцию missing при создании массивов:

#mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
#mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5

На вопрос о создании массивов отвечаем утвердительно:

# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
#

Используя команду cat /proc/mdstat, просмотрим информацию о массивах:

#cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md1 : active raid1 sdb5[1]
499700 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1]
498676 blocks super 1.2 [2/1] [_U]

unused devices:
#

[_U] — означает, что массив рассинхронизирован, т.к. отсутствует первый раздел массива (разделы диска /dev/sda). В рабочем, синхронизированном состоянии, квадратные кавычки выглядят так — [UU].

Создадим файловые системы на только что созданных составных дисках /dev/md0 (/), /dev/md1 (/home):

#mkfs.ext3 /dev/md0
#mkfs.ext3 /dev/md1

Запишем информацию о созданных массивах в конфигурационный файл mdadm.conf, предварительно сделав резервную копию:

#cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
#mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Конфигурационный файл примет следующий вид:

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Tue, 24 May 2011 14:09:09 +0200
# by mkconf 3.1.4-1+8efb9d1
ARRAY /dev/md/0 metadata=1.2 UUID=b40c3165:17089af7:5d5ee79b:8783491b name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=62e4a606:878092a0:212209c5:c91b8fef name=server1.example.com:1

Подготовка системы для работы с RAID-массивами

Подмонтируем /dev/md0 и /dev/md1 в нашу систему :

#mkdir /mnt/md0
#mkdir /mnt/md1
#mount /dev/md0 /mnt/md0
#mount /dev/md1 /mnt/md1
#mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda5 on /home type ext3 (rw)
/dev/md0 on /mnt/md0 type ext4 (rw)
/dev/md1 on /mnt/md1 type ext4 (rw)
#

Отредактируем файл /etc/fstab — закомментируем строки, относящиеся к /dev/sda и добавим информацию о массивах:

#vi /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc defaults 0 0
# / was on /dev/sda1 during installation
#UUID=e4e38871-0115-477d-94f9-34b079d26248 / ext3 errors=remount-ro 0 1
/dev/md0 / ext3 errors=remount-ro 0 1
# /home was on /dev/sda1 during installation
#UUID=7e2fb013-073e-4312-a669-f34b35069bfb /boot ext3 defaults 0 2
/dev/md1 /home ext3 defaults 0 2
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0

Подправим файл /etc/mtab подобным образом:

#vi /etc/mtab

/dev/md0 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md1 /home ext3 rw 0 0
/dev/md0 /mnt/md0 ext3 rw 0 0
/dev/md1 /mnt/md1 ext3 rw 0 0

Пришла очередь настройки загрузчика GRUB2:

#cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
#vim /etc/grub.d/09_swraid1_setup

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
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 ext2
set root='(md/0)'
echo 'Loading Linux 2.6.32-5-amd64 ...'
linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/md2 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-amd64
}

Обратите внимание на версию ядра в строках linux и initrd. Если ваша версия ядра отличается — измените их. Проверить версию ядра можно командой:

#uname -r

Строка «set root = ‘md/0′» передает загрузчику информацию о том, что загрузка должна осуществляться с массива /dev/md0 (раздел /boot). Теперь у загрузчика нет привязки ни к одному из жестких дисков, установленных в системе. В случае выхода из строя одного из них, система сможет загрузиться.

Так как мы изменили файл /etc/fstab на использование обычных названий устройств вместо их UUID, сообщим об этом загрузчику:

#vi /etc/default/grub

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Обновим загрузчик:

#update-grub

Подготовим ramdisk:

#update-initramfs -u

Пришло время перенести систему с диска /dev/sda на составные устройства /dev/mdx. То есть содержимое раздела /dev/sda1 на /dev/md0, а /dev/sda5 на /dev/md1. Напомню, что массивы /dev/md0 и /dev/md1 у нас подмонтированы в /mnt/md0 и /mnt/md1 соответственно.
Воспользуемся опять rsync:
Для раздела / создаём файл с исключениями

~# cat /exclude_home
/home

~# rsync -xrlptgoEv --progress --exclude-from=/exclude_home/ /mnt/md0
~# rsync -xrlptgoEv --progress /home/ /mnt/md1

Настройка загрузчика GRUB2 (часть 1)

Установим загрузчик на оба жестких диска:

#grub-install /dev/sda
#grub-install /dev/sdb

Проверяем, что загрузка с /dev/md0 возможна:

#shutdown -r now

Подготовка диска /dev/sda

После загрузки системы проверяем все ли загрузилось и работает:

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 4.0G 714M 3.1G 19% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 132K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/dev/md1 472M 25M 423M 6% /home

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4241396 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1]
498676 blocks super 1.2 [2/1] [_U]

unused devices:
#

Если видим нечто похожее — все нормально.

Жесткий диск /dev/sda с MBR

Изменим тип разделов диска /dev/sda на Linux raid autodetect:

#fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-4): 5
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
#

Добавляем разделы /dev/sda в RAID-массивы:

#mdadm --add /dev/md0 /dev/sda1
#mdadm --add /dev/md1 /dev/sda2
#mdadm --add /dev/md2 /dev/sda3

Проверяем, что массивы синхронизируются:

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[1]
4241396 blocks super 1.2 [2/1] [_U]
[==========>..........] recovery = 54.6% (2319808/4241396) finish=0.7min speed=45058K/sec

md0 : active raid1 sda1[2] sdb1[1]
498676 blocks super 1.2 [2/2] [UU]

unused devices:
#

Наблюдать за просессом синхронизации можно командой

#watch cat /proc/mdstat
Для управления скоростью ребилда рейда есть два параметра:

cat /proc/sys/dev/raid/speed_limit_min
1000
cat /proc/sys/dev/raid/speed_limit_max
200000

То, что скорость фактически урезана на уровне 1 мегабайта секунду вполне оправданно на случай, если на сервере продолжает работать какой-либо софт. Но если все сервисы приостановлены на время ребилда, можно спокойно увеличить эту скорость мегабайт так до 50 в секунду посредством команды:

echo 50000 > /proc/sys/dev/raid/speed_limit_min

По окончанию процесса синхронизации увидим следующее:

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[1]
4241396 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda1[2] sdb1[1]
498676 blocks super 1.2 [2/2] [UU]

unused devices:
#

Осталось совсем немного. Подправим файл /etc/mdadm/mdadm.conf, восстановив его предварительно из резервной копии:

#cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
#mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Его содержимое станет приблизительно таким:

# automatically tag new arrays as belonging to the local system
HOMEHOST

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Tue, 24 May 2011 14:09:09 +0200
# by mkconf 3.1.4-1+8efb9d1
ARRAY /dev/md/0 metadata=1.2 UUID=b40c3165:17089af7:5d5ee79b:8783491b name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=62e4a606:878092a0:212209c5:c91b8fef name=server1.example.com:1

Настройка загрузчика GRUB2 (часть 2)

Удалим файл /etc/grub.d/09_swraid1_setup:

#rm -f /etc/grub.d/09_swraid1_setup

И обновим конфигурацию загрузчика:

#update-grub
#update-initramfs -u

Если посмотреть на секцию ### BEGIN /etc/grub.d/10_linux ### файла /boot/grub/grub.cfg, увидим те же данные, что были в /etc/grub.d/09_swraid1_setup.

Обновим загрузчик на обоих жестких дисках:

#grub-install /dev/sda
#grub-install /dev/sdb

При обновлении GRUB возникнуть проблема

~# update-grub
Generating grub.cfg ...
/usr/sbin/grub-probe: error: no such disk.
~# update-grub
Generating grub.cfg ...
/usr/sbin/grub-probe: error: no such disk.
~#

Решение:

# cd /boot/brub
/boot/grub# rm -rf device.map
/boot/grub# cd

~# grub-install --recheck /dev/sda
Installation finished. No error reported.
~# grub-install --recheck /dev/sdb
Installation finished. No error reported.
~# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.26-2-686
Found initrd image: /boot/initrd.img-2.6.26-2-686
done
~#

Перезагрузим систему:

#shutdown -r now

Вот собственно и все.

Материалы:
http://habrahabr.ru/post/102849/
http://mydebianblog.blogspot.ru/2012/05/grub2-linux.html
http://mydebianblog.blogspot.ru/2010/11/linux.html
http://stackoverflow.com/questions/2193584/copy-folder-recursively-excluding-some-folders
http://www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-system-incl-grub2-configuration-debian-squeeze
http://www.linuxexpert.ro/Troubleshooting/grub-error-no-such-disk.html
http://mydebianblog.blogspot.ru/2010/05/swap-swap-linux.html

Запись опубликована в рубрике How to, linux с метками , . Добавьте в закладки постоянную ссылку.