Снова про ремонт рэйда…

Май 8th, 2014 | Posted by | Filed under Hardware, Life, PC, Software

Это уже попахивает паранойёй, но я снова о своей любимой теме — о ремонте софтового рэйда. Он у меня опять сломался. Да, «винчестеры уже не те», но надо ремонтировать, особенно если учесть что:

From: mdadm monitoring
To: ***@***.ru
Subject: DegradedArray event on /dev/md/1:***
Date: Thu, 08 May 2014 06:25:04 +0800

This is an automatically generated mail message from mdadm
running on virt

A DegradedArray event had been detected on md device /dev/md/1.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1]
md2 : active raid1 sdf3[4] sde3[3] sdd3[1]
448111424 blocks super 1.2 [3/3] [UUU]

md1 : active raid1 sdc3[5] sda3[3] sdb3[4](F)
448111424 blocks super 1.2 [3/2] [U_U]

md0 : active raid1 sda1[0] sdb1[6](F) sde1[4] sdd1[3] sdf1[5] sdc1[7]
39028608 blocks super 1.2 [6/5] [UUUUU_]

unused devices:

1. Подключаюсь консолью и вижу:

# mdadm —detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 4 04:11:10 2001
Raid Level : raid1
Array Size : 39028608 (37.22 GiB 39.97 GB)
Used Dev Size : 39028608 (37.22 GiB 39.97 GB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent

Update Time : Thu May 8 08:26:39 2014
State : clean, degraded
Active Devices : 5
Working Devices : 5
Failed Devices : 1
Spare Devices : 0

Name : ***:0
UUID : aef810ab:96afd1ce:43d4d95a:c0a05bb5
Events : 729404

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
7 8 33 1 active sync /dev/sdc1
5 8 81 2 active sync /dev/sdf1
3 8 49 3 active sync /dev/sdd1
4 8 65 4 active sync /dev/sde1
5 0 0 5 removed

6 8 17 — faulty spare

# mdadm —detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 4 04:11:10 2001
Raid Level : raid1
Array Size : 39028608 (37.22 GiB 39.97 GB)
Used Dev Size : 39028608 (37.22 GiB 39.97 GB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent

Update Time : Thu May 8 08:26:39 2014
State : clean, degraded
Active Devices : 5
Working Devices : 5
Failed Devices : 1
Spare Devices : 0

Name : ***:0
UUID : aef810ab:96afd1ce:43d4d95a:c0a05bb5
Events : 729404

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
7 8 33 1 active sync /dev/sdc1
5 8 81 2 active sync /dev/sdf1
3 8 49 3 active sync /dev/sdd1
4 8 65 4 active sync /dev/sde1
5 0 0 5 removed

6 8 17 — faulty spare

Отвалился винчестер /dev/sdb. Буду менять, тем более что он уже один раз «исчезал», о чём была сделана запись в тудулисте «На виртуальном сервере *** глючили 2 винчестера sdb и sdc. Обнаружено 20140305. Заребилдено. При повторении менять винчестеры».
2. Иду в серверную, открываю крышку винчестерного отсека и вижу, что второй винчестер непрерывно светит своим светодиодом. Выдёргиваю его и несу на замену. Прикручиваю вместо него другой, иду в серверную, вставляю. На этом походы в серверную пока завершены. Можно было бы поменять одновременно и /dev/sdc, но он пока не причиняет никаких проблем, а превращать 1 рэйд на время ремонта в одиночный винт без нужды желания нет. Закрываю винчестерный отсек и серверную.
3. Заменённый хотсвопом диск надо «увидеть» системой. Для этого делаю:

# rescan-scsi-bus -l

Она выдаёт кучу всего, где я вижу все стоящие в системе винчестеры и устройство хот-свопа SCA HSBP M1.
4. Смотрю, что изменилось, командой:

# ls /dev/sd*
/dev/sda /dev/sda2 /dev/sdc /dev/sdc2 /dev/sdd /dev/sdd2 /dev/sde /dev/sde2 /dev/sdf /dev/sdf2 /dev/sdg
/dev/sda1 /dev/sda3 /dev/sdc1 /dev/sdc3 /dev/sdd1 /dev/sdd3 /dev/sde1 /dev/sde3 /dev/sdf1 /dev/sdf3

Вижу, что появился /dev/sdg без разделов. Проверяю, действительно ли это он:

# fdisk -l /dev/sdg

Disk /dev/sdg: 500.1 GB, 500106780160 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976771055 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa1eba1eb

Device Boot Start End Blocks Id System

Это и правда он 🙂
5. Поскольку я знаю, что на этом сервере у меня на всех винчестерах одинаковая таблица разделов, только разделы подключены к разным софтовым рэйдам, то таблицу разделов на заменённый винчестер я просто склонирую:

# sfdisk -d /dev/sda|sfdisk /dev/sdg
Checking that no-one is using this disk right now …
OK

Disk /dev/sdg: 60801 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/sdg1 0 — 0 0 0 Empty
/dev/sdg2 0 — 0 0 0 Empty
/dev/sdg3 0 — 0 0 0 Empty
/dev/sdg4 0 — 0 0 0 Empty
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/sdg1 * 2048 78125055 78123008 fd Linux raid autodetect
/dev/sdg2 78125056 80078847 1953792 82 Linux swap / Solaris
/dev/sdg3 80078848 976564223 896485376 fd Linux raid autodetect
/dev/sdg4 0 — 0 0 Empty
Warning: partition 1 does not end at a cylinder boundary
Warning: partition 2 does not start at a cylinder boundary
Warning: partition 2 does not end at a cylinder boundary
Warning: partition 3 does not start at a cylinder boundary
Warning: partition 3 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).)

