Làm cách nào để gắn / khôi phục dữ liệu trên đĩa là một phần của cuộc đột kích mdadm 1 trên máy khác?


16

Một số nền tảng

  • Bản thân đĩa đã được "làm việc" bởi một người bạn và được cho là vẫn còn nguyên vẹn, không bị hư hại và vẫn có thể gắn kết / có thể phục hồi
  • Đĩa là một phần của cuộc đột kích phần mềm 1 trên Ubuntu 12.04
  • Đĩa khác trong cuộc đột kích ban đầu 1 đã được định dạng và sử dụng cho mục đích khác, để lại đĩa hiện tại (một câu hỏi) về mặt kỹ thuật vẫn là một phần của cuộc đột kích không còn tồn tại

Những gì tôi đã thử rồi

  • Gắn cơ bản

    • Tôi đã thêm một mục vào fstab, đánh dấu đĩa là ext3 / ext4 và cố gắng gắn kết.
    • Khi lắp, lỗi sau xuất hiện.

      wrong fs type, bad option, bad superblock on

    • Và trong dmesg

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

  • Tôi đã cố gắng tìm loại hệ thống tập tin của đĩa và đã đưa ra

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

Tôi cần giúp đỡ ở đâu / Câu hỏi của tôi

  • Có cách nào để chuyển đổi đĩa thành ext4 mà không làm hỏng dữ liệu không?
  • Có cách nào đơn giản để gắn đĩa loại tệp Linux 83 và khôi phục dữ liệu không?
  • Tôi có một đĩa khác hiện đang miễn phí trong trường hợp có khả năng xây dựng lại cuộc đột kích bằng cách nào đó
  • Mục tiêu chính của tôi là khôi phục dữ liệu từ đĩa. Tôi mở cho tất cả các tùy chọn.

Cập nhật

Đầu ra của một số lệnh

  • 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

  • tập tin -s / dev / sdc1

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

  • hexdump -C -n 32256 / dev / sdc (Không chắc điều này có thể giúp ích hay không)

    $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
    

Vấn đề là phân vùng nghĩ rằng nó có một số lượng đột kích trên nó chứ không phải là một ext4fs. Và hạt nhân là đúng. Tuy nhiên, vì nó là một cuộc đột kích 1 nên nó là một ext4fs. một mount -f ext4 /dev/sdc1 /mountpointnên làm các trick. Để buộc mount phải giả sử ext4 thay vì tìm kiếm một hệ thống tệp là những gì -f làm
Bananguin

1
Gắn kết lực không đưa ra bất kỳ lỗi nào, nhưng điểm gắn kết là trống. Dữ liệu đã biến mất hoặc giá treo không hoạt động như mong đợi. Thực hiện dfcho tôi thấy rằng đĩa mới được gắn là 2% đang sử dụng, thấp hơn đáng kể so với dự kiến.
Adam

@ user1129682, nếu mount nói rằng nó không phải là ext4, thì nó không ... cố gắng ép buộc nó sẽ không giúp ích gì.
psusi

@psusi: làm việc cho tôi Câu trả lời của Gilles giải thích lý do tại sao nó hoạt động trong một số trường hợp
Bananguin

@Bananguin Ý bạn là mount -t ext4sao? Cờ -f là để gắn kết 'giả' (ubfox 14.04).
Quantum7

Câu trả lời:


10

Điều này đang hoạt động xuất sắc trong Ubuntu 14.04:

sudo -i
mdadm --assemble --scan

Bạn sẽ nhận được:

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

Sau đó gắn kết và xem các tập tin của bạn:

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

Đã nhận được "tồn tại nhưng không phải là một mảng md" trên một ổ cứng bị lỗi mà là một phần của một mảng ... và điều này hoạt động tốt hơn tất cả các đề xuất khác. Gắn kết thành công, bận sao chép dữ liệu ngay bây giờ.
Zayne S Halsall

