กู้คืนข้อมูล RAID 5 หลังจากสร้างอาร์เรย์ใหม่แทนที่จะใช้ซ้ำ


35

กรุณาช่วยด้วย - ฉันเป็นคนใหม่ที่มีอาการปวดหัวครั้งใหญ่ในมือ (สถานการณ์พายุสมบูรณ์แบบ)

ฉันมี hdd 3 1tb บน ubuntu 11.04 ที่กำหนดค่าเป็นซอฟต์แวร์ RAID 5 ข้อมูลถูกคัดลอกทุกสัปดาห์ไปยังอีกเครื่องหนึ่งแยกออกจากฮาร์ดไดรฟ์ของคอมพิวเตอร์จนกว่าจะล้มเหลวอย่างสมบูรณ์และถูกทิ้งไป ไม่กี่วันก่อนเรามีไฟดับและหลังจากรีบูตกล่องของฉันจะไม่ติดการโจมตี ในภูมิปัญญาที่ไม่มีที่สิ้นสุดของฉันฉันเข้า

mdadm --create -f...

คำสั่งแทน

mdadm --assemble

และไม่ได้สังเกตการเลียนแบบที่ฉันได้ทำจนกระทั่งหลังจากนั้น มันเริ่มต้นอาร์เรย์ที่เสื่อมโทรมและดำเนินการสร้างและซิงค์ซึ่งใช้เวลาประมาณ 10 ชั่วโมง หลังจากที่ฉันกลับมาฉันเห็นว่าอาเรย์นั้นสำเร็จและทำงานได้ แต่การจู่โจมไม่ได้

ฉันหมายถึงไดรฟ์แต่ละตัวถูกแบ่งพาร์ติชัน (ประเภทพาร์ติชันf8) แต่md0อุปกรณ์ไม่ได้ ตระหนักถึงความสยองขวัญในสิ่งที่ฉันทำฉันพยายามค้นหาวิธีแก้ปัญหา ฉันแค่อธิษฐานที่--createไม่ได้เขียนทับเนื้อหาทั้งหมดของฮาร์ดไดรฟ์

ใครก็ได้โปรดช่วยฉันด้วยสิ่งนี้ - ข้อมูลที่อยู่ในไดรฟ์นั้นมีความสำคัญและไม่ซ้ำใคร ~ 10 ปีของภาพถ่ายเอกสาร ฯลฯ

เป็นไปได้หรือไม่ที่การระบุฮาร์ดไดรฟ์ที่เข้าร่วมในลำดับที่ไม่ถูกต้องสามารถทำการmdadmเขียนทับได้ เมื่อฉันทำ

mdadm --examine --scan 

ฉันได้รับสิ่งที่ชอบ ARRAY /dev/md/0 metadata=1.2 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b name=<hostname>:0

ชื่อที่น่าสนใจพอที่เคยเป็น 'raid' และไม่ใช่ host hame ที่มี: 0 ต่อท้าย

นี่คือรายการกำหนดค่า 'sanitized':

DEVICE /dev/sdf1 /dev/sde1 /dev/sdd1

CREATE owner=root group=disk mode=0660 auto=yes

HOMEHOST <system>

MAILADDR root


ARRAY /dev/md0 metadata=1.2 name=tanserv:0 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b


Here is the output from mdstat

cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sdd1[0] sdf1[3] sde1[1]
1953517568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>


fdisk shows the following:

fdisk -l

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 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: 0x000bf62e

Device Boot Start End Blocks Id System
/dev/sda1 * 1 9443 75846656 83 Linux
/dev/sda2 9443 9730 2301953 5 Extended
/dev/sda5 9443 9730 2301952 82 Linux swap / Solaris

Disk /dev/sdb: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 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: 0x000de8dd

Device Boot Start End Blocks Id System
/dev/sdb1 1 91201 732572001 8e Linux LVM

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 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: 0x00056a17

Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 8e Linux LVM

Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 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: 0x000ca948

Device Boot Start End Blocks Id System
/dev/sdd1 1 121601 976760001 fd Linux raid autodetect

Disk /dev/dm-0: 1250.3 GB, 1250254913536 bytes
255 heads, 63 sectors/track, 152001 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: 0x00000000

Disk /dev/dm-0 doesn't contain a valid partition table

Disk /dev/sde: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 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: 0x93a66687

Device Boot Start End Blocks Id System
/dev/sde1 1 121601 976760001 fd Linux raid autodetect

Disk /dev/sdf: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 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: 0xe6edc059

Device Boot Start End Blocks Id System
/dev/sdf1 1 121601 976760001 fd Linux raid autodetect

Disk /dev/md0: 2000.4 GB, 2000401989632 bytes
2 heads, 4 sectors/track, 488379392 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table

ตามคำแนะนำฉันทำความสะอาดซุปเปอร์บล็อกและสร้างอาร์เรย์ใหม่ด้วย--assume-cleanตัวเลือก แต่ไม่มีโชคเลย

มีเครื่องมือใดบ้างที่จะช่วยให้ฉันฟื้นข้อมูลบางอย่างได้อย่างน้อย? บางคนสามารถบอกฉันได้ว่า mdadm - สร้างอะไรได้บ้างเมื่อซิงค์เพื่อทำลายข้อมูลเพื่อให้ฉันสามารถเขียนเครื่องมือเพื่อเลิกทำสิ่งที่ทำไปแล้วได้หรือไม่

หลังจากการสร้างการจู่โจมอีกครั้งฉันรัน fsck.ext4 / dev / md0 และนี่คือผลลัพธ์

root @ tanserv: / etc / mdadm # fsck.ext4 / dev / md0 e2fsck 1.41.14 (22 ธันวาคม, 2010) fsck.ext4: Superblock ไม่ถูกต้องลองบล็อกสำรอง ... fsck.ext4: หมายเลขเวทย์มนตร์แย่มากใน super- บล็อกในขณะที่พยายามเปิด / dev / md0

ไม่สามารถอ่านซุปเปอร์บล็อกหรือไม่อธิบายระบบไฟล์ ext2 ที่ถูกต้อง หากอุปกรณ์นั้นถูกต้องและมีระบบไฟล์ ext2 จริงๆ (และไม่ใช่ swap หรือ ufs หรืออย่างอื่น) ซุปเปอร์บล็อกนั้นเสียหายและคุณอาจลองใช้ e2fsck ด้วย superblock สำรอง: e2fsck -b 8193


ฉันได้ลองทำตามคำแนะนำของ Shanes แล้ว

root@tanserv:/home/mushegh# mkfs.ext4 -n /dev/md0
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
122101760 inodes, 488379392 blocks
24418969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848

และเรียกใช้ fsck.ext4 พร้อมกับทุกบล็อกสำรอง แต่ทั้งหมดกลับมาดังต่อไปนี้:

root@tanserv:/home/mushegh# fsck.ext4 -b 214990848 /dev/md0
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Invalid argument while trying to open /dev/md0

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

ข้อเสนอแนะใด ๆ

ความนับถือ!


1
บางทีวันหนึ่งคนอาจรู้ว่าทำไม RAID5 เป็นความคิดที่แย่ ก่อนหน้านั้น 1) คนจะสูญเสียข้อมูล 2) เราจะได้รับคำถามเช่นนี้
Tom O'Connor

11
@Tom O'Connor ... เพราะเห็นได้ชัดว่า RAID5 เป็นโทษสำหรับข้อผิดพลาดของผู้ใช้ : rolleyes:
Reality Extractor

