Содержание:
Источники
Введение
1. О системе
2. Просмотр дисков
3. Установка пакетов
4. Подготовка второго диска /dev/sdb
5. Создание RAID-массива
6. Подготовка и перенос данных
7. Настройка Grub (часть 1)
8. Подготовка первого диска /dev/sda
9. Настройка Grub (часть 2)
10. Тестирование и решение возможных проблем
11. Восстонавление(копирование) данных новый винчестер, в случае выходно из строя одного из двух работающех дисков массива. [пункт в процессе написания]
Источники:
Руководство Falko Timme и его перевод Андрей Синицын aka boombick .
11. Восстонавление(копирование) данных новый винчестер, в случае выходно из строя одного из двух работающех дисков массива. [пункт в процессе написания]
Источники:
Руководство Falko Timme и его перевод Андрей Синицын aka boombick .
Введение
Целью данной статьи являеться практический разбор руководства Falko Timme. Я хотел показать читателю что комманды в руковдсте всё ещё актуальны на 12 декобря 2010 года. Главным отличием являеться разница в разбиение дисков. В отличии от руководства Falko Timme, мы будем строить массиы не только на первычных(Primary) разделах, но также и на логических(Logical) разделах. Также будем использовать файловаю систему reiserfs для разделов /tmp и /var/log.
В конце статьи в разделе "Тестирование" я привел решение проблемы, когда после аварийного выключания питания при загрузке не все массивы строяться верно, т.е. некоторые массивы строяться из одного диска, вместо как положенно двух.
Итак, мы имеем два SATA-диска одного объема, одинаковой модели и из одной партии. Диск sda уже стоиn на машине и работает. Выключаем компьютер и устонавливаем второй винчестер(sdb).
Итак, мы имеем два SATA-диска одного объема, одинаковой модели и из одной партии. Диск sda уже стоиn на машине и работает. Выключаем компьютер и устонавливаем второй винчестер(sdb).
1. О системе
Настройка и испытания проводились 12.12.2010 на тестовой площадке:
Материнская плата: ASRock, ALiveNF4G-DVI
Процессор: AMD Sempron(tm) Processor 2800+
Память: TakeMS, DDR2 1024 2шт.
Винчестеры: SAMSUNG, SATA HD080HJ 2шт. (из одной партии, серийные номера отличаются на несколько цифр)
Была установленна свежая система из дестрибутива Debian GNU/Linux 5.0.7, из стабильной на тот момент ветки lenny. Ядро 2.6.26-2-686.
Система Debian 5 stable/lenny:
|
2. Просмотр дисков
Просмотрем состояние наших дисков:
leopard:~# df -h
leopard:~# fdisk -l
leopard:~# cat /etc/mtab
3. Установка пакетов
Установим initramfs-tools для работы с образом ядра (у меня уже был установлен этот пакет):
leopard:~# apt-get install initramfs-tools
Установим пакет mdadm для настройки программного RAID-1. В процессе установки выбираем "all" и жмём OK.
|
Далее подгрузим модули:
leopard:~# modprobe md
leopard:~# modprobe linear
leopard:~# modprobe multipath
leopard:~# modprobe raid0
leopard:~# modprobe raid1
leopard:~# modprobe raid5
leopard:~# modprobe raid6
leopard:~# modprobe raid10
leopard:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices:
4. Подготовка второго диска /dev/sdb
Оба диска должни иметь одинаковыю таблицу разделов. Для этого скопируем таблицу разделов с диска sda на диск sdb:
leopard:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
Проверим что имеем одинаковые таблицы разделов на обоих дисках:
leopard:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
На втором диске sdb изменяем тип разделов на Linux raid auto (код fd). Для этого указываем ключи t-type, цифры 1-7 номера разделов, L-list of types, fd-код, w-wright partitions changes.
Красным цветом подсвеченны варианты ответов.
leopard:~# fdisk /dev/sdb
The number of cylinders for this disk is set to 9729.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): t
Partition number (1-7): 1
Hex code (type L to list codes): L
0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 3
Hex code (type L to list codes): fd
Changed system type of partition 3 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 4
Hex code (type L to list codes): fd
You cannot change a partition into an extended one or vice versa
Delete it first.
Command (m for help): t
Partition number (1-7): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 6
Hex code (type L to list codes): fd
Changed system type of partition 6 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-7): 7
Hex code (type L to list codes): fd
Changed system type of partition 7 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. |
Обратите внимание на ошибку при попытке изменить тип раздела 4. Это произошло т.к. раздел 4 расширенный. В расширеном (Extanded) нельзя менять тип файловой системы, поэтому программа fdisk пропустиа этот раздел.
Что бы удостовериться что на диске sdb не было никаких ранее установленных RAID-массивов
выполним команду mdadm --zero-superblock /dev/sdb1:
leopard:~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
Строка выше говорит о том что на этом диске на было ранее RAID-массивов. Проделать эту операцию для каждого раздела (от 1-7 в моём случае, раздел 4 можно пропустить так как он расширенный)
5. Создание RAID-массива
Будем создавать массивы от /dev/md0 до /dev/md6. Нумерация начинается с цифры 0.
Раздел /dev/sdb1 добавим в массив /dev/md0, /dev/sdb2 --> /dev/md1 и так далее, расширенный раздел (4) пропускаем,либо можем попробовать, но mdadm выдаст ошибку. Разделы на первом диске мы пока не трогаем, т.к. с него загружена система. Поэтому при создании массива на месте первого диска sda мы будем использовать указатель missing.
Схема:
/dev/md0 -> /dev/sdb1 /boot Primary ext3
/dev/md1 -> /dev/sdb2 swap Primary swap
/dev/md2 -> /dev/sdb3 / Primary ext3
пропускаем /dev/sdb4 Extendet
/dev/md3 -> /dev/sdb5 /var Logical ext3
/dev/md4 -> /dev/sdb6 /var/log Logical reiserfs
/dev/md5 -> /dev/sdb7 /tmp Logical reiserfs
Создаём массивы:
|
Проверяем состояние массива. Мы видим что у нас 6 поврежденных массивов. Символы [_U] говорят о том что первое устройство повреждено. Когда массив исправен то символ [UU].
|
http://realtechtalk.com/mdadm_autoreadonly_Linux_Software_RAID_solution-1010-articles
Создаём файловые системы на массивах:
Корневая файловая система /, также используем ext3:
Смонтируем наши массивы, все кроме swap, предворительно создав точки монтирования:
leopard:~# mkdir /mnt/md0
leopard:~# mkdir /mnt/md2
leopard:~# mkdir /mnt/md3
leopard:~# mkdir /mnt/md4
leopard:~# mkdir /mnt/md5
leopard:~# mount /dev/md0 /mnt/md0
leopard:~# mount /dev/md2 /mnt/md2
leopard:~# mount /dev/md3 /mnt/md3
Файлы должны быть приведены к следующему виду, красным выделены изменения:
В конце этого файла расположены блоки, описывающие параметры ядер для загрузки. Скопируйте первый блок, замените в копии root=/dev/sda3 на root=/dev/md2 и root (hd0,0) на root (hd1,0), после чего поставьте полученный блок первым в списке.
В первом блоке в строке title в конце строки допишите RAID (hd1).
После редактирования файл должен выглядеть примерно так:
leopard:~# cd /var
leopard:~# cd /var/log
7. Настройка Grub (часть 1)
Перезагружаем систему:
leopard:~# reboot
Теперь система должна загрузиться с нашего RAID-массива. При перезагрузки в меню grub будут предложенны три варианта загрузки. Выбираем 1-ый, с массива md2, т.е. со второго винчестера, что нам и нужно. Остальные нам не интересны 2-ой с диска sda, и 3-ий с диска sda в singl mode.
Теперь необходимо поменять тип разделов на диске /dev/sda на Linux raid autodetect таким же образом, как мы это делали ранее с диском /dev/sdb:
Теперь добавим /dev/sda1, /dev/sda2 ... и /dev/sda7 в RAID-массив:
Коммандой watch cat /proc/mdstat можно смотреть в реальном времени. Обязательно дождитесь завершения процесса синхронизации.
После синхронизации файл /proc/mdstat будет выгледить следующим образом:
Почти всё готово. Теперь отредактируем /boot/grub/menu.lst. На данный момент Grub настроен на загрузку с /dev/sdb (hd1,0). Конечно же, мы все еще хотим, чтобы система грузилась, если /dev/sdb содержит какие-то ошибки. Создадаим копию первого блока с описанием параметров загрузки (в котором описан hd1), вставим ее ниже и заменим в этом блоке hd1 на hd0. Остальные блоки закомментируем. Теперь конфиг загрузчика должен выглядеть примерно так:
Создаём файловые системы на массивах:
/dev/md0 ext3 /boot
/dev/md1 swap подкачка
/dev/md2 ext3 /
/dev/md3 ext3 /var
/dev/md4 reiserfs /var/log
/dev/md5 reiserfs /tmp
Для раздела /boot используем ext3:
|
Подкачка swap:
|
Корневая файловая система /, также используем ext3:
|
Раздел /var, используем ext3:
|
Раздел /var/log используем reiserfs:
|
Раздел /tmp используем reiserfs:
|
Теперь отредактируем конфигурационный файл /etc/mdadm/mdadm.conf, предварительно его сохранив. Внизу в строках указанна информация о наших массивах.
|
6. Подготовка и перенос данных
Смонтируем наши массивы, все кроме swap, предворительно создав точки монтирования:
leopard:~# mkdir /mnt/md0
leopard:~# mkdir /mnt/md2
leopard:~# mkdir /mnt/md3
leopard:~# mkdir /mnt/md4
leopard:~# mkdir /mnt/md5
leopard:~# mount /dev/md0 /mnt/md0
leopard:~# mount /dev/md2 /mnt/md2
leopard:~# mount /dev/md3 /mnt/md3
leopard:~# mount /dev/md4 /mnt/md4
leopard:~# mount /dev/md5 /mnt/md5
Проверим:
|
Теперь необходимо отредактировать файлы /etc/fstab и /etc/mtab заменив в них /dev/sda1 на /dev/md0 по схеме:
/dev/md0 -> /dev/sda1 /boot
/dev/md1 -> /dev/sda2 подкачка
/dev/md2 -> /dev/sda3 /
/dev/md3 -> /dev/sda5 /var
/dev/md4 -> /dev/sda6 /var/log
/dev/md5 -> /dev/sda7 /tmp
Файлы должны быть приведены к следующему виду, красным выделены изменения:
|
Откройте файл
/boot/grub/menu.lst
и добавьте опцию fallback сразу после default[...]
default 0
fallback 1
[...]
Это значит, что если первое ядро (нумерация начинается с нуля) не сможет загрузиться, то будет загружено следующее в списке.В конце этого файла расположены блоки, описывающие параметры ядер для загрузки. Скопируйте первый блок, замените в копии root=/dev/sda3 на root=/dev/md2 и root (hd0,0) на root (hd1,0), после чего поставьте полученный блок первым в списке.
В первом блоке в строке title в конце строки допишите RAID (hd1).
После редактирования файл должен выглядеть примерно так:
|
Обновим RAM-диск:
leopard:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.26-2-686
Копируем данные с sda на sdb:
Сначала проверим перед копированием что у нас есть на /mnt/md2/
leopard:~# ls -l /mnt/md2/
итого 16
drwx------ 2 root root 16384 Дек 12 22:21 lost+found
Теперь копируем из корня / диска sda в котором щас находимся на массив /mnt/md2:
leopard:~# cp -dpRx / /mnt/md2
Проверяем что у нас появилось в /mnt/md2, можем также сравнить что у нас в родном / на sda:
leopard:~# ls -l /mnt/md2/
итого 88
По аналогии поступаем с остальными массивами, копируем и проверяем содержимое:
leopard:~# cd /boot
leopard:~# cd /boot
leopard:/boot# cp -dpRx . /mnt/md0
leopard:/boot# ls -l /mnt/md0
leopard:~# cd /var
leopard:/var# cp -dpRx . /mnt/md3
leopard:/var# ls -l /mnt/md3
leopard:~# cd /var/log
leopard:/var/log# cp -dpRx . /mnt/md4
leopard:/var/log# ls -l /mnt/md4
Если папка /tmp пуста, можно из неё ничего не копировать.
7. Настройка Grub (часть 1)
Устанавливаем загрузчик на второй диск. Запускаем grub и выполняем команды в его оболочке:
|
Перезагружаем систему:
leopard:~# reboot
Теперь система должна загрузиться с нашего RAID-массива. При перезагрузки в меню grub будут предложенны три варианта загрузки. Выбираем 1-ый, с массива md2, т.е. со второго винчестера, что нам и нужно. Остальные нам не интересны 2-ой с диска sda, и 3-ий с диска sda в singl mode.
8. Подготовка первого диска /dev/sda
Проверяем с какого диска загрузились, если все прошло удачно тот видим /dev/md2 и т.д.:
leopard:~# df -h
Файловая система Разм Исп Дост Исп% смонтированна на
/dev/md2 9,2G 492M 8,3G 6% /
tmpfs 982M 0 982M 0% /lib/init/rw
udev 10M 688K 9,4M 7% /dev
tmpfs 982M 0 982M 0% /dev/shm
/dev/md0 92M 21M 67M 24% /boot
/dev/md5 3,8G 33M 3,8G 1% /tmp
/dev/md3 53G 340M 50G 1% /var
/dev/md4 4,7G 35M 4,7G 1% /var/log
Проверим статистику состояния массивов:
|
Теперь необходимо поменять тип разделов на диске /dev/sda на Linux raid autodetect таким же образом, как мы это делали ранее с диском /dev/sdb:
|
Теперь добавим /dev/sda1, /dev/sda2 ... и /dev/sda7 в RAID-массив:
leopard:/home/vitaliy# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1
leopard:/home/vitaliy# mdadm --add /dev/md1 /dev/sda2
mdadm: added /dev/sda2
leopard:/home/vitaliy# mdadm --add /dev/md2 /dev/sda3
mdadm: added /dev/sda3
leopard:/home/vitaliy# mdadm --add /dev/md3 /dev/sda5
mdadm: added /dev/sda5
leopard:/home/vitaliy# mdadm --add /dev/md4 /dev/sda6
mdadm: added /dev/sda6
leopard:/home/vitaliy# mdadm --add /dev/md5 /dev/sda7
mdadm: added /dev/sda7
Проверяем состояние массива. Видим что идет процесс синхронизации:
|
Коммандой watch cat /proc/mdstat можно смотреть в реальном времени. Обязательно дождитесь завершения процесса синхронизации.
После синхронизации файл /proc/mdstat будет выгледить следующим образом:
|
Отредактируем /etc/mdadm/mdadm.conf, так что бы учесть теперешнюю ситуацию с массивами:
|
9. Настройка Grub (часть 2)
Почти всё готово. Теперь отредактируем /boot/grub/menu.lst. На данный момент Grub настроен на загрузку с /dev/sdb (hd1,0). Конечно же, мы все еще хотим, чтобы система грузилась, если /dev/sdb содержит какие-то ошибки. Создадаим копию первого блока с описанием параметров загрузки (в котором описан hd1), вставим ее ниже и заменим в этом блоке hd1 на hd0. Остальные блоки закомментируем. Теперь конфиг загрузчика должен выглядеть примерно так:
leopard:/home/vitaliy# nano /boot/grub/menu.lst [...]
# kopt=root=/dev/md2 ro
[...]
[...]
## ## End Default Options ##
title Debian GNU/Linux, kernel 2.6.26-2-686 RAID (hd1)root (hd1,0)kernel /vmlinuz-2.6.26-2-686 root=/dev/md2 ro quietinitrd /initrd.img-2.6.26-2-686
title Debian GNU/Linux, kernel 2.6.26-2-686 RAID (hd0)root (hd0,0)kernel /vmlinuz-2.6.26-2-686 root=/dev/md2 ro quietinitrd /initrd.img-2.6.26-2-686
#title Debian GNU/Linux, kernel 2.6.26-2-686#root (hd0,0)#kernel /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro quiet#initrd /initrd.img-2.6.26-2-686#title Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)#root (hd0,0)#kernel /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro single#initrd /initrd.img-2.6.26-2-686
### END DEBIAN AUTOMAGIC KERNELS LIST
Обновляем RAM-диск и перезагружаем систему:
leopard:/home/vitaliy# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.26-2-686
leopard:~# reboot
При перезагрузки видим два варианта загрузки в меню Grub.
Поздравляю! Вы только что настроили RAID-1 массив в системе Debian Lenny (stable 5.0.7)
10. Тестирование и решение возможных проблем
Если после нескольких экспериментов с отключением/включением дисков во время загрузке вы видите что некоторые массивы поднимаються с 1 диском а не с двумя, необходимо будет выполнить действия кторые преведены ниже.
А вот так неправильная:
Посмотрим ошибки загрузки ядра командой dmesg:
Мы видим что при загрузки модуль madm в процессе сборки каждего массива не включил в них некоторые диски. Например в массив md2 небыл включен диск sdb3, причины могут быть разные. Возможно проблемы с питанием, например при аварийном выключении.
Для решения проблеммы нада вручную включить каждый диск в соответствующие массивы:
leopard:~# mdadm /dev/md2 --add /dev/sdb3
leopard:~# mdadm /dev/md3 --add /dev/sdb5
leopard:~# mdadm /dev/md4 --add /dev/sdb6
Проверим:
Если команды mdadm --add не сработают, то возможно понадобиться предварительно выполнить команду mdadm с ключами --fail и -- remove. (в моём случае команда mdadm с ключами --fail и -- remove не понадобилась):
leopard:~# mdadm /dev/md2 --fail /dev/sdb3 --remove /dev/sdb3
leopard:~# mdadm /dev/md2 --add /dev/sdb3
Перезагрузим систему и проверим.
Для тестирования выключите компьютор, отключите любой из двух винчестеров, и включите компьютер. Система должна загрузиться без проблем.
Если после нескольких экспериментов с отключением/включением дисков во время загрузке вы видите что некоторые массивы поднимаються с 1 диском а не с двумя, необходимо будет выполнить действия кторые преведены ниже.
Вот так выглядит правильная загрузка массива:[ 6.794486] md: md0 stopped.[ 6.807811] md: bind [ 6.808026] md: bind [ 6.821761] raid1: raid set md0 active with 2 out of 2 mirrors
А вот так неправильная:
[ 6.901313] md: md2 stopped.[ 6.933030] md: bind [ 6.933224] md: bind [ 6.933246] md: kicking non-fresh sdb3 from array![ 6.933251] md: unbind [ 6.933259] md: export_rdev(sdb3)[ 6.946926] raid1: raid set md2 active with 1 out of 2 mirrors
Посмотрим ошибки загрузки ядра командой dmesg:
|
Мы видим что при загрузки модуль madm в процессе сборки каждего массива не включил в них некоторые диски. Например в массив md2 небыл включен диск sdb3, причины могут быть разные. Возможно проблемы с питанием, например при аварийном выключении.
Для решения проблеммы нада вручную включить каждый диск в соответствующие массивы:
leopard:~# mdadm /dev/md2 --add /dev/sdb3
leopard:~# mdadm /dev/md3 --add /dev/sdb5
leopard:~# mdadm /dev/md4 --add /dev/sdb6
Проверим:
|
Если команды mdadm --add не сработают, то возможно понадобиться предварительно выполнить команду mdadm с ключами --fail и -- remove. (в моём случае команда mdadm с ключами --fail и -- remove не понадобилась):
leopard:~# mdadm /dev/md2 --fail /dev/sdb3 --remove /dev/sdb3
leopard:~# mdadm /dev/md2 --add /dev/sdb3
Перезагрузим систему и проверим.