Таблица разделов создана, в чём можно убедиться командой:

# fdisk -l /dev/sdg

Disk /dev/sdg: 500.1 GB, 500106780160 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976771055 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa1eba1eb

Device Boot Start End Blocks Id System
/dev/sdg1 * 2048 78125055 39061504 fd Linux raid autodetect
/dev/sdg2 78125056 80078847 976896 82 Linux swap / Solaris
/dev/sdg3 80078848 976564223 448242688 fd Linux raid autodetect

6. Теперь надо подключить разделы к существующим софтовым рэйдам:

# mdadm —manage /dev/md0 —add /dev/sdg1
mdadm: added /dev/sdg1

# mdadm —manage /dev/md1 —add /dev/sdg3
mdadm: added /dev/sdg3

Всё успешно, теперь винчестеры будут несколько часов работать как угорелые, восстанавливая целостность софтового рэйда. Проверяем, пошёл ли процесс:

# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdf3[4] sde3[3] sdd3[1]
448111424 blocks super 1.2 [3/3] [UUU]

md1 : active raid1 sdg3[6] sdc3[5] sda3[3] sdb3[4](F)
448111424 blocks super 1.2 [3/2] [U_U]
resync=DELAYED

md0 : active raid1 sdg1[8] sda1[0] sdb1[6](F) sde1[4] sdd1[3] sdf1[5] sdc1[7]
39028608 blocks super 1.2 [6/5] [UUUUU_]
[=======>………….] recovery = 36.8% (14381056/39028608) finish=11.9min speed=34250K/sec

unused devices:

Всё хорошо, процесс идёт.
7. Может случиться так, что система захочет загрузиться с этого винчестера, а «из коробки» у него нет загрузчика grub. Это исправляем командой:

# aptitude reinstall grub-pc grub-common
Следующие пакеты будут ПЕРЕУСТАНОВЛЕНЫ:
grub-common grub-pc
0 пакетов обновлено, 0 установлено новых, 2 переустановлено, 0 пакетов отмечено для удаления, и 0 пакетов не обновлено.
Необходимо получить 0 B/1 704 kB архивов. После распаковки 0 B будет занято.
Предварительная настройка пакетов …
(Чтение базы данных … на данный момент установлено 77168 файлов и каталогов.)
Подготовка к замене пакета grub-common 1.99-27+deb7u2 (используется файл …/grub-common_1.99-27+deb7u2_amd64.deb) …
Распаковывается замена для пакета grub-common …
Подготовка к замене пакета grub-pc 1.99-27+deb7u2 (используется файл …/grub-pc_1.99-27+deb7u2_amd64.deb) …
Распаковывается замена для пакета grub-pc …
Обрабатываются триггеры для man-db …
Настраивается пакет grub-common (1.99-27+deb7u2) …
Настраивается пакет grub-pc (1.99-27+deb7u2) …
Installation finished. No error reported.
Generating grub.cfg …
Found linux image: /boot/vmlinuz-3.2.0-3-amd64
Found initrd image: /boot/initrd.img-3.2.0-3-amd64
No volume groups found
done

8. Кроме того, надо обновить конфигурацию mdadm, чтобы при загрузке системы все винчестеры автоматически и правильно собирались в массив:

# mdadm —detail —scan —verbose > /etc/mdadm/mdadm.conf

# dpkg-reconfigure mdadm
[ ok ] Stopping MD monitoring service: mdadm —monitor.
Generating array device nodes… done.
update-initramfs: deferring update (trigger activated)
[ ok ] Generating udev events for MD arrays…done.
[ ok ] Starting MD monitoring service: mdadm —monitor.
Обрабатываются триггеры для initramfs-tools …
update-initramfs: Generating /boot/initrd.img-3.2.0-3-amd64
W: mdadm: unchecked configuration file: /etc/mdadm/mdadm.conf
W: mdadm: please read /usr/share/doc/mdadm/README.upgrading-2.5.3.gz .

В процессе будет задано несколько вопросов, на которые надо адекватно ответить. Если всё было уже настроено и вы не хотите ничего менять, нажмите несколько раз Enter.
9. По идее, надо бы ещё прописать своп нового винчестера в /etc/fstab, но лучше это сделать по UUID, а не по имени винчестера (оно наверняка поменяется после перезагрузки). До перезагрузки . Сервер я перезагружать (пока) не собираюсь. Если перезагружу, может быть, опишу.

Готово!

No comments yet.