Фев 032016
 

Итак имеем: новый установленный сервер с удаленным доступом по ssh. В на сервере установлена CentOS 6.7, так же имеем 4 HDD по 3Tb.
Необходимо настроить два дисковых массива RAID1 без переустановки системы. Поехали.

Часть 1, делаем RAID1 на установленной системе.
Проверяем что есть на данный момент:

[root@server ~]# df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda2      ext4   2,7T  1,2G  2,6T   1% /
tmpfs          tmpfs  1,9G     0  1,9G   0% /dev/shm
/dev/sda1      ext2   485M   74M  386M  17% /boot
/dev/sda4      ext4   3,9G  8,1M  3,7G   1% /tmp
[root@server ~]#

Т.к. диски с поддержкой разметки GPT, то fdisk ничего интересного не покажет, кроме одной большой парции на весь диск и ошибки поддержки GPT.
Проверяем, что нет рейдов, если есть – удаляем (возможно остались от предыдущих установок):

# Проверяем:
[root@server ~]# cat /proc/mdstat
Personalities : [raid1]
unused devices: 
[root@server ~]#
# Рейда нет
# Если есть удаляем:
mdadm --stop --scan
mdadm --zero-superblock /dev/sdb{1..4}
# В случае успеха видим:
[root@server ~]# mdadm --zero-superblock /dev/sdb{1..4}
mdadm: Unrecognised md component device - /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb2
mdadm: Unrecognised md component device - /dev/sdb3
mdadm: Unrecognised md component device - /dev/sdb4
[root@server ~]#

Для начала нужно разметить диск sdb (сейчас пустой) так же, как sda (с системой).

sfdisk -d /dev/sda | sfdisk --force /dev/sdb
# После, чтобы система подхватила новую разметку диска:
partprobe /dev/sdb
 
# Изменяем тип партиции для использования raid
parted -s -m -a optimal /dev/sdb -- set 1 raid on set 2 raid on 
partprobe /dev/sdb

Альтернативный вариант: В нашем случае в связи с тем, что диск использует GPT, sfdisk бесполезен (но у меня получилось).
Просто скопируем первые 63 блока с информацией о разметке диска так (если у вас диски без GPT, то этого делать не нужно):

dd if=/dev/sda of=/dev/sdb count=63

Проверяем

[root@server ~]# ls /dev/ | grep sd
sda
sda1
sda2
sda3
sda4
sdb
sdb1
sdb2
sdb3
sdb4
sdc
sdd
[root@server ~]#

Хорошо, у нас есть одинаковые парции, засунем в raid парции sdb и сделаем файловую систему.
Обращаем снимание на –metadata=0.90 – использовать версию 0.90 для раздела /boot !!! Для большого раздела используем версию 1.2

mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=2 /dev/sdb1 missing
mdadm --create /dev/md1 --metadata=1.2 --level=1 --raid-devices=2 /dev/sdb2 missing
mdadm --create /dev/md2 --metadata=0.90 --level=1 --raid-devices=2 /dev/sdb4 missing

/dev/sdb3 не трогаем, нет смысла делать swap в рейде. Теперь создадим файловую систему:

# для /boot оптимально ext2
mkfs.ext2 /dev/md0
# для / оптимально ext4
mkfs.ext4 /dev/md1
# для /tmp оптимально ext4
mkfs.ext4 /dev/md2
# создаем swap на свободной парции второго диска
mkswap /dev/sdb3

raid парции с sdb готовы, теперь посмотрим что получилось и запишем в /etc/mdadm.conf

[root@server ~]# mdadm --detail --scan
ARRAY /dev/md0 metadata=0.90 UUID=b6ebf9a0:d273a735:2e4a7c39:81e14765
ARRAY /dev/md1 metadata=1.2 name=server.162.198.30:1 UUID=9470072a:25f3cbc2:a5195ecd:934ecd76
ARRAY /dev/md2 metadata=0.90 UUID=ac378ee4:c3617615:2e4a7c39:81e14765
[root@server ~]# mdadm --detail --scan > /etc/mdadm.conf
[root@server ~]#