2
หวังว่าคำตอบของ Shane สามารถบันทึกข้อมูลได้ แต่พิสูจน์ได้ว่าทำไม RAID เพียงอย่างเดียวจึงไม่ดีที่สุดสำหรับการจัดเก็บ ต้องการการสำรองข้อมูลด้วย (แต่ +1 สำหรับคำถามและคำตอบมหากาพย์ที่ให้
ผลลัพธ์

4
ฉันรู้ว่ามันได้รับซ้ำบ่อย แต่การโจมตีไม่ได้เป็นโซลูชั่นการสำรองข้อมูล ข้อความต้องการการขับรถกลับบ้านจริงๆ
Sirex

คำตอบ:


89

ตกลง - มีบางสิ่งที่ดักฟังฉันเกี่ยวกับปัญหาของคุณดังนั้นฉันจึงสั่งให้ VM ทำงานในลักษณะที่คาดว่าจะเกิดขึ้น ฉันจะไปที่สิ่งที่กำลังดักฉันในนาที; ก่อนอื่นให้ฉันพูดสิ่งนี้:

สำรองข้อมูลไดรฟ์เหล่านี้ก่อนที่จะพยายามทำสิ่งใด !!

คุณอาจได้รับความเสียหายเกินกว่าที่ resync ทำแล้ว คุณช่วยอธิบายสิ่งที่คุณหมายถึงเมื่อคุณพูดว่า:

ตามคำแนะนำฉันทำความสะอาดซุปเปอร์บล็อกและสร้างอาร์เรย์ใหม่อีกครั้งด้วยตัวเลือก - สมมติว่าสะอาด แต่ไม่มีโชคเลย

หากคุณขับรถmdadm --misc --zero-superblockจากนั้นคุณควรจะปรับ

อย่างไรก็ตามพยายามไล่ดิสก์ใหม่และดึงภาพปัจจุบันของพวกเขาออกมาก่อนที่จะทำอะไรก็ได้ที่อาจจะเขียนลงดิสก์เหล่านี้อีก

dd if=/dev/sdd of=/path/to/store/sdd.img

ที่ถูกกล่าวว่า .. ดูเหมือนว่าข้อมูลที่เก็บไว้ในสิ่งเหล่านี้มีความยืดหยุ่นอย่างน่าตกใจที่จะ resyncs เอาแต่ใจ อ่านต่อมีความหวังและนี่อาจเป็นวันที่ฉันได้คำตอบยาวถึงขีด จำกัด


สถานการณ์กรณีที่ดีที่สุด

ฉันได้รวม VM เพื่อสร้างสถานการณ์ของคุณใหม่ ไดรฟ์มีขนาดเพียง 100 MB ดังนั้นฉันจะไม่รอตลอดไปในการซิงค์ซ้ำแต่ละครั้ง

สร้างอาเรย์เป็นค่าเริ่มต้นและเป็นไปได้ - ชิ้นส่วนขนาด 512k, รูปแบบซ้าย - สมมาตร, ดิสก์ตามลำดับตัวอักษร .. ไม่มีอะไรพิเศษ

root@test:~# mdadm --create /dev/md0 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      203776 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

จนถึงตอนนี้ดีมาก; มาสร้างระบบไฟล์กันแล้วใส่ข้อมูลลงไป

root@test:~# mkfs.ext4 /dev/md0
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=512 blocks, Stripe width=1024 blocks
51000 inodes, 203776 blocks
10188 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@test:~# mkdir /mnt/raid5
root@test:~# mount /dev/md0 /mnt/raid5
root@test:~# echo "data" > /mnt/raid5/datafile
root@test:~# dd if=/dev/urandom of=/mnt/raid5/randomdata count=10000
10000+0 records in
10000+0 records out
5120000 bytes (5.1 MB) copied, 0.706526 s, 7.2 MB/s
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

ตกลง. เรามีระบบไฟล์และข้อมูลบางส่วน ("ข้อมูล" ในdatafileและข้อมูลสุ่ม 5MB ที่มีการแฮช SHA1 นั้นrandomdata) มาดูกันว่าเกิดอะไรขึ้นเมื่อเราสร้างใหม่

root@test:~# umount /mnt/raid5
root@test:~# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 21:07:06 2012
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 21:07:06 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 21:07:06 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdd1[2] sdc1[1] sdb1[0]
      203776 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

การซิงค์เสร็จสิ้นอย่างรวดเร็วด้วยดิสก์ขนาดเล็กเหล่านี้ แต่เกิดขึ้นได้ ดังนั้นนี่คือสิ่งที่ดักฉันตั้งแต่ก่อน; fdisk -lผลลัพธ์ของคุณ ไม่มีตารางพาร์ติชันบนmdอุปกรณ์ไม่มีปัญหาเลยคาดว่า ระบบไฟล์ของคุณอยู่บนอุปกรณ์ป้องกันปลอมโดยไม่มีตารางพาร์ติชั่น

root@test:~# fdisk -l
...
Disk /dev/md1: 208 MB, 208666624 bytes
2 heads, 4 sectors/track, 50944 cylinders, total 407552 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000

Disk /dev/md1 doesn't contain a valid partition table

ใช่ไม่มีตารางพาร์ติชัน แต่...

root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
/dev/md1: clean, 12/51000 files, 12085/203776 blocks

ระบบไฟล์ที่สมบูรณ์แบบหลังจาก resync นั่นเป็นสิ่งที่ดี ตรวจสอบไฟล์ข้อมูลของเรา:

root@test:~# mount /dev/md1 /mnt/raid5/
root@test:~# cat /mnt/raid5/datafile
data
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

แข็ง - ไม่มีข้อมูลเสียหายเลย! แต่นี่เป็นการตั้งค่าเดียวกันแน่นอนดังนั้นจึงไม่มีสิ่งใดถูกแมปแตกต่างกันระหว่างกลุ่ม RAID สองกลุ่ม ปล่อยสิ่งนี้ลงก่อนที่เราจะพยายามทำลายมัน

root@test:~# umount /mnt/raid5
root@test:~# mdadm --stop /dev/md1

ก้าวถอยหลัง

ก่อนที่เราจะพยายามทำสิ่งนี้ลองมาพูดกันก่อนว่าทำไมมันถึงแตกยาก RAID 5 ทำงานโดยใช้ parity block ที่ปกป้องพื้นที่ที่มีขนาดเท่ากับบล็อกในดิสก์อื่น ๆ ในอาเรย์ ความเท่าเทียมกันไม่ได้อยู่ในดิสก์เฉพาะเพียงแผ่นเดียวเท่านั้น แต่มันหมุนรอบดิสก์อย่างสม่ำเสมอเพื่อให้โหลดการอ่านที่ดีกว่าทั่วดิสก์ในการทำงานปกติ

การดำเนินการ XOR เพื่อคำนวณพาริตีมีลักษณะดังนี้:

DISK1  DISK2  DISK3  DISK4  PARITY
1      0      1      1    = 1
0      0      1      1    = 0
1      1      1      1    = 0

ดังนั้นความเท่าเทียมกันจะกระจายออกไปในหมู่ดิสก์

DISK1  DISK2  DISK3  DISK4  DISK5
DATA   DATA   DATA   DATA   PARITY
PARITY DATA   DATA   DATA   DATA
DATA   PARITY DATA   DATA   DATA

โดยทั่วไป resync จะทำเมื่อเปลี่ยนดิสก์ที่ตายหรือหายไป นอกจากนี้ยังทำmdadm createเพื่อรับรองว่าข้อมูลบนดิสก์สอดคล้องกับสิ่งที่รูปทรงเรขาคณิตของ RAID ควรมีลักษณะ ในกรณีนั้นดิสก์สุดท้ายในข้อมูลจำเพาะของอาเรย์คือดิสก์ที่ 'ซิงค์กับ' - ข้อมูลทั้งหมดที่มีอยู่ในดิสก์อื่นนั้นจะถูกใช้สำหรับการซิงค์

ดังนั้นข้อมูลทั้งหมดในดิสก์ 'ใหม่' จะถูกลบออกและสร้างใหม่ ไม่ว่าจะเป็นการสร้างบล็อคข้อมูลใหม่จากบล็อกพาริตีสำหรับสิ่งที่ควรมีหรือไม่ก็สร้างบล็อกแพริตีใหม่

สิ่งที่เจ๋งคือกระบวนการของทั้งสองอย่างนั้นเหมือนกันนั่นคือการดำเนินการของแฮคเกอร์ในข้อมูลจากดิสก์ส่วนที่เหลือ กระบวนการ resync ในกรณีนี้อาจมีในรูปแบบที่บล็อกบางบล็อกควรเป็นพาริตีและคิดว่ามันกำลังสร้างบล็อกพาริตีใหม่ซึ่งอันที่จริงแล้วมันกำลังสร้างบล็อกข้อมูลเก่าขึ้นใหม่ ดังนั้นแม้ว่าจะคิดว่ามันกำลังสร้างสิ่งนี้:

DISK1  DISK2  DISK3  DISK4  DISK5
PARITY DATA   DATA   DATA   DATA
DATA   PARITY DATA   DATA   DATA
DATA   DATA   PARITY DATA   DATA

... มันอาจจะสร้างใหม่DISK5จากเค้าโครงด้านบน

ดังนั้นจึงเป็นไปได้ที่ข้อมูลจะมีความสอดคล้องกันแม้ว่าอาเรย์จะสร้างผิด


โยนลิงในผลงาน

(ไม่ใช่ประแจ; ลิงทั้งหมด)

ทดสอบ 1:

มาจัดเรียงลำดับผิดกัน! sdcจากsddนั้นก็sdb..

root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sdb1
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:06:34 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:06:34 2012
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:06:34 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdb1[3] sdd1[1] sdc1[0]
      203776 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

ตกลงนั่นคือทั้งหมดที่ดีและดี เรามีระบบไฟล์หรือไม่?

root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Superblock invalid, trying backup blocks...
fsck.ext4: Bad magic number in super-block while trying to open /dev/md1

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

Nope! ทำไมถึงเป็นอย่างนั้น? เพราะในขณะที่ข้อมูลมีอยู่ทั้งหมดมันอยู่ในลำดับที่ไม่ถูกต้อง สิ่งที่ครั้งหนึ่งเคยเป็น 512KB ของ A จากนั้น 512KB ของ B, A, B และอื่น ๆ ตอนนี้ถูกสับเปลี่ยนเป็น B, A, B, A ตอนนี้ดิสก์ดูเหมือนจะพูดพล่อยๆกับตัวตรวจสอบระบบแฟ้มมันจะไม่ทำงาน ผลลัพธ์ของการmdadm --misc -D /dev/md1ให้รายละเอียดเพิ่มเติมแก่เรา ดูเหมือนว่านี้:

Number   Major   Minor   RaidDevice State
   0       8       33        0      active sync   /dev/sdc1
   1       8       49        1      active sync   /dev/sdd1
   3       8       17        2      active sync   /dev/sdb1

เมื่อควรมีลักษณะเช่นนี้:

Number   Major   Minor   RaidDevice State
   0       8       17        0      active sync   /dev/sdb1
   1       8       33        1      active sync   /dev/sdc1
   3       8       49        2      active sync   /dev/sdd1

นั่นคือทั้งหมดที่ดีและดี เราเขียนทับกลุ่มข้อมูลทั้งหมดด้วยบล็อกพาริตี้ใหม่หมดเวลานี้ สร้างใหม่ด้วยลำดับที่ถูกต้องตอนนี้:

root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:11:08 2012
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:11:08 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:11:08 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
/dev/md1: clean, 12/51000 files, 12085/203776 blocks

เรียบร้อยยังมีระบบไฟล์อยู่ที่นั่น! ยังมีข้อมูลอยู่ไหม

root@test:~# mount /dev/md1 /mnt/raid5/
root@test:~# cat /mnt/raid5/datafile
data
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

ที่ประสบความสำเร็จ!

ทดสอบ 2

ตกลงเปลี่ยนขนาดก้อนแล้วดูว่ามันทำให้เราแตกหรือเปล่า

root@test:~# umount /mnt/raid5
root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --create /dev/md1 --chunk=64 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:21:19 2012
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:21:19 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:21:19 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Superblock invalid, trying backup blocks...
fsck.ext4: Bad magic number in super-block while trying to open /dev/md1

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

ใช่มันถูก hosed เมื่อตั้งค่าเช่นนี้ แต่เราสามารถกู้คืนได้หรือไม่

root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:21:51 2012
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:21:51 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:21:51 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
/dev/md1: clean, 12/51000 files, 12085/203776 blocks
root@test:~# mount /dev/md1 /mnt/raid5/
root@test:~# cat /mnt/raid5/datafile
data
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

สำเร็จอีกครั้ง!

ทดสอบ 3

นี่คือสิ่งที่ฉันคิดว่าจะฆ่าข้อมูลอย่างแน่นอน - ลองทำอัลกอริทึมเค้าโครงที่แตกต่างกัน!

root@test:~# umount /mnt/raid5
root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --layout=right-asymmetric --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:32:34 2012
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:32:34 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:32:34 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      203776 blocks super 1.2 level 5, 512k chunk, algorithm 1 [3/3] [UUU]

unused devices: <none>
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Superblock invalid, trying backup blocks...
Superblock has an invalid journal (inode 8).

น่ากลัวและไม่ดี - คิดว่าพบบางสิ่งและต้องการแก้ไขบางอย่าง! Ctrl+ C!

Clear<y>? cancelled!

fsck.ext4: Illegal inode number while checking ext3 journal for /dev/md1

ตกลงวิกฤตหันไป มาดูกันว่าข้อมูลยังคงไม่เปลี่ยนแปลงหลังจากทำการซิงโครไนซ์กับเค้าโครงที่ไม่ถูกต้องหรือไม่:

root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:33:02 2012
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:33:02 2012
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Sat Jan  7 23:33:02 2012
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
/dev/md1: clean, 12/51000 files, 12085/203776 blocks
root@test:~# mount /dev/md1 /mnt/raid5/
root@test:~# cat /mnt/raid5/datafile
data
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

ที่ประสบความสำเร็จ!

ทดสอบ 4

เราก็แค่พิสูจน์ว่า superblock zeroing นั้นไม่อันตรายจริง ๆ อย่างรวดเร็ว:

root@test:~# umount /mnt/raid5
root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
/dev/md1: clean, 12/51000 files, 12085/203776 blocks
root@test:~# mount /dev/md1 /mnt/raid5/
root@test:~# cat /mnt/raid5/datafile
data
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

ใช่ไม่ใช่เรื่องใหญ่

ทดสอบ 5

เราแค่โยนทุกอย่างที่เรามี การทดสอบก่อนหน้าทั้งหมด 4 รายการรวมกัน

  • คำสั่งซื้ออุปกรณ์ผิด
  • ขนาดอันไม่ถูกต้อง
  • อัลกอริทึมเค้าโครงที่ไม่ถูกต้อง
  • ศูนย์ซุปเปอร์บล็อก (เราจะทำสิ่งนี้ระหว่างการสร้างสรรค์ทั้งสอง)

ต่อไปข้างหน้า!

root@test:~# umount /mnt/raid5
root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@test:~# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1
root@test:~# mdadm --create /dev/md1 --chunk=64 --level=5 --raid-devices=3 --layout=right-symmetric /dev/sdc1 /dev/sdd1 /dev/sdb1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdb1[3] sdd1[1] sdc1[0]
      204672 blocks super 1.2 level 5, 64k chunk, algorithm 3 [3/3] [UUU]

unused devices: <none>
root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Superblock invalid, trying backup blocks...
fsck.ext4: Bad magic number in super-block while trying to open /dev/md1

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
root@test:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1

คำตัดสินของศาล?

root@test:~# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1
root@test:~# mdadm --create /dev/md1 --chunk=512 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@test:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      203776 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

root@test:~# fsck.ext4 /dev/md1
e2fsck 1.41.14 (22-Dec-2010)
/dev/md1: clean, 13/51000 files, 17085/203776 blocks
root@test:~# mount /dev/md1 /mnt/raid5/
root@test:~# cat /mnt/raid5/datafile
data
root@test:~# sha1sum /mnt/raid5/randomdata
847685a5d42524e5b1d5484452a649e854b59064  /mnt/raid5/randomdata

ว้าว.

ดังนั้นดูเหมือนว่าไม่มีการดำเนินการใด ๆ ที่ทำให้ข้อมูลเสียหาย แต่อย่างใด ฉันค่อนข้างประหลาดใจกับผลลัพธ์นี้ตรงไปตรงมา; ฉันคาดว่าอัตราการสูญเสียข้อมูลในระดับปานกลางจากการเปลี่ยนแปลงขนาดของก้อนและการสูญเสียที่แน่นอนในการเปลี่ยนเค้าโครง ฉันเรียนรู้บางอย่างในวันนี้


ดังนั้น .. ฉันจะรับข้อมูลของฉันได้อย่างไร?

ข้อมูลเท่าที่คุณมีเกี่ยวกับระบบเก่าจะเป็นประโยชน์อย่างยิ่งสำหรับคุณ หากคุณทราบประเภทระบบไฟล์หากคุณมีสำเนาเก่าของคุณ/proc/mdstatพร้อมข้อมูลเกี่ยวกับลำดับของไดรฟ์อัลกอริทึมขนาดก้อนและรุ่นข้อมูลเมตา คุณมีการตั้งค่าการแจ้งเตือนอีเมลของ mdadm หรือไม่? ถ้าเป็นเช่นนั้นหาคนเก่า; /var/spool/mail/rootถ้าไม่ตรวจสอบ ตรวจสอบ~/.bash_historyเพื่อดูว่างานสร้างเดิมของคุณอยู่ในนั้นหรือไม่

ดังนั้นรายการสิ่งที่คุณควรทำ:

  1. สำรองดิสก์ด้วยddก่อนทำอะไร !!
  2. ลองfsckใช้ md ที่ใช้งานอยู่ในปัจจุบัน - คุณอาจเกิดขึ้นเพื่อสร้างในลำดับเดียวกันกับเมื่อก่อน หากคุณรู้ว่าระบบไฟล์เป็นประโยชน์ ใช้fsckเครื่องมือเฉพาะนั้น หากเครื่องมือตัวใดตัวหนึ่งเสนอให้แก้ไขสิ่งใดอย่าปล่อยให้พวกเขาเว้นแต่คุณจะแน่ใจว่าพวกเขาได้พบระบบไฟล์ที่ถูกต้องจริง ๆ ! หากfsckข้อเสนอเพื่อแก้ไขบางสิ่งบางอย่างสำหรับคุณอย่าลังเลที่จะแสดงความคิดเห็นเพื่อถามว่าจริง ๆ แล้วมันกำลังช่วยเหลือหรือกำลังจะทำการดักฟังข้อมูล
  3. ลองสร้างอาร์เรย์ด้วยพารามิเตอร์ที่แตกต่างกัน หากคุณมีแก่/proc/mdstatแล้วคุณก็สามารถเลียนแบบสิ่งที่มันแสดง; ถ้าไม่เช่นนั้นคุณก็จะต้องอยู่ในความมืด - การลองคำสั่งไดรฟ์ที่แตกต่างกันทั้งหมดนั้นสมเหตุสมผล สำหรับแต่ละfsckเพื่อดูว่าคุณจะได้รับสิ่งที่มีแนวโน้ม

นั่นคือสิ่งที่ ขออภัยในนวนิยายโปรดแสดงความคิดเห็นหากคุณมีคำถามใด ๆ และขอให้โชคดี!

เชิงอรรถ: ต่ำกว่า 22,000 ตัวอักษร; 8k + อายของการจำกัดความยาว


8
นั่นคือหนึ่งคำตอบที่น่าอัศจรรย์
Antoine Benkemoun

3
ฉันไม่รู้ด้วยซ้ำว่าจะพูดอะไร ... BRAVO !!! รุ่งโรจน์ไปยังเชนหัวเสีย ฉันจะสำรองดิสก์และเริ่มต้นด้วยคำแนะนำของคุณ ขอบคุณไม่ขอบคุณมากจริงๆ !!!
Brigadieren

3
ฉันแค่ ... ว้าว คำตอบที่ยอดเยี่ยม ฉันคิดว่าคำตอบเดียวที่จะทำลายขีด จำกัด ของตัวละคร 30,000 ตัวคือ Evan Andersons เรียงความเรื่อง "Subnetting Work" อย่างไร
tombull89

3
คำตอบที่ดีที่สุดเกี่ยวกับ SF เท่าที่ฉันกังวล
Chopper3

14
คุณครับชนะอินเทอร์เน็ต
มาร์คเฮนเดอร์สัน

5

หากคุณโชคดีคุณอาจประสบความสำเร็จในการนำไฟล์ของคุณกลับมาพร้อมกับซอฟต์แวร์กู้คืนที่สามารถอ่านอาร์เรย์ RAID-5 ที่เสียหาย Zero Assumption Recoveryเป็นสิ่งที่ฉันเคยประสบความสำเร็จมาก่อน

อย่างไรก็ตามฉันไม่แน่ใจว่ากระบวนการสร้างอาร์เรย์ใหม่หายไปและทำลายข้อมูลทั้งหมดหรือไม่ดังนั้นนี่อาจเป็นความพยายามครั้งสุดท้าย


ขอบคุณมากมาร์ค ฉันจะลองดู คุณรู้หรือไม่ว่ามันปรับเปลี่ยนไดรฟ์? ถ้าเป็นเช่นนั้นฉันจะทำสำเนาดิสก์และลองใช้เครื่องมืออื่น ๆ
Brigadieren

@Brigadieren - ไม่ขอโทษฉันไม่คุ้นเคยกับความซับซ้อนของการทำงานของ RAID5
Mark Henderson

@Brigadieren ตามเอกสาร mdadmกระบวนการสร้างจะไม่ทำลายข้อมูลเพียงแค่ resync - แต่ถ้าเลือกรูปทรงเรขาคณิตที่ไม่ตรงกับต้นฉบับของคุณมันอาจทำลายข้อมูลด้วยการเขียนพาริตี้ใหม่ ถ้าฉันมีเวลาว่างในภายหลังฉันอาจเห็นเกี่ยวกับการสร้างสถานการณ์ของคุณใหม่ใน VM เพื่อดูว่าฉันสามารถเพิ่มความเข้าใจด้านใด ๆ ฉันขอแนะนำให้คุณคว้าสำเนาทั้งหมดของไดรฟ์ก่อนที่จะลองทำตามขั้นตอนการกู้คืนใด ๆ ที่เขียนไปยังดิสก์เลย - คุณอาจต้องการหาไดรฟ์พิเศษเพื่อทำสำเนา
เชนแมดเดน

ฉันไม่แน่ใจว่าสิ่งใดที่ทำให้เกิดการซิงค์ความจริงที่ว่าอาร์เรย์นั้นเสื่อมโทรมตั้งแต่แรก (เนื่องจากไฟดับ) หรืออย่างอื่น ฉันสงสัยว่า mdadm - สร้างความแตกต่างใด ๆ ไม่ว่าฉันจะระบุลำดับของไดรฟ์ที่แตกต่างจากที่ระบุไว้ในตอนแรกหรือไม่?
Brigadieren

@Brigadieren Sync เกิดขึ้นกับการสร้างเสมอ
เชนแมดเดน

5

ฉันมีปัญหาที่คล้ายกัน:
หลังจากความล้มเหลวของซอฟต์แวร์ RAID5 array ที่ฉันใช้mdadm --createโดยไม่ให้มัน--assume-cleanและไม่สามารถติดตั้งอาร์เรย์อีกต่อไป หลังจากขุดสองสัปดาห์ในที่สุดฉันก็กู้คืนข้อมูลทั้งหมด ฉันหวังว่าขั้นตอนด้านล่างจะช่วยประหยัดเวลาของใครบางคน

เรื่องยาวสั้น

ปัญหาเกิดจากข้อเท็จจริงที่mdadm --createสร้างอาร์เรย์ใหม่ที่แตกต่างจากต้นฉบับในสองด้าน:

  • ลำดับของพาร์ติชันที่แตกต่างกัน
  • อ็อฟเซ็ตข้อมูล RAID ที่แตกต่างกัน

ในขณะที่มันได้รับการแสดงในที่ยอดเยี่ยมคำตอบโดยเชน Madden , mdadm --createไม่ทำลายข้อมูลในกรณีส่วนใหญ่! หลังจากหาลำดับพาร์ติชั่นและออฟเซ็ตข้อมูลฉันสามารถกู้คืนอาร์เรย์และแยกข้อมูลทั้งหมดจากมัน

ข้อกำหนดเบื้องต้น

ฉันไม่มีการสำรองข้อมูลของ RAID superblocks ดังนั้นสิ่งที่ฉันรู้ก็คืออาร์เรย์ RAID5 ใน 8 พาร์ติชันที่สร้างขึ้นระหว่างการติดตั้ง Xubuntu 12.04.0 มันมีระบบไฟล์ ext4 ความรู้ที่สำคัญอีกอย่างหนึ่งคือสำเนาของไฟล์ที่เก็บไว้ในอาเรย์ RAID

เครื่องมือ

Xubuntu 12.04.1 ไลฟ์ซีดีถูกใช้เพื่อทำงานทั้งหมด ขึ้นอยู่กับสถานการณ์ของคุณคุณอาจต้องการเครื่องมือต่อไปนี้:

รุ่นของ mdadm ที่อนุญาตให้ระบุ data offset

sudo apt-get install binutils-dev git
git clone -b data_offset git://neil.brown.name/mdadm
cd mdadm
make

bgrep - ค้นหาข้อมูลไบนารี

curl -L 'https://github.com/tmbinc/bgrep/raw/master/bgrep.c' | gcc -O2 -x c -o bgrep -

hexdump, e2fsck, mount และเครื่องคิดเลขฐานสิบหก - เครื่องมือมาตรฐานจาก repos

เริ่มด้วยการสำรองข้อมูลทั้งหมด

การตั้งชื่อไฟล์อุปกรณ์/dev/sda2 /dev/sdb2ฯลฯ ไม่คงอยู่ดังนั้นควรเขียนหมายเลขซีเรียลของไดรฟ์ของคุณไว้

sudo hdparm -I /dev/sda

จากนั้นเชื่อมต่อ HDD ภายนอกแล้วสำรองข้อมูลทุกพาร์ติชันของอาร์เรย์ RAID ของคุณดังนี้:

sudo dd if=/dev/sda2 bs=4M | gzip > serial-number.gz

กำหนดเค้าโครง RAID5 ดั้งเดิม

เลย์เอาต์ต่างๆมีการอธิบายไว้ที่นี่: http://www.accs.com/p_and_p/RAID/LinuxRAID.html
หากต้องการค้นหาวิธีจัดเรียงแถบข้อมูลในอาร์เรย์เดิมคุณต้องคัดลอกไฟล์ที่ดูสุ่มซึ่งคุณรู้ว่าเป็น เก็บไว้ในอาร์เรย์ ขนาดก้อนเริ่มต้นที่ใช้ในปัจจุบันmdadmคือ 512KB สำหรับอาร์เรย์ของพาร์ติชัน N คุณต้องมีไฟล์ที่มีขนาดอย่างน้อย (N + 1) * 512KB jpeg หรือวิดีโอนั้นดีเพราะมันให้ substrings ที่ค่อนข้างพิเศษของข้อมูลไบนารี่ picture.jpgสมมติว่าไฟล์ที่เราเรียกว่า เราอ่านข้อมูล 32 ไบต์ที่ตำแหน่ง N + 1 เริ่มต้นที่ 100k และเพิ่มขึ้น 512k:

hexdump -n32 -s100k -v -e '/1 "%02X"' picture.jpg ; echo
DA1DC4D616B1C71079624CDC36E3D40E7B1CFF00857C663687B6C4464D6C77D2
hexdump -n32 -s612k -v -e '/1 "%02X"' picture.jpg ; echo
AB9DDDBBB05CA915EE2289E59A116B02A26C82C8A8033DD8FA6D06A84B6501B7
hexdump -n32 -s1124k -v -e '/1 "%02X"' picture.jpg ; echo
BC31A8DC791ACDA4FA3E9D3406D5639619576AEE2E08C03C9EF5E23F0A7C5CBA
...

จากนั้นเราจะค้นหาการทดสอบเหล่านี้ทั้งหมดในพาร์ติชั่นดิบของเราดังนั้นในคำสั่งทั้งหมด (N + 1) * N เช่นนี้:

sudo ./bgrep DA1DC4D616B1C71079624CDC36E3D40E7B1CFF00857C663687B6C4464D6C77D2 /dev/sda2
sudo ./bgrep DA1DC4D616B1C71079624CDC36E3D40E7B1CFF00857C663687B6C4464D6C77D2 /dev/sdb2
...
sudo ./bgrep DA1DC4D616B1C71079624CDC36E3D40E7B1CFF00857C663687B6C4464D6C77D2 /dev/sdh2
/dev/sdh2: 52a7ff000
sudo ./bgrep AB9DDDBBB05CA915EE2289E59A116B02A26C82C8A8033DD8FA6D06A84B6501B7 /dev/sda2
/dev/sdb2: 52a87f000
...

คำสั่งเหล่านี้สามารถทำงานแบบขนานสำหรับดิสก์ที่แตกต่างกัน การสแกนพาร์ติชั่น 38GB ใช้เวลาประมาณ 12 นาที ในกรณีของฉันพบสตริง 32- ไบต์ทุกตัวเพียงครั้งเดียวในบรรดาไดรฟ์ทั้งแปด โดยการเปรียบเทียบออฟเซ็ตที่ส่งคืนโดย bgrep คุณจะได้รับภาพดังนี้:

| offset \ partition | b | d | c | e | f | g | a | h |
|--------------------+---+---+---+---+---+---+---+---|
| 52a7ff000          | P |   |   |   |   |   |   | 1 |
| 52a87f000          | 2 | 3 | 4 | 5 | 6 | 7 | 8 | P |
| 52a8ff000          |   |   |   |   |   |   | P | 9 |

เรามาดูกันปกติซ้ายสมมาตรmdadmรูปแบบซึ่งเป็นค่าเริ่มต้นสำหรับ ที่สำคัญตอนนี้เรารู้ลำดับของพาร์ติชันแล้ว อย่างไรก็ตามเราไม่ทราบว่าพาร์ติชั่นใดเป็นอันดับแรกในอาเรย์

โปรดทราบระยะห่างระหว่างออฟเซ็ตที่พบ ในกรณีของฉันมันคือ 512KB ขนาดอันที่จริงอาจมีขนาดเล็กกว่าระยะนี้ในกรณีนี้รูปแบบที่แท้จริงจะแตกต่างกัน

ค้นหาขนาดก้อนดั้งเดิม

เราใช้ไฟล์เดียวกันpicture.jpgเพื่ออ่านข้อมูล 32 ไบต์ตามช่วงเวลาที่แตกต่างกัน เรารู้จากข้างต้นว่าข้อมูลที่ 100k ชดเชยกำลังนอนอยู่บน/dev/sdh2ที่ชดเชย 612k ที่/dev/sdb2และ 1124k /dev/sdd2ที่ นี่แสดงว่าขนาดของชิ้นไม่ใหญ่กว่า 512KB เราตรวจสอบว่าไม่น้อยกว่า 512KB สำหรับเรื่องนี้เราถ่ายโอนข้อมูล bytestring ที่ offset 356k และดูว่าพาร์ทิชันนั้นอยู่ที่ใด:

hexdump -n32 -s356k -v -e '/1 "%02X"' P1080801.JPG ; echo
7EC528AD0A8D3E485AE450F88E56D6AEB948FED7E679B04091B031705B6AFA7A
sudo ./bgrep 7EC528AD0A8D3E485AE450F88E56D6AEB948FED7E679B04091B031705B6AFA7A /dev/sdb2
/dev/sdb2: 52a83f000

อยู่ในพาร์ติชันเดียวกันกับออฟเซ็ต 612k ซึ่งระบุว่าขนาดก้อนไม่ใช่ 256KB เรากำจัดก้อนขนาดเล็กลงในแบบเดียวกัน ฉันลงเอยด้วยชิ้น 512KB เป็นความเป็นไปได้เท่านั้น

ค้นหาพาร์ติชันแรกในเค้าโครง

ตอนนี้เรารู้ลำดับของพาร์ติชั่นแล้ว แต่เราไม่ทราบว่าพาร์ติชั่นใดควรเป็นอันดับแรกและใช้ RAID data offset ใด ในการค้นหาสิ่งแปลกปลอมทั้งสองนี้เราจะสร้างอาร์เรย์ RAID5 ที่มีโครงร่างอันถูกต้องและออฟเซ็ตข้อมูลขนาดเล็กและค้นหาจุดเริ่มต้นของระบบไฟล์ของเราในอาร์เรย์ใหม่นี้

ในการเริ่มต้นเราสร้างอาร์เรย์ด้วยลำดับที่ถูกต้องของพาร์ติชันซึ่งเราพบก่อนหน้านี้:

sudo mdadm --stop /dev/md126
sudo mdadm --create /dev/md126 --assume-clean --raid-devices=8 --level=5  /dev/sdb2 /dev/sdd2 /dev/sdc2 /dev/sde2 /dev/sdf2 /dev/sdg2 /dev/sda2 /dev/sdh2

เราตรวจสอบว่าคำสั่งนั้นปฏิบัติตามโดยการออก

sudo mdadm --misc -D /dev/md126
...
Number   Major   Minor   RaidDevice State
   0       8       18        0      active sync   /dev/sdb2
   1       8       50        1      active sync   /dev/sdd2
   2       8       34        2      active sync   /dev/sdc2
   3       8       66        3      active sync   /dev/sde2
   4       8       82        4      active sync   /dev/sdf2
   5       8       98        5      active sync   /dev/sdg2
   6       8        2        6      active sync   /dev/sda2
   7       8      114        7      active sync   /dev/sdh2

ตอนนี้เราพิจารณาการหักล้างของการทดสอบ N + 1 ที่รู้จักกันในอาร์เรย์ RAID ฉันเรียกใช้สคริปต์หนึ่งคืน (Live CD ไม่ขอรหัสผ่านใน sudo :):

#!/bin/bash
echo "1st:"
sudo ./bgrep DA1DC4D616B1C71079624CDC36E3D40E7B1CFF00857C663687B6C4464D6C77D2 /dev/md126
echo "2nd:"
sudo ./bgrep AB9DDDBBB05CA915EE2289E59A116B02A26C82C8A8033DD8FA6D06A84B6501B7 /dev/md126
echo "3rd:"
sudo ./bgrep BC31A8DC791ACDA4FA3E9D3406D5639619576AEE2E08C03C9EF5E23F0A7C5CBA /dev/md126
...
echo "9th:"
sudo ./bgrep 99B5A96F21BB74D4A630C519B463954EC096E062B0F5E325FE8D731C6D1B4D37 /dev/md126

เอาท์พุทที่มีความคิดเห็น:

1st:
/dev/md126: 2428fff000 # 1st
2nd:
/dev/md126: 242947f000 # 480000 after 1st
3rd:                   # 3rd not found
4th:
/dev/md126: 242917f000 # 180000 after 1st
5th:
/dev/md126: 24291ff000 # 200000 after 1st
6th:
/dev/md126: 242927f000 # 280000 after 1st
7th:
/dev/md126: 24292ff000 # 300000 after 1st
8th:
/dev/md126: 242937f000 # 380000 after 1st
9th:
/dev/md126: 24297ff000 # 800000 after 1st

จากข้อมูลนี้เราจะเห็นว่าไม่พบสตริงที่ 3 ซึ่งหมายความว่าอันที่/dev/sdd2ใช้สำหรับความเท่าเทียมกัน นี่คือภาพประกอบของตำแหน่งพาริตี้ในอาร์เรย์ใหม่:

| offset \ partition | b | d | c | e | f | g | a | h |
|--------------------+---+---+---+---+---+---+---+---|
| 52a7ff000          |   |   | P |   |   |   |   | 1 |
| 52a87f000          | 2 | P | 4 | 5 | 6 | 7 | 8 |   |
| 52a8ff000          | P |   |   |   |   |   |   | 9 |

เป้าหมายของเราคือการอนุมานว่าพาร์ทิชันใดที่จะเริ่มต้นอาร์เรย์จากนั้นจึงเปลี่ยนพาริตี้ชิ้นเป็นสถานที่ที่เหมาะสม เนื่องจากพาริตี้ควรเลื่อนสองชิ้นไปทางซ้ายลำดับของพาร์ติชันควรเลื่อนไปสองขั้นตอนไปทางขวา ดังนั้นรูปแบบที่ถูกต้องสำหรับการชดเชยข้อมูลนี้คือahbdcefg:

sudo mdadm --stop /dev/md126
sudo mdadm --create /dev/md126 --assume-clean --raid-devices=8 --level=5  /dev/sda2 /dev/sdh2 /dev/sdb2 /dev/sdd2 /dev/sdc2 /dev/sde2 /dev/sdf2 /dev/sdg2 

ณ จุดนี้อาร์เรย์ RAID ของเรามีข้อมูลในรูปแบบที่ถูกต้อง คุณอาจโชคดีที่ออฟเซ็ตข้อมูล RAID เหมือนกับที่อยู่ในอาร์เรย์เดิมและจากนั้นคุณจะสามารถเมาท์พาร์ติชันได้ น่าเสียดายที่นี่ไม่ใช่กรณีของฉัน

ตรวจสอบความสอดคล้องของข้อมูล

เราตรวจสอบว่าข้อมูลมีความสอดคล้องกับแถบชิ้นโดยแยกสำเนาpicture.jpgจากอาร์เรย์ สำหรับสิ่งนี้เราหาออฟเซ็ตสำหรับสตริง 32- ไบต์ที่ 100k:

sudo ./bgrep DA1DC4D616B1C71079624CDC36E3D40E7B1CFF00857C663687B6C4464D6C77D2 /dev/md126

จากนั้นเราจะลบคุณ 100 * 1024 จากผลและใช้ค่าทศนิยมได้รับในพารามิเตอร์skip= คือขนาดของไบต์:ddcount=picture.jpg

sudo dd if=/dev/md126 of=./extract.jpg bs=1 skip=155311300608 count=4536208

ตรวจสอบว่าเป็นเช่นเดียวกับextract.jpgpicture.jpg

ค้นหา RAID Data Offset

sidenote: การชดเชยข้อมูลเริ่มต้นสำหรับmdadmรุ่น 3.2.3 คือ 2048 ส่วน แต่ค่านี้มีการเปลี่ยนแปลงเมื่อเวลาผ่านไป หากอาร์เรย์ดั้งเดิมใช้ข้อมูลขนาดเล็กกว่าออฟเซ็ตปัจจุบันของคุณคุณmdadmจะmdadm --createไม่--assume-cleanสามารถเขียนทับจุดเริ่มต้นของระบบไฟล์ได้

ในส่วนก่อนหน้าเราสร้างอาร์เรย์ RAID ตรวจสอบว่าข้อมูล RAID ใดที่ตรงข้ามกับข้อมูลนั้นโดยการออกพาร์ติชั่นบางตัว:

sudo mdadm --examine /dev/sdb2
...
    Data Offset : 2048 sectors
...

2048 512- ไบต์ส่วนคือ 1MB เนื่องจากขนาดก้อนเป็น 512KB ข้อมูลออฟเซ็ตปัจจุบันจึงเป็นสองชิ้น

หาก ณ จุดนี้คุณมีอ็อฟเซ็ตสองก้อนก็อาจจะเล็กพอและคุณสามารถข้ามย่อหน้านี้ได้
เราสร้างอาร์เรย์ RAID5 ด้วยการชดเชยข้อมูลหนึ่ง 512KB-chunk การเริ่มต้นหนึ่งอันก่อนหน้านี้เลื่อนพาริตีหนึ่งขั้นไปทางซ้ายดังนั้นเราจึงชดเชยโดยเลื่อนลำดับของพาร์ติชันหนึ่งก้าวไปทางซ้าย ดังนั้นสำหรับ 512KB hbdcefgaข้อมูลชดเชยรูปแบบที่ถูกต้องคือ เราใช้รุ่นmdadmที่รองรับการชดเชยข้อมูล (ดูส่วนเครื่องมือ) ใช้เวลาชดเชยเป็นกิโลไบต์:

sudo mdadm --stop /dev/md126
sudo ./mdadm --create /dev/md126 --assume-clean --raid-devices=8 --level=5  /dev/sdh2:512 /dev/sdb2:512 /dev/sdd2:512 /dev/sdc2:512 /dev/sde2:512 /dev/sdf2:512 /dev/sdg2:512 /dev/sda2:512

ตอนนี้เราค้นหาซุปเปอร์บล็อก ext4 ที่ถูกต้อง โครงสร้างซุปเปอร์บล๊อกที่สามารถพบได้ที่นี่: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
เราสแกนจุดเริ่มต้นของอาร์เรย์สำหรับการปรากฏของจำนวนมายากลs_magicตามด้วยและs_state s_errorsการทดสอบเพื่อค้นหาคือ:

53EF01000100
53EF00000100
53EF02000100
53EF01000200
53EF02000200

คำสั่งตัวอย่าง:

sudo ./bgrep 53EF01000100 /dev/md126
/dev/md126: 0dc80438

จำนวนเวทย์มนตร์เริ่มต้นที่ 0x38 ไบต์ในซุปเปอร์บล็อกดังนั้นเราจึงระงับ 0x38 เพื่อคำนวณออฟเซ็ตและตรวจสอบซุปเปอร์บล็อคทั้งหมด:

sudo hexdump -n84 -s0xDC80400 -v /dev/md126
dc80400 2000 00fe 1480 03f8 cdd3 0032 d2b2 0119
dc80410 ab16 00f7 0000 0000 0002 0000 0002 0000
dc80420 8000 0000 8000 0000 2000 0000 b363 51bd
dc80430 e406 5170 010d ffff ef53 0001 0001 0000
dc80440 3d3a 50af 0000 0000 0000 0000 0001 0000
dc80450 0000 0000                              

นี่ดูเหมือนจะเป็น superblock ที่ถูกต้อง s_log_block_sizeฟิลด์ที่ 0x18 คือ 0002 หมายความว่าขนาดบล็อกคือ 2 ^ (10 + 2) = 4096 ไบต์ s_blocks_count_loที่ 0x4 คือ 03f81480 บล็อกซึ่งเป็น 254GB ดูดี.

ตอนนี้เราสแกนหาการเกิดขึ้นของไบต์แรกของ superblock เพื่อค้นหาสำเนา สังเกตการพลิกไบต์เมื่อเปรียบเทียบกับเอาต์พุต hexdump:

sudo ./bgrep 0020fe008014f803d3cd3200 /dev/md126
/dev/md126: 0dc80400    # offset by 1024 bytes from the start of the FS        
/dev/md126: 15c80000    # 32768 blocks from FS start
/dev/md126: 25c80000    # 98304
/dev/md126: 35c80000    # 163840
/dev/md126: 45c80000    # 229376
/dev/md126: 55c80000    # 294912
/dev/md126: d5c80000    # 819200
/dev/md126: e5c80000    # 884736
/dev/md126: 195c80000
/dev/md126: 295c80000

สิ่งนี้สอดคล้องอย่างสมบูรณ์กับตำแหน่งที่คาดหวังของ superblock สำรอง:

sudo mke2fs -n /dev/md126
...
Block size=4096 (log=2)
...
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872

ดังนั้นระบบไฟล์จะเริ่มที่ offset 0xdc80000 เช่น 225792KB จากการเริ่มพาร์ติชั่น เนื่องจากเรามีพาร์ติชั่น 8 ตัวสำหรับพาร์ริตี้เราแบ่งออฟเซ็ตด้วย 7 สิ่งนี้จะให้ออฟเซ็ต 33030144 ไบต์ในทุกพาร์ติชั่นซึ่งเป็นชิ้น RAID 63 ชิ้น และเนื่องจากข้อมูลออฟเซ็ต RAID ปัจจุบันเป็นหนึ่งชิ้นเราจึงสรุปได้ว่าอ็อฟเซ็ตข้อมูลดั้งเดิมคือ 64 ชิ้นหรือ 32768KB การเลื่อนhbdcefgaไปทางขวา 63 ครั้งจะให้เลย์เอาbdcefgahต์

ในที่สุดเราก็สร้างอาร์เรย์ RAID ที่ถูกต้อง:

sudo mdadm --stop /dev/md126
sudo ./mdadm --create /dev/md126 --assume-clean --raid-devices=8 --level=5  /dev/sdb2:32768 /dev/sdd2:32768 /dev/sdc2:32768 /dev/sde2:32768 /dev/sdf2:32768 /dev/sdg2:32768 /dev/sda2:32768 /dev/sdh2:32768
sudo fsck.ext4 -n /dev/md126
e2fsck 1.42 (29-Nov-2011)
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/md126: clean, 423146/16654336 files, 48120270/66589824 blocks
sudo mount -t ext4 -r /dev/md126 /home/xubuntu/mp

Voila!


คำแนะนำที่ยอดเยี่ยม One note - 53EF00000100 ดูเหมือนจะไม่เป็นสมอที่ถูกต้องสำหรับส่วนหัว EXT4 ตามที่ ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Blockสองไบต์หลังจาก 53EF อาจเป็นเพียง 0100, 0200 หรือ 0400
ด้าน

0

ฉันมีปัญหาที่คล้ายกัน ฉันฟอร์แมตและติดตั้งไดรฟ์ OS / boot ใหม่ด้วยการติดตั้ง Ubuntu 12.04 ใหม่จากนั้นจึงรันคำสั่ง mdadm - สร้าง ... และไม่สามารถเมานต์ได้

มันบอกว่ามันไม่มี superblock หรือพาร์ทิชันที่ถูกต้อง

ยิ่งกว่านั้นเมื่อฉันหยุดการโจมตี mdadm ฉันไม่สามารถเมานต์อุปกรณ์ปกติได้อีกต่อไป

ฉันสามารถซ่อม superblock ด้วย mke2fs และ e2fsck:

root@blackbox:~# mke2fs -n /dev/sdc1
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
91578368 inodes, 366284000 blocks
18314200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
11179 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
  4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
  102400000, 214990848

จากนั้นก็วิ่ง:

e2fsck -b 32768 -y /dev/sdc1

การคืนค่า superblock เพื่อให้ฉันสามารถเมานต์และอ่านไดรฟ์

ในการทำให้อาร์เรย์ทำงานโดยไม่ทำลาย superblock หรือพาร์ติชั่นฉันใช้ build:

mdadm --build /dev/md0 --level=mirror --assume-clean --raid-devices=2  /dev/sdc1 missing 

หลังจากตรวจสอบข้อมูลฉันจะเพิ่มไดรฟ์อื่น:

mdadm --add /dev/md0 /sdd1

0

ฉันแค่อัปเดตข้อมูลบางส่วนที่ให้ไว้ก่อนหน้านี้ ฉันมีอาร์เรย์ RAID 3-disk ทำงาน ok เมื่อเมนบอร์ดของฉันเสียชีวิต อาร์เรย์ถือ / dev / md2 เป็น / home พาร์ติชัน 1.2TB และ / dev / md3 เป็น / var พาร์ติชัน 300GB

ฉันมีข้อมูลสำรอง "สำคัญ" สองรายการและสุ่มสิ่งต่าง ๆ มากมายที่ฉันคว้ามาจากส่วนต่าง ๆ ของอินเทอร์เน็ตที่ฉันควรผ่านและคัดทิ้งอย่างพิถีพิถัน การสำรองข้อมูลส่วนใหญ่ถูกแบ่งเป็นไฟล์. tar.gz ที่มีขนาด 25GB หรือน้อยกว่าและสำเนา / etc แยกต่างหากก็ถูกสำรองด้วย

ระบบไฟล์ที่เหลือถูกจัดเก็บไว้ในดิสก์ RAID ขนาดเล็กสองตัวที่มีขนาด 38GB

เครื่องใหม่ของฉันนั้นคล้ายกับฮาร์ดแวร์เก่าและฉันก็สามารถเปิดเครื่องและทำงานได้อย่างง่ายดายโดยเสียบดิสก์ทั้งห้าเข้าไปแล้วเลือกเคอร์เนลทั่วไป ดังนั้นฉันมีดิสก์ห้าตัวที่มีระบบไฟล์ที่สะอาดถึงแม้ว่าฉันจะไม่แน่ใจว่าดิสก์นั้นอยู่ในลำดับที่ถูกต้องและจำเป็นต้องติดตั้ง Debian Jessie เวอร์ชันใหม่เพื่อให้แน่ใจว่าฉันสามารถอัพเกรดเครื่องได้เมื่อจำเป็นและคัดแยกอื่น ๆ ปัญหาที่เกิดขึ้น

ด้วยระบบทั่วไปใหม่ที่ติดตั้งในดิสก์ Raid0 สองตัวฉันจึงเริ่มนำอาร์เรย์กลับมารวมกัน ฉันต้องการแน่ใจว่าฉันมีดิสก์ตามลำดับที่ถูกต้อง สิ่งที่ฉันควรทำคือออก:

mdadm --assemble /dev/md3 -o --no-degraded --uuid=82164ae7:9af3c5f1:f75f70a5:ba2a159a

แต่ฉันไม่ได้ ดูเหมือนว่า mdadm นั้นฉลาดและได้รับ uuid สามารถคิดได้ว่าไดรฟ์ไหนไปไหน แม้ว่าไบออสจะกำหนด / dev / sdc เป็น / sda mdadm จะรวมเข้าด้วยกันอย่างถูกต้อง (แม้ว่า YMMV)

แต่ฉันออก: mdadm --create /dev/md2 without the --assume-cleanและอนุญาตให้ resync บน / dev / sde1 ให้เสร็จสมบูรณ์ ข้อผิดพลาดต่อไปที่ฉันทำคือการทำงานกับ / dev / sdc1 แทนไดรฟ์สุดท้ายใน / dev / md2, / sde1 ทุกครั้งที่ mdadm คิดว่ามีปัญหามันเป็นไดรฟ์สุดท้ายที่ถูกเตะออกหรือซิงค์ใหม่

หลังจากนั้น mdadm ไม่พบ superblock และ e2fsck -n ก็ไม่สามารถทำได้เช่นกัน

หลังจากที่ฉันพบหน้านี้ฉันไปตามขั้นตอนของการพยายามหาลำดับสำหรับไดรฟ์ (เสร็จสิ้น) ตรวจสอบข้อมูลที่ถูกต้อง (ตรวจสอบไฟล์ 6MB ของไฟล์ 9MB) ได้รับดิสก์ในลำดับที่ถูกต้อง cde คว้า uuid ของ / md2 และ / md3 จาก /etc/mdadm.conf เก่าแล้วลองประกอบ

ดี/dev/md3เริ่มต้นและmdadm --misc -D /dev/md3แสดงให้เห็นถึงสามพาร์ทิชันที่มีสุขภาพดีและดิสก์ในลำดับที่ถูก /dev/md2ดูดีด้วยจนกระทั่งฉันพยายามเมานต์ระบบไฟล์

# mdadm --create /dev/md2 --raid-devices=3 --level=5 --uuid=c0a644c7:e5bcf758:ecfbc8f3:ee0392b7 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: /dev/sdc1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Feb  3 14:05:36 2016
mdadm: /dev/sdd1 appears to contain an ext2fs file system
       size=585936896K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sdd1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Feb  3 14:05:36 2016
mdadm: /dev/sde1 appears to contain an ext2fs file system
       size=585936896K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sde1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Feb  3 14:05:36 2016
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.

ระบบไฟล์ปฏิเสธที่จะเมานต์และ e2fsck ไม่พบซูเปอร์บล็อกใด ๆ นอกจากนี้เมื่อตรวจสอบ superblock ตามที่อธิบายข้างต้นจำนวนบล็อกทั้งหมดที่พบเป็น a880 0076 หรือ a880 0076 หรือ 5500 1176 ไม่ตรงกับขนาดความจุของดิสก์ที่ 1199.79 รายงาน mdadm ของฉัน นอกจากนี้ยังไม่มีตำแหน่งของ "superblocks" ที่สอดคล้องกับข้อมูลในโพสต์ด้านบน

ฉันสำรองข้อมูล / var ทั้งหมดและเตรียมที่จะล้างดิสก์ เพื่อดูว่ามันเป็นไปได้ที่จะเช็ดเพียง / md2 (ฉันไม่มีอะไรจะเสียที่จุดนี้) ฉัน dis ดังต่อไปนี้:

root@ced2:/home/richard# mdadm --create /dev/md2 --raid-devices=3 --level=5 --uuid=c0a644c7:e5bcf758:ecfbc8f3:ee0392b7 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: /dev/sdc1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Feb  3 14:05:36 2016
mdadm: /dev/sdd1 appears to contain an ext2fs file system
       size=585936896K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sdd1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Feb  3 14:05:36 2016
mdadm: /dev/sde1 appears to contain an ext2fs file system
       size=585936896K  mtime=Thu Jan  1 01:00:00 1970
mdadm: /dev/sde1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Feb  3 14:05:36 2016
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
# mkfs.ext3 /dev/md2
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 292902912 4k blocks and 73228288 inodes
Filesystem UUID: a54e252f-78db-4ebb-b7ca-7dcd2edf57a4
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 


# hexdump -n84 -s0x00000400 -v /dev/md2
0000400 6000 045d 5800 1175 7799 00df 6ff0 112e
0000410 5ff5 045d 0000 0000 0002 0000 0002 0000
0000420 8000 0000 8000 0000 2000 0000 10d3 56b2
0000430 10d3 56b2 0002 ffff ef53 0001 0001 0000
0000440 0c42 56b2 0000 0000 0000 0000 0001 0000
0000450 0000 0000                              
0000454

#  ./bgrep 00605D0400587511 /dev/md2
/dev/md2: 00000400
/dev/md2: 08000000
/dev/md2: 18000000
/dev/md2: 28000000
/dev/md2: 38000000
/dev/md2: 48000000
/dev/md2: c8000000
/dev/md2: d8000000
/dev/md2: 188000000
/dev/md2: 288000000
/dev/md2: 3e8000000
/dev/md2: 798000000
/dev/md2: ab8000000
etc

ทั้งหมดดูเหมือนจะโอเคยกเว้นการเปลี่ยนเป็น uuid ดังนั้นหลังจากตรวจสอบอีกสองสามครั้งฉันเขียนข้อมูลสำรอง 600GB ลงใน / dev / md2 จากนั้นให้ยกเลิกการต่อเชื่อมและพยายามติดตั้งไดรฟ์อีกครั้ง:

# mdadm --assemble /dev/md2 uuid=c0a644c7:e5bcf758:ecfbc8f3:ee0392b7
mdadm: cannot open device uuid=c0a644c7:e5bcf758:ecfbc8f3:ee0392b7: No such file or directory
mdadm: uuid=c0a644c7:e5bcf758:ecfbc8f3:ee0392b7 has no superblock - assembly aborted

คุณ ********* ล้อเล่นกับฉันเหรอ? สิ่งที่เกี่ยวกับ 600GB ของฉันในไฟล์?

# mdadm --assemble /dev/md2 
mdadm: /dev/md2 not identified in config file.

อ่า - แก้ไขได้ง่าย ไม่ใส่เครื่องหมายข้อคิดเห็นหนึ่งบรรทัดใน /etc/mdadm.conf

# mdadm --assemble /dev/md2 
mdadm: /dev/md2 has been started with 3 drives.

# e2fsck -n /dev/md2
e2fsck 1.42.12 (29-Aug-2014)
/dev/md2: clean, 731552/73228288 files, 182979586/292902912 blocks

Yippie!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.