วิธีการเมาท์ / กู้คืนข้อมูลบนดิสก์ที่เป็นส่วนหนึ่งของ mdadm raid 1 บนเครื่องอื่นได้อย่างไร


18

พื้นหลังบางส่วน

  • แผ่นดิสก์นั้นถูก "ทำงานโดย" เพื่อนและกล่าวว่ายังคงไม่บุบสลายไม่เสียหายและยังคงยึด / กู้คืนได้
  • ดิสก์เป็นส่วนหนึ่งของการโจมตีซอฟต์แวร์ 1 บน Ubuntu 12.04
  • ดิสก์อื่นในการจู่โจมเดิม 1 ได้รับการฟอร์แมตและใช้เพื่อวัตถุประสงค์อื่นโดยปล่อยให้ดิสก์ปัจจุบัน (ที่มีปัญหา) ยังคงเป็นส่วนหนึ่งทางเทคนิคของการจู่โจมที่ไม่มีอยู่อีกต่อไป

สิ่งที่ฉันได้ลองไปแล้ว

  • การติดตั้งพื้นฐาน

    • ฉันเพิ่มรายการใน fstab ทำเครื่องหมายดิสก์เป็น ext3 / ext4 และพยายามเมานต์
    • เมื่อติดตั้งข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น

      wrong fs type, bad option, bad superblock on

    • และในdmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • ฉันพยายามค้นหาชนิดของระบบไฟล์ของดิสก์แล้วมาด้วย

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

ที่ฉันต้องการความช่วยเหลือ / คำถามของฉัน

  • มีวิธีแปลงดิสก์เป็น ext4 โดยไม่ทำให้ข้อมูลเสียหายหรือไม่?
  • มีวิธีง่ายๆในการติดตั้งดิสก์ชนิดไฟล์ Linux 83 และกู้คืนข้อมูลหรือไม่
  • ฉันมีดิสก์อื่นฟรีในขณะนี้ในกรณีที่เป็นไปได้ที่จะสร้างการโจมตีอีกครั้ง
  • เป้าหมายหลักของฉันคือการกู้คืนข้อมูลจากดิสก์ ฉันเปิดให้ตัวเลือกทั้งหมด

ปรับปรุง

เอาต์พุตของคำสั่งบางอย่าง

  • fdisk -l / dev / sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 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: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • ไฟล์ -s / dev / sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 / dev / sdc (ไม่แน่ใจว่านี่จะช่วยได้หรือไม่)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    

ปัญหาคือพาร์ติชั่นคิดว่ามันมีโวลุ่มการโจมตีอยู่บ้างและไม่ใช่ ext4fs และเคอร์เนลนั้นถูกต้อง อย่างไรก็ตามเนื่องจากเป็นการโจมตีครั้งที่ 1 จึงเป็น ext4fs mount -f ext4 /dev/sdc1 /mountpointควรทำเคล็ดลับ หากต้องการบังคับให้ mount สมมติ ext4 แทนที่จะมองหาระบบไฟล์สิ่งที่ -f ทำ
Bananguin

1
แรงยึดไม่ได้ให้ข้อผิดพลาดใด ๆ แต่จุดยึดว่างเปล่า ข้อมูลหายไปหรือการเมานต์ไม่ทำงานตามที่คาดไว้ การทำdfแสดงให้ฉันเห็นว่าดิสก์ที่ติดตั้งใหม่คือการใช้งาน 2% ซึ่งต่ำกว่าที่คาดไว้อย่างมาก
อดัม

@ user1129682 ถ้า mount บอกว่ามันไม่ใช่ ext4 ถ้างั้นก็ไม่ใช่ ... พยายามบังคับให้มันไม่ช่วย
psusi

@psusi: ทำงานให้ฉัน Gilles ตอบอธิบายว่าทำไมมันทำงานได้ในบางสถานการณ์
Bananguin

@Bananguin คุณไม่ได้ตั้งใจmount -t ext4เหรอ? แฟล็ก -f ใช้สำหรับการติดตั้ง 'ปลอม' (ubuntu 14.04)
Quantum7

คำตอบ:


12

นี่ใช้งานได้ดีใน Ubuntu 14.04:

sudo -i
mdadm --assemble --scan

คุณจะได้รับ:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

จากนั้นเมานต์และดูไฟล์ของคุณ:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

กำลังได้รับ "มีอยู่ แต่ไม่ใช่อาร์เรย์ md" ในฮาร์ดไดรฟ์ที่ล้มเหลวซึ่งเป็นส่วนหนึ่งของอาร์เรย์ ... และสิ่งนี้ทำงานได้ดีกว่าคำแนะนำอื่น ๆ ทั้งหมด ติดตั้งเรียบร้อยแล้วกำลังคัดลอกข้อมูลไม่ว่างในขณะนี้
Zayne S Halsall