tùy chọn này làm việc tốt cho tôi. 2 SSD Intel trong RAID1. Kéo một cái và trượt cổng SATA sang pc chạy suse linux. Ban đầu xuất hiện như là duy nhất /dev/sdcvà như /dev/md127. Sau đó đã mdadm --assemble --scancó kết quả /dev/md/Volume0_0p1/dev/md/Volume0_0p2và vân vân tương ứng với 4 phân vùng đã có trên đĩa. P2 là thứ tôi cần vì vậy: mkdir /p2 tiếp theo là mount /dev/md/Volume0_0p2 /p2gắn nó là EXT3 và tôi có thể dễ dàng truy cập và sao chép dữ liệu. Nó cũng gắn nó như đọc-ghi.
ron

bạn đã làm cho ngày của tôi! Cảm ơn!
Goo Sơn

đôi khi --scanchế độ không bắt đầu mảng với các đĩa bị thiếu, trong trường hợp của tôi ở đây, tôi đã phải dừng mảng tự động lắp ráp và bắt đầu lại vớimdadm --assemble --force /dev/md/1 /dev/sdc1
BrunoJCM

7

Linux mdared có một số định dạng siêu dữ liệu . Các định dạng 0.9 và 1.0 đặt siêu dữ liệu ở cuối thiết bị chứa và tải trọng (hệ thống tệp) bắt đầu ở đầu thiết bị và có thể được truy cập trực tiếp mà không cần qua lớp đột kích. Các định dạng 1.1 và 1.2 đặt siêu dữ liệu ở giữa và đầu của thiết bị chứa tương ứng, do đó, tải trọng ở mức bù.

Trình cài đặt Ubuntu tạo các khối với định dạng siêu dữ liệu 1.2, do đó dữ liệu của bạn bắt đầu sau siêu dữ liệu thay vì ở đầu thiết bị.

Cách đơn giản nhất để truy cập dữ liệu đó là lắp ráp thiết bị đột kích. Trong một ổ RAID-1, một thiết bị duy nhất là đủ.

madadm -A /dev/sdc1

(Dừng ở đây trừ khi bạn thích đau.)

Bạn cũng có thể truy cập dữ liệu ở mức bù. Điểm duy nhất tôi có thể thấy để làm điều này là nếu bạn phải làm việc trong một kernel rất cũ không hỗ trợ các định dạng sợ 1.x. Đầu tiên, xác định phần bù mdadm -E /dev/sdc1: tìm dòng Data Offset : SSS sectors. Một lĩnh vực mdadm là 512 byte.

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

Trong tuyệt vọng, với các định dạng 1.x, phần bù dữ liệu được lưu trữ theo byte 128 mật135 của siêu dữ liệu, endian. 1,2 siêu dữ liệu là 4096 byte sau khi bắt đầu thiết bị.

Bạn cũng có thể thay đổi bảng phân vùng để làm cho nó bắt đầu xa hơn. Hãy rất cẩn thận với số học của bạn. Chỉ làm điều đó nếu bạn muốn tiếp tục sử dụng đĩa trên cơ sở lâu dài trong một hệ thống cũ không thể truy cập thiết bị đột kích.

¹ Hoặc với endianness nền tảng? Tôi không chắc.


dữ liệu có thể bắt đầu ở các độ lệch khác nhau (xem mdadm -E /dev/sdc1chính xác ở đâu) nhưng chắc chắn không phải là 4k cho 1,2 siêu dữ liệu, vì 4k chính xác là nơi lưu trữ siêu dữ liệu. Xem thêm unix.stackexchange.com/q/57477/22565
Stéphane Chazelas

@StephaneChazelas Rất tiếc, vâng, rắm não. Cảm ơn.
Gilles 'SO- ngừng trở thành ác quỷ'

3
mdadm -A /dev/sdc1đầu ra mdadm: device /dev/sdc1 exists but is not an md array.Tôi đã đi xa hơn một chút để sử dụng mdadm và xem liệu có bất kỳ thông tin bổ sung nào ... mdadm --misc --examine /dev/sdc1đầu ra không mdadm: No md superblock detected on /dev/sdc1.. Có cách nào để tôi có thể viết lại các siêu khóa trên đĩa này để đánh dấu nó là một đĩa có sẵn để lắp ráp RAID không?
Adam

