Восстановить софтверный RAID-1 в Hetzner

Чумовейшая чума.
Вчера вырубил все фильтры, которые блокировали разного рода рассылки в почте. И моментально свалилось три письма, с содержанием примерно о том что you have degraded array at /dev/mda0 и тому подобное — на все три партиции винта, стоящего в рейде и меньше года проработавшего. В Hetzner.

Просмотрел почту — валились такие письма уже месяца два. Написал в Hetzner — так мол и так — винт подох, не откликается по

hdparm -i /dev/sdb | grep SerialNo
HDIO_DRIVE_CMD (identify) failed: Input/output error
HDIO_GET_IDENTITY failed: No message of desired type

И пишут они мне человеческим языком — давайте, мол, запустим мы вам хардвар чек на 10 часов с отключением сервера.
Я так немножечко удивился — отвечаю — братюни, у меня винт из рейда выпал — вот, посмотрите —

cat /proc/mdstat

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sda3[0]
1462516672 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
524224 blocks [2/1] [U_]

md0 : active raid1 sda1[0]
2096064 blocks [2/1] [U_]

unused devices:

А они такие — ну отлично — давайте тогда мы вам винт поменяем просто. 20 минут работы всего делов.
Ну, я по scp слил бекапы /etc, /home и /var — и говорю — ну, меняйте, чертяки языкастые. Даром чтоль вам плачу-то.

Пишут через полчаса — поменяли, проверяйте. Проверяю — и вправду, диск подключили, серийник его высвечивается. А вот в рейд его не впихнули. Пишу — мол, своими руками-то в рейд его колбасить? Отвечают — ну, своими и колбась, вот тебе ссылка на нашу вики что и как там делать.

ОК. Посмотрел вики. Сделал первому винту fdisk /dev/sda -l — запомнил все, что написали. Начал делать такое же для второго, новенького.

А винты-то кстати на полтора тера оба.

И второй в GPT притом. Правда, не сразу заметил. Ну, в общем, шаманил и шаманил с fstab, sfstab, cfstab, — даже потом в parted полез, — чтоб убедиться что последний ext3 не знает как системы до сих пор.

Что-то вроде было:

sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 182401 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 4194303 4192256 fd Linux raid autodetect
/dev/sdb2 4194304 5242879 1048576 fd Linux raid autodetect
/dev/sdb3 5242880 2930276351 2925033472 fd Linux raid autodetect
/dev/sdb4 0 — 0 0 Empty
Warning: partition 1 does not end at a cylinder boundary

sfdisk: I don't like these partitions — nothing changed.
(If you really want this, use the --force option.)
sfdisk -d /dev/sda | sfdisk /dev/sdb --force
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 182401 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 4194303 4192256 fd Linux raid autodetect
/dev/sdb2 4194304 5242879 1048576 fd Linux raid autodetect
/dev/sdb3 5242880 2930276351 2925033472 fd Linux raid autodetect
/dev/sdb4 0 — 0 0 Empty
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).)
fdisk /dev/sda -l

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
64 heads, 32 sectors/track, 1430799 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005d36c

Device Boot Start End Blocks Id System
/dev/sda1 2 2048 2096128 fd Linux raid autodetect
/dev/sda2 2049 2560 524288 fd Linux raid autodetect
/dev/sda3 2561 1430799 1462516736 fd Linux raid autodetect
fdisk /dev/sdb -l

Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 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: 0×00000000

Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2096128 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2 262 327 524288 fd Linux raid autodetect
Partition 2 does not end on cylinder boundary.
/dev/sdb3 327 182402 1462516736 fd Linux raid autodetect

Ничем в общем все заканчивалось — видать, где-то сам дурак был, недоразметил ему шапку дисковую. Хотя и dd пробовал подтесать ему, и с fdisk ms-dos-ил... В итоге просто в какой-то момент переписка моя с саппортом зашла в тупик и полез курить маны, куренные в последний раз года три назад.

В итоге забил мощный болт на их вики и несколькими мощными рывками кончил процесс следующим:

dd if=/dev/sda of=/tmp/sda.mbr bs=512 count=1
dd if=/tmp/sda.mbr of=/dev/sdb bs=512 count=1
fdisk /dev/sdb

После чего сохранил разметку партиции — ну а дальше дело техники —

mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb2
mdadm /dev/md2 -a /dev/sdb3

Осталось 3 часа до синхронизации последней партиции. Радуюсь.

3 комментария

  1. peapnz:

    Привет, подскажи плиз. У меня тоже СОФТВЕРНЫЙ RAID-1 В HETZNER (2 x 750 GB SATA 3 Gb/s HDD (Software-RAID 1)). Не прошло и года как один винт отвалился, естественно винда не грузится. Они предлагают воткнуть новый, я не могу понять потеряются у меня данные или нет?

Комментировать

Войдите чтобы оставить комментарий.