Это готово. Теперь надо сделать изменения в grub и fstab на текущей системе. Для этого идем в /boot и редактируем grub/grub.conf. Для начала проверим параметры ядра:

cat /boot/grub/grub.conf | grep MD

Не должно выдать ничего. Если выдает строки с параметрами ядра rd_no_md, если есть такие – удаляем rd_no_md, без этого grud raid парции распознавать при загрузке не будет.
Далее смотрим какое ядро загружено сейчас (uname -r), находим блок для этого ядра в grub.conf, и делаем в нем замену

# Ищем:
ro root=UUID=6ddafb1e-55d3-4aa2-b36e-6865421d52c1
# Меняем на
ro root=/dev/md1

Вы должны помнить что md1 у нас – это парция c корнем (/) системы. Также заменяем в том же блоке

# ищем
root (hd0,0)
# Меняем на
root (hd1,0)

ИЛИ можно воспользоватся готовым скриптом

cp /boot/grub/grub.conf /boot/grub/grub.conf.bak
cat /boot/grub/grub.conf.bak |
sed -e 's/ rd_no_md//gi'|
sed -e 's/splashimage=(hd0,0)/splashimage=(hd1,0)/'|
sed -e 's/root (hd0,0)/root (hd1,0)/g'|
sed -e 's/ro root=UUID=.* rd_NO_LUKS/ro root=\/dev\/md1 rd_NO_LUKS/g' > /boot/grub/grub.conf

Здесь закончили. Идем в /etc и редактируем fstab – заменяем устройства /dev/sda* (UUID) на соответствующие им /dev/md*, вот так должен выглядеть файл после редактирования:

#
# /etc/fstab
# Created by anaconda on Sat Jan 30 01:07:07 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#UUID=6ddafb1e-55d3-4aa2-b36e-6865421d52c1 /                       ext4    defaults        1 1
/dev/md1                /                       ext4    defaults        1 1
#UUID=5bf5411e-4ade-45f9-83a3-1397bb45f78f /boot                   ext2    defaults        1 2
/dev/md0                /boot                   ext2    defaults        1 2
#UUID=6783d64f-7a83-4c16-b737-09b4c2293cd4 /tmp                    ext4    noexec,nosuid,nodev        1 2
/dev/md2                /tmp                    ext4    noexec,nosuid,nodev        1 2
UUID=170bdd15-8546-40cd-8180-807900ac3458 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

Старые устройства у меня закомментированы (там UUID= вместо /dev/sda*, из-за GPT, сути это не меняет).
Примонтируем наши /dev/md* девайсы

mkdir /mnt/md{0..2}
mount /dev/md2 /mnt/md2
mount /dev/md1 /mnt/md1
mount /dev/md0 /mnt/md0

После изменений в конфигурации grud нужно обновить initrd, и переделать initramfs с подключением нашего mdadm.conf

# Забеками старый
mv /boot/initrd-`uname -r`kdump.img /boot/initrd-`uname -r`kdump.img.old
# Сделаем новый, это нужно сделать для применения изменений в grub
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
# Забекапим
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.old
# Сделаем новый ram-диск для инициализации OS (нужно для верного определения устройств md*)
dracut --mdadmconf --force /boot/initramfs-$(uname -r).img $(uname -r)

Почти все готово к ребуту. Кроме самого важного – данные то не скопировали. Копируем (занимает какое то время)

cp -dpRx / /mnt/md1
cd /boot
cp -dpRx . /mnt/md0
cd /tmp
cp -dpRx . /mnt/md2

Итак, что имеем. Мы сделали raid-парции, скопировали все данные на них, сконфигурировали os на определение и монтирование raid-1 парций при инициализации и grub на загрузку с этих парций. Установим grub на диски.

[root@server /]# grub
Probing devices to guess BIOS drives. This may take a long time.
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"... failed (this is not fatal)
 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
 Running "install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf "... succeeded
