Làm cách nào để khôi phục các tệp từ một ổ đĩa mdadm raid1 đã xuống cấp? Không đủ để bắt đầu mảng


7

Cho một ổ đĩa raid1 trong trạng thái xuống cấp / xây dựng lại, nó có thể được gắn kết không? Tôi muốn khôi phục tất cả các tệp trước khi thực hiện thao tác nguy hiểm để ghép nối và xây dựng lại. Theo như tôi có thể nói ổ đĩa đang ở trong tình trạng hoàn toàn tốt, còn nguyên vẹn. Các ổ đĩa đôi là một phần thất bại.

Nếu ổ đĩa không ở trạng thái xây dựng lại, tôi sẽ biết chính xác phải làm gì. Đây là những gì tôi đã thử:

# mdadm --verbose --assemble /dev/md8 /dev/sdb1  --force
mdadm: looking for devices for /dev/md8
mdadm: /dev/sdb1 is identified as a member of /dev/md8, slot 1.
mdadm: no uptodate device for slot 0 of /dev/md8
mdadm: added /dev/sdb1 to /dev/md8 as 1
mdadm: /dev/md8 assembled from 0 drives and  1 rebuilding - not enough to start the array.

# cat /proc/mdstat                       
md8 : inactive sdb1[1](S)
      976759808 blocks super 1.2          
md0 : active raid1 sdc1[0]
      976759672 blocks super 1.2 [2/1] [U_]

# mdadm --stop /dev/md8
mdadm: stopped /dev/md8

# mount /dev/sdb1 /mnt/temp2
mount: unknown filesystem type 'linux_raid_member'

# mount -o ro -t ext3 -b 2048 /dev/sdb1 /mnt/temp1
mount: wrong fs type, bad option, bad superblock on /dev/sdb1.

# foremost -i /dev/sdb -o /tmp/foo    (this results in perfectly good files)

Trong trường hợp cụ thể này, foremostlệnh phục hồi các tệp, vì vậy một cái gì đó chắc chắn nằm trên ổ đĩa, nếu tôi chỉ có thể lấy siêu bù chính xác.

Và trong trường hợp cụ thể này, việc lắp ráp cả hai nửa của mảng sẽ làm hỏng kernel (!), Vì vậy dù sao đó cũng không phải là một lựa chọn thực sự (ngoài các vấn đề an toàn).


CẬP NHẬT: đầu ra thêm của mdadm

# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x2
     Array UUID : e00a291e:016bbe47:09526c90:3be48df3
           Name : ubuntu:0
  Creation Time : Wed May 11 12:26:39 2011
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953519616 (931.51 GiB 1000.20 GB)
     Array Size : 1953519344 (931.51 GiB 1000.20 GB)
  Used Dev Size : 1953519344 (931.51 GiB 1000.20 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
Recovery Offset : 0 sectors
          State : clean
    Device UUID : 41346f44:ccacbbf7:0c17c133:eb7b341f

    Update Time : Sat Apr 13 00:02:08 2013
       Checksum : 483a0a44 - correct
         Events : 402833


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

Đầu ra của mdadm --examine /dev/sdb1?
frostschutz

Thêm vào câu hỏi.
Bryce

blockdev --getsize /dev/sdb11953521664 hoặc lớn hơn? cat /proc/mdstatbao gồm Personalities : [raid1]?
frostschutz

@frostschutz có cho cả hai.
Bryce

Bạn dường như có cả hai ổ đĩa, vậy tại sao bạn lại cố gắng chỉ sử dụng một trong số chúng?
psusi

Câu trả lời:


8

Nếu đó là RAID 1 và nếu bạn biết phần bù dữ liệu (ví dụ: 2048 cung, bạn thường có thể tìm ra phần bù dữ liệu chính xác theo mdadm --examine /dev/sdb1), thì bạn có thể tạo một thiết bị lặp chỉ đọc (để an toàn) như vậy:

# losetup --find --show --read-only --offset $((2048*512)) /dev/sdb1

/dev/loop7

Và sau đó thử kiểm tra rồi gắn thiết bị vòng lặp in:

# fsck.ext3 -n -v /dev/loop7
# mount -o ro /dev/loop7 /mnt/recovery

mount có thể có thể làm điều này trực tiếp với các -o ro,loop,offset=tùy chọn, nhưng tôi thích tạo thiết bị lặp theo cách thủ công, chỉ để đảm bảo rằng nó thực sự chỉ đọc.

Nếu chính hệ thống tập tin bị hỏng, bạn nên tạo một hình ảnh bằng cách sử dụng ddvà chạy các thử nghiệm như fscktrên hình ảnh. Ngoài ra, bạn có thể sử dụng thiết bị chặn mạng Linux để đặt một lớp sao chép trên đầu đĩa, do đó bạn có thể fscklớp đó mà không thực sự ghi bất cứ điều gì lên đĩa ( nbd-server -c/ nbd-client, sẽ tạo ra một /dev/nbdXthiết bị để bạn chơi). Có thể làm điều tương tự với trình ánh xạ thiết bị - nhưng tôi chưa bao giờ thử nó.


"mount -o ro -t ext3 / dev / loop7 / mnt / temp1" cung cấp "mount: loại fs sai, tùy chọn xấu, superblock xấu trên / dev / loop7". Một ổ đĩa raid1 tương tự hoạt động với "mount -o ro -t ext3 -b 2048 / dev / sde1 / mnt / temp1".
Bryce

Điều gì file -snói lên các thiết bị vòng lặp được tạo ra?
frostschutz

"File -s" hiển thị "Linux rev 1.0 ext3 dữ liệu hệ thống tệp, UUID = ad88ff39-8f6c-4bb9-80de-bf56feae31b1 (cần khôi phục nhật ký) (tệp lớn)". Xem thêm superuser.com/questions/256251/ Mạnh
Bryce

Vì vậy, các thiết bị vòng / bù phải tốt. Bất cứ điều gì trong dmesg khi bạn cố gắng gắn kết? Hệ thống tập tin có thể bị hỏng bằng cách nào đó.
frostschutz

vâng, có vẻ như ổ đĩa rất tệ, mặc dù việc tự kiểm tra SMART đã vượt qua: "fsck.ext3: Cố gắng đọc khối từ hệ thống tập tin dẫn đến việc đọc ngắn trong khi cố gắng mở lại / dev / loop1"
Bryce

0

Bạn sẽ có thể đặt số lượng thiết bị đột kích trong mảng của mình thành một bằng cách sử dụng:

mdadm /dev/md8 --grow --raid-devices=1 --force

Sau đó nhìn vào /proc/mdstatđể xem md8có hoạt động không. Bạn có thể nên gắn nó chỉ đọc cho đến khi bạn đã sao chép dữ liệu.


# mdadm / dev / md8 --grow - sợ-thiết bị = 1 --force cho "mdadm: / dev / md8 không phải là một mảng md hoạt động - hủy bỏ"
Bryce

Bạn đã thử mdadm --assemble --scannó có thể hoạt động vì md8 xuất hiện trong /proc/mdstat. Bạn vẫn phải gắn md8 sau đó
Anthon

Tôi thực sự muốn bỏ qua sự phức tạp của cuộc đột kích và chỉ gắn kết các fs cơ bản.
Bryce

Trong trường hợp đó bạn phải đi với phần bù. Tôi đã cố gắng tái tạo lại lỗi mà bạn nhận được với một kịch bản, nhưng mặc dù tôi nhận được no uptodate device for slot 1 of /dev/md8sự /dev/md8khởi đầu (trong chế độ xuống cấp). Tôi đã có cả hai chỉ với việc loại bỏ ổ đĩa khác và gán ổ đĩa kia cho / dev / md0. Tôi đã phải khởi động lại máy thường xuyên, vì bằng cách nào đó, kernel giữ thông tin về các phân vùng đột kích ngay cả khi thiết bị đột kích bị dừng và zero-ed. Nhưng ngay cả khi không khởi động lại, tôi không bao giờ có thể tái tạo vấn đề.
Anthon
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.