LINUX.ORG.RU
ФорумAdmin

Как восстановить Soft RAID-6 с минимальным риском


0

2

Здравствуйте. Давным давно на файловом сервере c Ubuntu был настроен программный RAID-6 из восьми двухтерабайтных дисков. Всё работало, но припёрло поставить в сервер дополнительный SATA-контроллер и диски. В процессе этого, возникло несколько проблем и было решено вернуть сервер в изначальное состояние.

К сожалению сделать этого не удалось. Один из двухтерабайтных дисков стал определяться как 1 терабайтный (я его отключил, так как у нас RAID-6 это не стращно). Но еще с двух, похоже, пропали мета-данные mdraid, так как при mdadm --assemble /dev/md0 подхватываются только 5 дисков из 7. И это уже страшнее.

Диски - Western Digital Caviar Green серии EARS, с 4 килобайтными секторами (да, знаю что диски для рейда говно и вообще глючные - всё уперлось в желание получить побольше, да подешевле).

Физически все семь дисков определяются нормально, fdisk -cu -b 4096 -l выводит следующее:

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6228540

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1             256   488378645  1953513560   fd  Linux raid autodetect
Note: sector size is 4096 (not 512)

Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0c3acf73

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1             256   488378645  1953513560   fd  Linux raid autodetect
Note: sector size is 4096 (not 512)

Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7f97396d


Disk /dev/sdf: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3c393a22

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1             256   488378645  1953513560   fd  Linux raid autodetect
Note: sector size is 4096 (not 512)

Disk /dev/sdg: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4bfcc5c7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdg1             256   488378645  1953513560   fd  Linux raid autodetect
Note: sector size is 4096 (not 512)

Disk /dev/sdh: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x84bcf01a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdh1             256   488378645  1953513560   fd  Linux raid autodetect
Note: sector size is 4096 (not 512)

Disk /dev/sdi: 2000.4 GB, 2000398934016 bytes
42 heads, 63 sectors/track, 184572 cylinders, total 488378646 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003507e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdi1             256   488378645  1953513560   fd  Linux raid autodetect

Вывод mdadm --assemble /dev/md0:

mdadm: /dev/md0 assembled from 5 drives - not enough to start the array.

Вывод cat /proc/mdstat:

md0 : inactive sdh[1](S) sdg[4](S) sdc[7](S) sdi[6](S) sdf[3](S)
      9767567800 blocks super 1.2

Конфиг /etc/mdadm/mdadm.conf:

DEVICE partition
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>
MAILADDR root

ARRAY /dev/md/0 level=raid6 metadata=1.2 num-devices=8 UUID=3ae1df8c:466ad52f:5f502d0b:9f5f75e9 name=sysresccd:0

Вроде бы ничего, что бы могло повредить мета-данные mdraid на этих дисках, не делалось. Поэтому у меня даже нет идей куда копать :(

Какие действия можно предпринять, что бы восстановить данные с минимальным риском? Потерять почти 12 тб данных - было бы ужасно...

mdadm -E /dev/sd[a-i]1
*для всех хардов
посмотрите, определяются ли рэйд разделы на дисках
и вручную собирайте
mdadm -a /dev/md0 /dev/sd[a-i]1

fr_butch
()
Ответ на: комментарий от fr_butch

На проблемных дисках вывод такой:

root@storage:/home/admin# mdadm -E /dev/sda
mdadm: No md superblock detected on /dev/sda.
root@storage:/home/admin# mdadm -E /dev/sdb
mdadm: No md superblock detected on /dev/sdb.

На нормальных вывод такой:

/dev/sdh:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 3ae1df8c:466ad52f:5f502d0b:9f5f75e9
           Name : sysresccd:0
  Creation Time : Fri Aug 20 09:29:59 2010
     Raid Level : raid6
   Raid Devices : 8

 Avail Dev Size : 3907027120 (1863.02 GiB 2000.40 GB)
     Array Size : 23442155520 (11178.09 GiB 12002.38 GB)
  Used Dev Size : 3907025920 (1863.02 GiB 2000.40 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 89a1f3d6:a3072eb1:64e45654:b2425907

    Update Time : Tue Jun 28 18:37:42 2011
       Checksum : f5f9604d - correct
         Events : 1511570

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AAAAAAAA ('A' == active, '.' == missing)

При попытке mdadm -a /dev/md0 /dev/sda (и при попытке mdadm -a /dev/md0 /dev/sda1)

mdadm -a /dev/md0 /dev/sda
mdadm: cannot get array info for /dev/md0

Всё плохо?

Neko-san
() автор топика
Ответ на: комментарий от Neko-san

>mdadm -a /dev/md0 /dev/sda

mdadm: cannot get array info for /dev/md0

ну блин. как я понял у вас sda1 с рэйд патицией. а не все устройство.
поэтому правильно тебе говорит mdadm

в общем, я сам не пробовал, но говорят что можно пересоздать массив, указав что сейчас у тебя не хватает одного диска и mdadm сообразит, что все диски раньше были частью массива и все станет хорошо. но мне не верится в это =)

так что остается гуглить по «mdadm: No md superblock detected» и внимательно читать (и перепроверять с man) или позвать вашего системного администратора

fr_butch
()
Ответ на: комментарий от fr_butch

К сожалению, я и есть системный администратор :(

Скопировал пару сотен секторов с проблемного диска с помощью dd и посмотрел HEX-редактором. Похоже, что вся информация цела. У mdadm есть опция --build, на первый взгляд это то, что мне нужно - сборка массива с игнорированием мета-данных. Насколько может быть опасной сборка массива таким образом? И правильно ли я вообще понял назначение этой опции?

Neko-san
() автор топика

Вроде бы ничего, что бы могло повредить мета-данные mdraid на этих дисках, не делалось. Поэтому у меня даже нет идей куда копать :(

Ух-ха-ха! Вот это Энтерпрайз!

Копать нужно в сторону тестирования на ненужных железках, а продакшен оставить в покое, пока скилзы не поднимете.

iZEN ★★★★★
()
Ответ на: комментарий от Neko-san

>У mdadm есть опция --build, на первый взгляд это то, что мне нужно - сборка массива с игнорированием мета-данных

it creates an array without a superblock

я не просто так советовал сверяться с man

fr_butch
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.