ตัวเลือกนี้ทำงานได้ดีสำหรับฉัน 2 Intel SSD ใน RAID1 ดึงหนึ่งและออกจากพอร์ต SATA ไปยังพีซีที่ใช้ suse linux ในขั้นต้นแสดงขึ้นเป็นเพียงและ/dev/sdc /dev/md127จากนั้นไม่mdadm --assemble --scanซึ่งมีผลใน/dev/md/Volume0_0p1และ/dev/md/Volume0_0p2และอื่น ๆ ที่สอดคล้องกับ 4 พาร์ทิชันที่อยู่บนดิสก์ P2 เป็นสิ่งที่ฉันต้องการดังนั้น: mkdir /p2 ตามด้วยการmount /dev/md/Volume0_0p2 /p2ติดตั้งซึ่งเป็น EXT3 และฉันสามารถเข้าถึงและคัดลอกข้อมูลได้อย่างง่ายดาย นอกจากนี้ยังติดตั้งเป็นอ่านเขียน
รอน

คุณทำวันของฉัน! ขอบคุณ!
Gooshan

บางครั้ง--scanโหมดไม่เริ่มอาร์เรย์ด้วยดิสก์ที่ขาดหายไปในกรณีของฉันที่นี่ฉันต้องหยุดอาร์เรย์ที่ประกอบโดยอัตโนมัติและเริ่มต้นอีกครั้งด้วยmdadm --assemble --force /dev/md/1 /dev/sdc1
23922

7

ลินุกซ์ mdraid มีรูปแบบหลายเมตาดาต้า รูปแบบ 0.9 และ 1.0 วางข้อมูลเมตาที่ส่วนท้ายของอุปกรณ์ที่มีและ payload (ระบบไฟล์) เริ่มต้นที่จุดเริ่มต้นของอุปกรณ์และสามารถเข้าถึงได้โดยตรงโดยไม่ต้องผ่านชั้นโจมตี รูปแบบ 1.1 และ 1.2 วางข้อมูลเมตาที่ตรงกลางและจุดเริ่มต้นของอุปกรณ์ที่มีตามลำดับดังนั้นน้ำหนักบรรทุกที่ออฟเซ็ต

เครื่องมือติดตั้ง Ubuntu สร้างวอลุ่มด้วยรูปแบบข้อมูลเมตา 1.2 ดังนั้นข้อมูลของคุณจะเริ่มต้นหลังจากข้อมูลเมตาแทนจุดเริ่มต้นของอุปกรณ์

วิธีที่ง่ายที่สุดในการเข้าถึงข้อมูลนั้นคือการประกอบอุปกรณ์ตรวจจับ ในโวลุ่ม RAID-1 อุปกรณ์เดียวก็เพียงพอแล้ว

madadm -A /dev/sdc1

(หยุดที่นี่จนกว่าคุณจะชอบความเจ็บปวด)

คุณยังสามารถเข้าถึงข้อมูลได้ที่ออฟเซ็ต จุดเดียวที่ฉันเห็นการทำเช่นนี้คือถ้าคุณต้องทำงานในเคอร์เนลเก่ามากที่ไม่สนับสนุนรูปแบบ 1.x mdraid ก่อนกำหนดชดเชยmdadm -E /dev/sdc1: Data Offset : SSS sectorsมองหาเส้น เซกเตอร์ mdadm คือ 512 ไบต์

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

ในความสิ้นหวังด้วยรูปแบบ 1.x การชดเชยข้อมูลจะถูกจัดเก็บเป็นไบต์ 128–135 ของข้อมูลเมตาซึ่งเป็นจุดสิ้นสุดเล็ก ๆ 1.2 ข้อมูลเมตาคือ 4096 ไบต์หลังจากเริ่มต้นอุปกรณ์

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

¹ หรือกับแพลตฟอร์ม endianness? ฉันไม่แน่ใจ.


ข้อมูลสามารถเริ่มต้นด้วยการออฟเซ็ตต่าง ๆ (ดูmdadm -E /dev/sdc1ว่าตรงไหน) แต่ไม่แน่นอนที่ 4k สำหรับข้อมูลเมตา 1.2 เนื่องจาก 4k นั้นแน่นอนที่เก็บข้อมูลเมตา ดูเพิ่มเติมที่unix.stackexchange.com/q/57477/22565
Stéphane Chazelas

@StephaneChazelas โอ๊ะใช่สมองตด ขอบคุณ
Gilles 'SO- หยุดความชั่วร้าย'

