Làm thế nào để thay thế một cách an toàn một đĩa chưa bị lỗi trong mảng Linux RAID5?


26

Tôi có một mảng phần mềm RAID5 (Linux md) trên 4 đĩa.

Tôi muốn thay thế một trong các đĩa bằng một đĩa mới, mà không đặt mảng ở trạng thái xuống cấp , và nếu có thể, trực tuyến. Làm thế nào điều đó có thể?

Điều đó quan trọng bởi vì tôi không muốn:

  • có nguy cơ làm căng các đĩa khác để người ta có thể gặp sự cố trong quá trình xây dựng lại,
  • có nguy cơ ở trong "trạng thái không tương đương" vì vậy tôi không có mạng lưới an toàn trong một thời gian.

Tôi cho rằng làm như vậy trực tuyến là quá nhiều yêu cầu và tôi chỉ nên sao chép ( dd) dữ liệu của đĩa cũ sang ổ đĩa mới ngoại tuyến và sau đó thay thế nó, nhưng tôi nghĩ rằng về mặt lý thuyết là có thể ...

Một số bối cảnh : Tất cả các đĩa đã quay gần như liên tục trong hơn 5,5 năm. Chúng vẫn hoạt động hoàn hảo cho đến thời điểm hiện tại và tất cả đều vượt qua bài kiểm tra tự động (dài) SMART. Tuy nhiên, tôi có lý do để nghĩ rằng một trong 4 đĩa đó sẽ không tồn tại lâu hơn nữa (được cho là thất bại dự đoán).

Câu trả lời:


36

Sử dụng mdadm 3.3

Kể từ mdadm3.3 (phát hành 2013, ngày 3 tháng 9), nếu bạn có kernel 3.2+ , bạn có thể tiến hành như sau:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1là thiết bị bạn muốn thay thế, sdc1là thiết bị ưa thích để làm như vậy và phải được khai báo là phụ tùng trên mảng của bạn.

Các --withtùy chọn không bắt buộc, nếu không quy định, bất kỳ phụ tùng có sẵn sẽ được sử dụng.

Phiên bản mdadm cũ hơn

Lưu ý: Bạn vẫn cần kernel 3.2+ .

Đầu tiên, thêm một ổ đĩa mới như một phụ tùng (thay thế md0sdc1bằng thiết bị RAID và đĩa của bạn, tương ứng):

# mdadm /dev/md0 --add /dev/sdc1

Sau đó, bắt đầu một hoạt động thay thế sao chép như thế này ( sdd1là thiết bị bị lỗi):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

Kết quả

Hệ thống sẽ sao chép tất cả các khối có thể đọc được từ sdd1đến sdc1. Nếu nói đến một khối không thể đọc được, nó sẽ tái cấu trúc nó từ tính chẵn lẻ. Khi hoạt động hoàn tất, phụ tùng cũ (ở đây sdc1:) sẽ hoạt động và ổ đĩa bị lỗi sẽ được đánh dấu là không thành công (F) để bạn có thể loại bỏ nó.

Lưu ý: tín dụng dành cho frostschutzAnsgar Esztermann , người đã tìm ra giải pháp ban đầu (xem câu hỏi trùng lặp ).

Hạt nhân cũ

Các câu trả lời khác cho thấy:

  • Cách tiếp cận của Johnny : chuyển đổi mảng thành RAID6, "thay thế" đĩa, sau đó quay lại RAID5,
  • Cách tiếp cận của Hauke ​​Laging : loại bỏ nhanh chóng đĩa khỏi mảng RAID5, biến nó thành một phần của RAID1 (nhân bản) với đĩa mới và thêm ổ đĩa nhân bản đó trở lại mảng RAID5 (theo lý thuyết) ...

2
mdadm --addvẫn cần thiết trước khi --replacelàm việc ( mdadm3.3, Ubuntu 15.10). Nếu bạn thực hiện --addsau --replace, việc sao chép sẽ bắt đầu ngay khi có thêm phụ tùng. (Thiết bị vẫn được đánh dấu là "muốn thay thế").
Peter Cordes

3

Điều này có thể có thể đáp ứng các yêu cầu

  1. Trực tuyến
  2. không nhấn mạnh bất kỳ đĩa nào ngoại trừ cái được thay thế

Nhưng ngay cả khi những điều sau đây có thể hoạt động, bạn có thể sẽ không tìm thấy bất kỳ đề xuất nào thuộc loại đó "trong sách" ...

Ý kiến:

  1. Lấy đĩa OLD ra khỏi mảng (trong một thời gian ngắn): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Tạo một thiết bị md mới (RAID-1) từ các đĩa OLD và MỚI: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. Đặt RAID-1 trở lại mảng (thay vì / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

Điều gì nên :-) xảy ra:

  1. RAID-5 được đồng bộ hóa / dev / md42. Điều này sẽ không mất nhiều thời gian.
  2. RAID-5 thường hoạt động trở lại (nhưng chậm hơn).
  3. / dev / NEW được đồng bộ hóa với / dev / OLD.

Xem tiến trình đồng bộ hóa ( cat /proc/mdstathoặc mdadm --monitor). Nếu quá trình đồng bộ hóa kết thúc, hãy rút RAID-1 ra khỏi RAID-5, dừng RAID-1, thêm lại / dev / NEW vào RAID-5. Nếu mọi thứ đều ổn, hãy ghi đè lên các siêu khóa md sợ trên / dev / OLD để tránh các vấn đề:mdadm --zero-superblock

Cảnh báo: Đồng bộ hóa RAID-5 nhanh chỉ có thể hoạt động nếu bạn sử dụng bitmap. Nếu bạn chưa có thì tốt nhất hãy thực hiện kiểm tra với RAID-5 giả (không có bitmap) trước. Hoặc thêm một. Ít nhất là thêm một cái bên ngoài nên có thể. Nếu không, có thể cần phải dừng RAID-5 trước khi thay đổi thiết bị. Tuy nhiên, nếu bạn khởi động từ RAID-5 thì điều này sẽ trở nên hơi phức tạp.


3

Nếu bạn không ngại chạy RAID-6 (2 đĩa chẵn lẻ thay vì 1) và nếu bạn đang chạy mdadmin 3.1.x trở lên, bạn có thể chuyển đổi mảng RAID-5 sang RAID-6 để thêm một đĩa chẵn lẻ . Điều này sẽ đặt các mảng bị căng thẳng trong quá trình xây dựng lại, tuy nhiên. Và nó có một số hàm ý hiệu suất vì có nhiều đĩa chẵn lẻ để cập nhật trong quá trình ghi.

Nhưng nếu nó hoàn thành thành công, thì bạn có thể giữ đĩa hỏng của mình và khi cuối cùng nó bị lỗi, bạn vẫn có được sự bảo vệ tương đương cho mảng. Tôi nghĩ rằng bạn có thể hội tụ mảng từ RAID6 trở lại RAID5 nếu bạn không chờ đợi để giữ nó thành RAID6.

Tôi không biết một cách trực tuyến để giữ mảng là RAID-5 và thay thế đĩa mà không đặt mảng ở chế độ xuống cấp, vì tôi nghĩ bạn phải đánh dấu nó là không thể thay thế nó. Ý tưởng sao chép dd của bạn có thể là cách để làm điều đó.


@haukelaging FYI bây giờ có thể kể từ kernel 3.2, xem câu trả lời của tôi .
Totor
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.