Done.
grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd1)"... failed (this is not fatal)
 Running "embed /grub/e2fs_stage1_5 (hd1,0)"... failed (this is not fatal)
 Running "install /grub/stage1 (hd1) /grub/stage2 p /grub/grub.conf "... succeeded
Done.
grub> quit
quit
[root@server /]#

Теперь можно и ребут сделать.

reboot

Если все прошло хорошо – сервер загрузится без проблем. Иногда время загрузки может чуть увеличиться по сравнению с обычным.
Если сервак не перезагрузился – переустанавливаем систему.

после ребута

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

[root@server ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb2[0]
      2921233408 blocks super 1.2 [2/1] [U_]
      bitmap: 22/22 pages [88KB], 65536KB chunk
md2 : active raid1 sdb4[0]
      4194240 blocks [2/1] [U_]
 
md0 : active raid1 sdb1[0]
      511936 blocks [2/1] [U_]
 
unused devices: 
[root@server ~]# df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/md1       ext4   2,7T  1,2G  2,6T   1% /
tmpfs          tmpfs  1,9G     0  1,9G   0% /dev/shm
/dev/md0       ext2   485M  132M  328M  29% /boot
/dev/md2       ext4   3,9G  8,1M  3,7G   1% /tmp
[root@server ~]#

Все в норме – raid парции определились (хотя это можно и не проверять, ничего бы не загрузилось без этого) и система загрузилась с них.
Теперь диск sda у нас уже не основной, засунем его в raid-1 массив и синхронизируем со вторым:

mdadm --add /dev/md0 -a /dev/sda1
mdadm --add /dev/md1 -a /dev/sda2
mdadm --add /dev/md2 -a /dev/sda4

Проверяем ход синхронизации:

watch -n 1 cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[2] sdb2[0]
      2921233408 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.0% (912640/2921233408) finish=266.6min speed=182528K/sec
      bitmap: 22/22 pages [88KB], 65536KB chunk
md2 : active raid1 sda4[2] sdb4[0]
      4194240 blocks [2/1] [U_]
          resync=DELAYED
 
md0 : active raid1 sda1[1] sdb1[0]
      511936 blocks [2/2] [UU]
 
unused devices:

Процедура не быстрая, дождемся завершения синхронизации.
Закончилась синхронизация:

[root@server ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[2] sdb2[0]
      2921233408 blocks super 1.2 [2/2] [UU]
      bitmap: 0/22 pages [0KB], 65536KB chunk
md2 : active raid1 sda4[1] sdb4[0]
      4194240 blocks [2/2] [UU]
 
md0 : active raid1 sda1[1] sdb1[0]
      511936 blocks [2/2] [UU]
 
unused devices: 
[root@server ~]#

Теперь надо переписать mdadm.conf:

mdadm --detail --scan > /etc/mdadm.conf

Сделаем парции обоих дисков raid’ового типа. Для дисков с GPT запускаем gdisk и выставляем тип FD00 для каждой парции каждого диска (кроме парций под SWAP, конечно, в нашем случае это №3).
Если у вас диски без GPT, то ставим raid autodetect через fdisk, параметр (тип fd).

[root@server ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): t
Partition number (1-4): 1
Current type is 'BIOS boot partition'
Hex code or GUID (L to show codes, Enter = 8300): FD00
Changed type of partition to 'Linux RAID'
Command (? for help): t
Partition number (1-4): 2
Current type is 'Microsoft basic data'
Hex code or GUID (L to show codes, Enter = 8300): FD00
Changed type of partition to 'Linux RAID'
Command (? for help): t
Partition number (1-4): 4
Current type is 'Microsoft basic data'
Hex code or GUID (L to show codes, Enter = 8300): FD00
Changed type of partition to 'Linux RAID'
Command (? for help): p
Disk /dev/sda: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 71D8BE94-C9BA-423F-B038-5899CA30D360
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2925 sectors (1.4 MiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1026047   500.0 MiB   FD00 
   2         1026048      5843755007   2.7 TiB     FD00 
   3      5843755008      5852143615   4.0 GiB     8200 
   4      5852143616      5860532223   4.0 GiB     FD00 
Command (? for help): q
[root@server ~]#

делаем тоже самое и на gdisk /dev/sdb
Переконфигурируем grub еще раз

nano /boot/grub/menu.lst

В начале файла ищем указание до splashimage и меняем в нем hd0 на hd1 если не так (оно уже должно быть таким).
Еще раз установим grub на оба диска:

[root@server ~]# grub
Probing devices to guess BIOS drives. This may take a long time.
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"... failed (this is not fatal)
 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
 Running "install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf "... succeeded
Done.
grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd1)"... failed (this is not fatal)
 Running "embed /grub/e2fs_stage1_5 (hd1,0)"... failed (this is not fatal)
 Running "install /grub/stage1 (hd1) /grub/stage2 p /grub/grub.conf "... succeeded
Done.
grub> quit
quit
[root@server ~]#

Контрольный ребут для проверки и система готова к работе.

reboot

Часть 2, создаем RAID1 на 2 оставшихся винтах

На сервере осталось еще 2 пустых диска (/dev/sdc /dev/sdd) по 3Tb, сделаем из них зеркало
Создаем партиции на обоих диска использую parted, в примере только для диска /dev/sdc

parted -a optimal /dev/sdc
mklabel gpt
# Соглашаемся, что все данные удалятся
# Сделаем раздел ext4
mkpart primary ext4 0% 100%
# ставим флаг, что эта партиция RAID
set 1 raid on
# Смотрим что получилось:
(parted) p                                                               
Модель: ATA TOSHIBA DT01ACA3 (scsi)
Диск /dev/sdc: 3001GB
Размер сектора (логич./физич.): 512B/4096B
Таблица разделов: gpt
Номер  Начало  Конец   Размер  Файловая система  Имя      Флаги
 1     1049kB  3001GB  3001GB                    primary  raid
(parted)q

Создаем новый массив (/dev/md4)

mdadm --create /dev/md4 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1

соглашаемся с предупреждением.
Создаем файловую систему:

mkfs.ext4 /dev/md4

Ждем пока синхронизируется массив.

watch -n 1 cat /proc/mdstat

Обновим mdadm.conf

mdadm --detail --scan > /etc/mdadm.conf

Делаем директорию, куда будем монтировать рейд и монтируем:

mkdir /raid
# монтируем
mount /dev/md4 /raid1/

Добавляем автомонтирование в fstab, добавляем строку “/dev/md4 /raid1 ext4 defaults 0 0″:

[root@server ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jan 30 01:07:07 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#UUID=6ddafb1e-55d3-4aa2-b36e-6865421d52c1 /                       ext4    defaults        1 1
/dev/md1                /                       ext4    defaults        1 1
#UUID=5bf5411e-4ade-45f9-83a3-1397bb45f78f /boot                   ext2    defaults        1 2
/dev/md0                /boot                   ext2    defaults        1 2
#UUID=6783d64f-7a83-4c16-b737-09b4c2293cd4 /tmp                    ext4    noexec,nosuid,nodev        1 2
/dev/md2                /tmp                    ext4    noexec,nosuid,nodev        1 2
UUID=170bdd15-8546-40cd-8180-807900ac3458 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/md4                /raid1             ext4     defaults     0 0
[root@server ~]#

Делаем контрольную перезагрузку
После перезагрузки проверяем результат:

[root@server ~]# df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/md1       ext4   2,7T  1,2G  2,6T   1% /
tmpfs          tmpfs  1,9G     0  1,9G   0% /dev/shm
/dev/md0       ext2   485M  132M  328M  29% /boot
/dev/md2       ext4   3,9G  8,1M  3,7G   1% /tmp
/dev/md4       ext4   2,7T   73M  2,6T   1% /raid1
[root@server ~]#
 Posted by at 23:12

Sorry, the comment form is closed at this time.