Показаны сообщения с ярлыком mdadm. Показать все сообщения
Показаны сообщения с ярлыком mdadm. Показать все сообщения

вторник, 20 ноября 2012 г.

Переименовать md-устройство


Увидел такую картину на новом сервере:
[root@proteus ~]# cat /proc/mdstat 
Personalities : [raid1] 
md2 : active raid1 sda2[1] sdb2[2]
      157285304 blocks super 1.2 [2/2] [UU]
      
md127 : active (auto-read-only) raid1 sda3[1] sdb3[0]
      1795714000 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sda1[1] sdb1[0]
      511936 blocks [2/2] [UU]
      
unused devices: <none>
[root@proteus ~]# cat /etc/mdadm.conf 
ARRAY /dev/md1 UUID=caa9382c:0099a987:4fbed893:ae34e34e
ARRAY /dev/md/2 metadata=1.2 UUID=68e6b327:6a4816f8:9bbb1e28:6c4a224b name=L146:2

Остановить устройство:

[root@proteus ~]# mdadm --stop /dev/md127 
mdadm: stopped /dev/md127

Собрать заново, используя метаданные на дисках:

[root@proteus ~]# mdadm --assemble /dev/md3 /dev/sda3 /dev/sdb3 --name=3 --update=name
mdadm: /dev/md3 has been started with 2 drives.

Проверка:
[root@proteus ~]# cat /proc/mdstat 
Personalities : [raid1] 
md3 : active raid1 sdb3[0] sda3[1]
      1795714000 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sda2[1] sdb2[2]
      157285304 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sda1[1] sdb1[0]
      511936 blocks [2/2] [UU]
      
unused devices: <none>

Записать в файл /etc/mdadm.conf:

[root@proteus ~]# mdadm --examine --scan > /etc/mdadm.conf 
[root@proteus ~]# cat /etc/mdadm.conf 
ARRAY /dev/md1 UUID=caa9382c:0099a987:4fbed893:ae34e34e
ARRAY /dev/md/2 metadata=1.2 UUID=68e6b327:6a4816f8:9bbb1e28:6c4a224b name=L146:2
ARRAY /dev/md/3 metadata=1.2 UUID=84bd3509:99237831:c00651e9:04d792ba name=proteus:3

Обновить initramfs:
[root@proteus ~]# cd /boot
[root@proteus ~]# mv initramfs-2.6.32-279.14.1.el6.x86_64.img initramfs-2.6.32-279.14.1.el6.x86_64.img.bak
[root@proteus ~]# dracut /boot/initramfs-2.6.32-279.14.1.el6.x86_64.img $(uname -r)

Контрольная перезагрузка:
[root@proteus ~]# reboot

P.S.: Если вы увидели «active (auto-read-only)» в файле /proc/mdstat, то, возможно, вы просто ничего не записывали в этот массив. Например, после монтирования раздела и любых изменений в примонтированном каталоге, статус автоматически меняется.



понедельник, 7 февраля 2011 г.

Перенос системы на бОльший жесткий диск.

Ничего нового не опишу, только грабли, на которые встал. Сервер используется под почту - smtp+imap, настроен программынй raid с помощью mdadm (заметка по настройке проскакивала ранее). Размер жесткого диска в 120G стал заканчиваться спустя 2 года.
Цель: перенести систему на диск 400G, создать программный raid.
Теперь, собственно, как все происходило. Во-первых, хочется заметить, что я нахожусь от сервера за 500 км, так что пришлось воспользоваться услугами местного админа (сервер не имеет ни IP-kvm, ни power-on-net). Вечером в пятницу админ выключил сервер, подкинул новый жесткий диск. Сервер загрузился со старого винчестера, затем я удаленно разбил с помощью fdisk новый жесткий диск, создал файловые системы (mkfs.ext3 -L LABELX /dev/sdbY), добавил сигнатуру на раздел со swap (mkswap /dev/sdb9), создал точки монтирования (mkdir -p /mnt/sdb{1,...10}), подмонтировал разделы (mount /dev/sdbY /mnt/sdbY), скопировал данные со старых разделов на новые, предварительно остановив некоторые сервисы, (cp -dpRx . /mnt/sdbY). Прописал загрузчик grub в mbr.
Тут, как говорится, я дал маху. Сначала скопировал, потом поменял строки в /etc/fstab и /boot/grub/grub.conf. Это да, промах.
Перезагрузка без старого винта и сервер счастливо не смог загрузить ядро. Ничего страшного - объясняем админу по телефону. что прописать в меню grub (хорошо, что админ вполне адекватный работает). Ядро загрузилось, но не смогло найти корневую файловую систему. Супер! Возвращаемся назад к меню grub (конечно, передернув сервер по питанию) и правим не только параметр root (hd0,0), но и kernel /vmlinuz*** ro root=/dev/sda2. Вроде все должно быть в порядке, НО НЕ ГРУЗИТСЯ с ошибкой "mkrootdev: label / not found" 
Тут до меня доходит, что initrd сохранил запись о том, что корневая файловая системы находится на /dev/md6 (старая информация), и соот. не может найти устройство. Что делать? Грузиться с live-cd или режиме rescue. Не вопрос, админ предварительно по моему указанию выкачал по корпоративному каналу образ RHEL5.6 (как будто я предчувствовал такие проблемы :)) и записал на DVD.
Загрузка, linux rescue, включить поддержку сети (предполагал, что зайду по сети и сам дальше сделаю), настроить нужный IP, gateway. Теперь самое главное, chroot сделать, но тут очередная засада - предыдущая инсталляция НЕ найдена и автоматически не поднялись необходимые устройства. Ладно, объясняем по телефону что надо сделать (распаковать initrd, изменить init, запаковать initrd):
mount /dev/sda2 /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot
chroot /mnt/sysimage
mkdir -p /tt
cd /tt
cp /boot/initrd-2.6.18-194.11.3.img .
cat initrd-2.6.18-194.11.3.img | gunzip | cpio -i
правим init - убираем все, что касается старых устройств, меняем /dev/md6 на /dev/sda2, убираем resume /dev/md6, сохраняем изменения
rm -f initrd-2.6.18-194.11.3.img
find . -print | cpio -H newc -o | gzip -9 -c ../initrd_new.img
cp ../initrd_new.img /boot
Отлично.
Грузимся с жесткого диска, правим меню grub (на предыдущем этапе благополучно забыли сразу поменять). Оно грузится!!! Но опять лажа - записи в /etc/fstab старые и как дошло до проверки файловых систем - тут же выкинуло предложение ввести пароль root и занятся проверкой/монированием файловых систем самостоятельно.
Опять грузимся с диска в linux rescue, меняем записи в /etc/fstab на правильные, заодно и grub.conf. Теперь система нормально загрузилась.
Вообщем, пример довольно поучительный, правильное планирование переноса никто не отменяет + надо думать за какое-то удаленное управление системой.