3
mdadm -A /dev/sdc1เอาท์พุทmdadm: device /dev/sdc1 exists but is not an md array.ฉันไปอีกเล็กน้อยเพื่อใช้ mdadm และดูว่ามีข้อมูลเพิ่มเติม ... mdadm --misc --examine /dev/sdc1เอาท์พุทmdadm: No md superblock detected on /dev/sdc1.เอาท์พุทมีวิธีที่ฉันสามารถเขียน superblock บนดิสก์นี้อีกครั้งเพื่อทำเครื่องหมายว่าเป็นดิสก์ที่พร้อมใช้งานสำหรับชุดประกอบ RAID หรือไม่
อดัม

@Gilles A mdadm -E /dev/sdcส่งคืนสิ่งต่อไปนี้ให้ฉัน: /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) แต่ไม่มีข้อมูลสำหรับ / dev / sdc1 แม้ว่า
Adam

1
@ อดัมหาก mdadm ไม่สามารถหาข้อมูลเมตาของมันไม่มีอะไรที่คุณสามารถทำได้ที่นั่น: คุณไม่สามารถบังคับให้ทำอะไรบางอย่างเพราะไม่รู้ว่าจะทำอย่างไร คุณต้องมองหาระบบไฟล์และหากคำแนะนำของ psusi ไม่ได้นำไปที่ใดก็ตามมุมมองนั้นดูเยือกเย็น บางทีการมีเลขฐานสิบหกของสองสามกิโลไบต์แรกของดิสก์อาจเป็นแรงบันดาลใจให้ใครบางคน (ระวังว่ามันอาจเปิดเผยข้อมูลที่เป็นความลับ)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

5

ที่แปลกใจของผม / ฉันสามารถที่จะกู้คืนข้อมูลโดยเพียงแค่ใช้ที่สำคัญที่สุด

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


ฉันรู้ว่านี่เป็นเวลานานแล้ว! แต่คุณจำได้ไหมว่าคุณสามารถใช้ส่วนที่สำคัญที่สุดโดยไม่ต้องติดตั้งพาร์ติชัน
PhillipOReilly

ขออภัยฉันจำรายละเอียดไม่ได้อีกแล้ว : /
Adam

3

ดูเหมือนว่าคุณได้ทำการแมปซุปเปอร์บล็อก mdadm แล้ว ถ้ามันเคยอยู่ที่นั่นและอยู่ในรูปแบบ 1.1 หรือ 1.2 แสดงว่าระบบไฟล์อยู่ในช่วงออฟเซ็ต 2048 คุณสามารถเรียกใช้e2fsck /dev/sdc1?offset=2048เพื่อบังคับให้ค้นหาระบบไฟล์เริ่มต้นที่ออฟเซ็ต หากพบว่ามันคุณสามารถปรับเปลี่ยนตารางพาร์ติชันของคุณเพื่อชี้ไปที่ระบบไฟล์เริ่มต้นจริง คุณสามารถใช้parted /dev/sdcและunit sคำสั่งเพื่อใช้หน่วยของเซ็กเตอร์ printตารางสังเกตเซกเตอร์เริ่มต้นและสิ้นสุดจากนั้นrmพาร์ติชันจากนั้นสร้างใหม่ด้วยmkpartและใช้เซกเตอร์ปลายทางเดียวกัน แต่เพิ่มออฟเซ็ตลงในเซกเตอร์เริ่มต้น

หาก 2048 ไม่ทำงานคุณอาจลอง 1985


การรันe2fsck /dev/sdc1?offset=2048(ฉันยังรัน offset = 1985) เอาต์พุตBad magic number..Superblock invalid...เช่นเดียวกับการแนะนำว่า superblock เสียหายและพยายามรัน e2fsck ด้วย superblock สำรอง ดูเหมือนว่าฉันควรให้ superblock ทางเลือกอื่นเพื่อดำเนินการต่อ
อดัม

@ อดัมไม่คุณแค่ต้องได้รับการชดเชยที่ถูกต้อง testdiskควรทำการสแกนอย่างละเอียดและแก้ไขตารางพาร์ติชันให้คุณ
psusi

testdiskเป็นดินแดนใหม่ที่สมบูรณ์แบบสำหรับฉัน การแสดงพื้นฐาน (วิเคราะห์) ขั้นพื้นฐานNo ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.นอกจากนี้ยังมีสิ่งต่อไปนี้: 1 P Linux 0 1 1 121600 254 63 1953520002ฉันจะเข้าใจได้อย่างไรว่าจะช่วยสถานการณ์ได้อย่างไร
อดัม

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

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