@Gilles A mdadm -E /dev/sdctrả lại cho tôi những điều sau: /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) nhưng không có thông tin nào cho / dev / sdc1
Adam

1
@Adam Nếu mdadm không thể tìm thấy siêu dữ liệu của nó thì bạn không thể làm gì ở đó: bạn không thể buộc nó làm điều gì đó vì nó không biết phải làm gì. Bạn cần tìm kiếm một hệ thống tập tin và nếu lời khuyên của psus không dẫn đến bất cứ đâu, triển vọng sẽ ảm đạm. Có lẽ một hexdump của vài kilobyte đầu tiên của đĩa có thể truyền cảm hứng cho ai đó (hãy cẩn thận rằng nó có thể tiết lộ một số dữ liệu bí mật).
Gilles 'SO- ngừng trở nên xấu xa'

5

Thật ngạc nhiên, tôi đã / có thể khôi phục dữ liệu bằng cách sử dụng trước hết .

Sự giúp đỡ nhận được ở đây là vô giá. Sau khi thử nhiều kết hợp được đề xuất, cũng như các kết hợp riêng của tôi, phương pháp lý tưởng (để gắn và sử dụng đĩa như bình thường) dường như không còn là một lựa chọn nữa. Sử dụng để phục hồi dữ liệu là giải pháp của tôi trong trường hợp này.


Tôi nhận ra điều này là một thời gian trước đây! Nhưng bạn có nhớ liệu bạn có thể sử dụng đầu tiên mà không cần gắn phân vùng không?
PhillipOReilly

Xin lỗi, tôi không nhớ chi tiết về điều này nữa. : /
Adam

3

Có vẻ như bạn đã hạ gục siêu khối mdadm. Nếu nó được sử dụng ở đó và có định dạng 1.1 hoặc 1.2, thì rất có thể hệ thống tập tin đã được bù 2048 cung. Bạn có thể chạy e2fsck /dev/sdc1?offset=2048để buộc nó tìm hệ thống tập tin bắt đầu ở phần bù đó. Nếu nó tìm thấy nó thì bạn có thể sửa đổi bảng phân vùng của mình để trỏ đến nơi hệ thống tập tin thực sự bắt đầu. Bạn có thể sử dụng parted /dev/sdcunit slệnh để sử dụng các đơn vị của các ngành. printbảng, lưu ý khu vực bắt đầu và kết thúc, sau đó rmphân vùng, sau đó tạo lại nó với mkpartvà sử dụng cùng một khu vực kết thúc, nhưng thêm phần bù vào khu vực bắt đầu.

Nếu 2048 không hoạt động, bạn cũng có thể thử 1985.


Chạy e2fsck /dev/sdc1?offset=2048(tôi cũng đã chạy offset = 1985) Bad magic number..Superblock invalid...cũng như gợi ý rằng siêu khối bị hỏng và cố chạy e2fsck với một siêu khối thay thế. Có vẻ như tôi nên cung cấp cho nó một siêu khối thay thế để tiến về phía trước.
Adam

@Adam, không, bạn chỉ cần lấy phần bù chính xác. testdisksẽ có thể thực hiện quét chi tiết và sửa bảng phân vùng cho bạn.
psusi

testdisklà lãnh thổ hoàn toàn mới đối với tôi. Một chương trình chạy cơ bản (Phân tích) No ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.Nó cũng cung cấp các thông tin sau: 1 P Linux 0 1 1 121600 254 63 1953520002Làm thế nào tôi có thể hiểu điều đó để giúp đỡ tình hình?
Adam

@Adam, tôi chưa bao giờ sử dụng nó, tôi chỉ biết rằng nó được cho là có thể quét và tìm siêu khối. Bạn đã chạy nó trên toàn bộ đĩa, không phải phân vùng phải không?
psusi

Sau khi chạy một phân tích trên đĩa đầy đủ, nó bật lên không có phân vùng. Hiện đang chạy quét sâu bây giờ. Nếu điều này không bật lên bất cứ điều gì, tôi không chắc sẽ đi đâu từ đây.
Adam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.