Trước tiên, hãy để tôi thừa nhận rằng tôi đã mắc lỗi và tôi có một bản sao lưu cho hầu hết nhưng không phải tất cả dữ liệu trên RAID này. Tôi vẫn có hy vọng khôi phục phần còn lại của dữ liệu. Tôi không có tiền để mang các ổ đĩa đến một công ty chuyên gia phục hồi.
Sai lầm # 0, không có bản sao lưu 100%. Tôi biết.
Tôi có mdadm
hệ thống RAID5 4x3TB. Ổ đĩa / dev / sd [be], tất cả chỉ có một phân vùng /dev/sd[b-e]1
. Tôi biết rằng RAID5 trên các ổ đĩa rất lớn là rủi ro, nhưng dù sao tôi cũng đã làm được.
Sự kiện gần đây
RAID trở nên xuống cấp sau một lỗi hai ổ đĩa. Một ổ [/ dev / sdc] đã thực sự biến mất, [/ dev / sde] khác đã hoạt động trở lại sau một chu kỳ nguồn, nhưng không được tự động thêm lại vào RAID. Vì vậy, tôi chỉ còn lại một RAID 4 thiết bị chỉ có 2 ổ đĩa hoạt động [/ dev / sdb và / dev / sdd].
Sai lầm # 1, không sử dụng bản sao dd của các ổ đĩa để khôi phục RAID. Tôi không có ổ đĩa hoặc thời gian. Sai lầm # 2, không tạo bản sao lưu của siêu khối và mdadm -E
các ổ đĩa còn lại.
Cố gắng phục hồi
Tôi đã lắp lại RAID ở chế độ xuống cấp với
mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.
Sau đó tôi có thể truy cập dữ liệu của mình. Tôi thay thế /dev/sdc
bằng một phụ tùng; trống; ổ đĩa giống hệt nhau.
Tôi đã gỡ bỏ bản cũ /dev/sdc1
khỏi RAID
mdadm --fail /dev/md0 /dev/sdc1
Sai lầm # 3, không làm điều này trước khi thay thế ổ đĩa
Sau đó tôi phân vùng cái mới /dev/sdc
và thêm nó vào RAID.
mdadm --add /dev/md0 /dev/sdc1
Sau đó nó bắt đầu khôi phục RAID. ETA 300 phút. Tôi đã làm theo quy trình thông qua /proc/mdstat
đến 2% và sau đó đi làm việc khác.
Kiểm tra kết quả
Vài giờ (nhưng ít hơn 300 phút) sau, tôi đã kiểm tra quy trình. Nó đã dừng lại do lỗi đọc trên /dev/sde1
.
Đây là nơi rắc rối thực sự bắt đầu
Sau đó tôi gỡ bỏ /dev/sde1
RAID và thêm lại. Tôi không thể nhớ tại sao tôi làm điều này; Muộn rồi.
mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1
Tuy nhiên, /dev/sde1
bây giờ đã được đánh dấu là phụ tùng. Vì vậy, tôi quyết định tạo lại toàn bộ mảng bằng cách sử dụng --assume-clean bằng cách sử dụng thứ tôi nghĩ là đúng thứ tự và /dev/sdc1
bị thiếu.
mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1
Điều đó đã làm việc, nhưng hệ thống tập tin đã không được nhận ra trong khi cố gắng gắn kết. (Đáng lẽ phải là EXT4).
Đặt hàng thiết bị
Sau đó tôi đã kiểm tra một bản sao lưu gần đây mà tôi có /proc/mdstat
và tôi đã tìm thấy thứ tự ổ đĩa.
md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1]
8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
Sau đó, tôi nhớ rằng RAID này đã bị mất ổ đĩa khoảng một năm trước và đã phục hồi từ nó bằng cách thay thế ổ đĩa bị lỗi bằng một ổ đĩa dự phòng. Điều đó có thể đã xáo trộn thứ tự thiết bị một chút ... vì vậy không có ổ đĩa [3] mà chỉ có [0], [1], [2] và [4].
Tôi đã cố gắng tìm thứ tự ổ đĩa với tập lệnh Permute_array: https://ston.wiki.kernel.org/index.php/Permute_array.pl nhưng không tìm thấy thứ tự đúng.
Câu hỏi
Bây giờ tôi có hai câu hỏi chính:
Tôi đã vặn tất cả các siêu khóa trên các ổ đĩa, nhưng chỉ đưa ra:
mdadm --create --assume-clean
các lệnh (vì vậy tôi không nên ghi đè lên dữ liệu
/dev/sd[bde]1
. Tôi có đúng rằng về mặt lý thuyết , RAID có thể được khôi phục [giả sử trong giây lát/dev/sde1
là ổn] nếu tôi chỉ tìm đúng thứ tự thiết bị?Điều quan trọng là
/dev/sde1
được cung cấp số thiết bị [4] trong RAID? Khi tôi tạo nó vớimdadm --create /dev/md0 --assume-clean -l5 -n4 \ /dev/sdb1 missing /dev/sdd1 /dev/sde1
nó được gán số [3]. Tôi tự hỏi nếu điều đó có liên quan đến việc tính toán các khối chẵn lẻ. Nếu nó trở nên quan trọng, làm thế nào tôi có thể tạo lại mảng
/dev/sdb1[0]
bị thiếu [1]/dev/sdd1[2]
/dev/sde1[4]
? Nếu tôi có thể làm cho nó hoạt động, tôi có thể khởi động nó ở chế độ xuống cấp và thêm ổ đĩa mới/dev/sdc1
và để nó đồng bộ lại.
Sẽ ổn thôi nếu bạn muốn chỉ ra cho tôi rằng đây có thể không phải là cách hành động tốt nhất, nhưng bạn sẽ thấy rằng tôi đã nhận ra điều này. Sẽ thật tuyệt nếu có ai có bất cứ lời đề nghị nào.