понедельник, 31 января 2011 г.

WARNING: mismatch_cnt is not 0 on /dev/md2

Получил сообщение с утра от Cron:
/etc/cron.weekly/99-raid-check:
WARNING: mismatch_cnt is not 0 on /dev/md2

$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
200704 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
20482752 blocks [2/2] [UU]

Вроде все нормально. Погуглив немного, наткнулся на хорошую заметку http://phpsuxx.blogspot.com/2010/04/warning-mismatchcnt-is-not-0-on-devmd2.html.
Запустил
# cat /sys/block/md2/md/mismatch_cnt
3456
[root@gw ~]# echo 'repair' >/sys/block/md2/md/sync_action
[root@gw ~]# cat /sys/block/md2/md/mismatch_cnt
0
[root@gw ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
200704 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
20482752 blocks [2/2] [UU]
[>....................] resync = 1.6% (347456/20482752) finish=13.5min speed=24818K/sec
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
200704 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
20482752 blocks [2/2] [UU]

[root@gw ~]# cat /sys/block/md2/md/mismatch_cnt
0

Если не помогает 'repair' и mismatch_cnt=XXXX, то можно попробовать
[root@gw ~]# echo 'check' >/sys/block/md2/md/sync_action

четверг, 13 января 2011 г.

Установка программного RAID1 на рабочей системе с 2-мя дисками

Небольшая памятка для себя.
1. Загрузка модулей ядра (во избежание перезагрузки)
/sbin/modprobe linear
/sbin/modprobe raid1
2. Проверка загрузки
cat /proc/mdstat
3. Копирование таблицы разделов с /dev/sda на /dev/sdb
/sbin/sfdisk -d /dev/sda | /sbin/sfdisk /dev/sdb
4. Проверка
/sbin/fdisk -l
5. Изменение типа разделов /dev/sdb на Linux raid autodetect
/sbin/fdisk /dev/sdb
Command: t (change a partition's system id)
Partition number (1-4): 1
Hex code (type L to list codes): fd
6. Обнуление суперблока, чтобы убедиться в том, что не осталось предыдущих RAID-installations на /dev/sdb
/sbin/mdadm --zero-superblock /dev/sdbX
7. Создание RAID массивов
/sbin/mdadm --create /dev/mdX --level=1 --raid-disks=2 missing /dev/sdbY
8. Проверка вывода
cat /proc/mdstat
9. Создание файловых систем на RAID массивах
/sbin/mkfs.ext3 /dev/mdX
/sbin/mkswap /dev/mdY
10. Создание /etc/mdadm.conf
/sbin/mdadm --examine --scan > /etc/mdadm.conf
11. Монтирование устройств /dev/mdX
mkdir /mnt/mdX
mount /dev/mdX /mnt/mdX
12. Изменение файла /etc/fstab. Замена LABEL=YYYY на /dev/mdX
13. Настройка загрузчика GRUB добавить fallback=1
14. Замена root=LABEL=/ на root=/dev/mdX и root (hd0,0) на root (hd1,0)
15. Согласование с новой ситуацией ramdisk
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
16. Копирование содержимого директроий /dev/sdaX на новые устройства /dev/mdY
cp -dpRx / /mnt/mdX
17. Настройка и инсталляция загрузчика GRUB
grub
>root (hd0,0)
>setup (hd0)
>root (hd1,0)
>setup (hd1)
>quit
18. Перезагрузка
19. Изменение типа разделов /dev/sda на Linux raid autodetect
/sbin/fdisk /dev/sda
Command: t (change a partition's system id)
Partition number (1-4): 1
Hex code (type L to list codes): fd
20. Добавление устройств /dev/sdaX в соответствующие RAID массивы
/sbin/mdadm --add /dev/mdX /dev/sdaY
возможные проблемы с корневым разделом /sbin/grub-install --recheck /dev/sdb
сделать /sbin/modprobe megaraid_mm
21. Проверка вывода
cat /proc/mdstat
22. Согласование с новой ситуацией файла /etc/mdadm.conf
/sbin/mdadm --examine --scan > /etc/mdadm.conf
23. Подготовка загрузчика GRUB (Часть 2)
Скопировать строку с kernel (содержащую hd1), вставить ниже и заменить hd1 на hd0
24. Обновление ramdisk
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

Литература:
http://www.howtoforge.com/software-raid1-grub-boot-fedora-8
man grub
man fdisk
man mdadm