Làm cách nào để kiểm tra RAID 'mdadm' trong khi chạy?


41

Tôi bắt đầu có một bộ sưu tập máy tính ở nhà và để hỗ trợ chúng Tôi có hộp linux "máy chủ" của tôi chạy một mảng RAID.

Hiện tại mdadm RAID-1, sẽ có RAID-5một khi tôi có nhiều ổ đĩa hơn (và sau đó RAID-6tôi đang hy vọng). Tuy nhiên, tôi đã nghe nhiều câu chuyện khác nhau về việc dữ liệu bị hỏng trên một ổ đĩa và bạn không bao giờ nhận thấy do ổ đĩa kia đang được sử dụng, cho đến khi ổ đĩa thứ nhất bị hỏng và bạn thấy ổ đĩa thứ hai của mình cũng bị hỏng (và thứ 3, thứ 4 , Ổ thứ 5).

Rõ ràng các bản sao lưu rất quan trọng và tôi cũng quan tâm đến điều đó, tuy nhiên tôi biết rằng trước đây tôi đã thấy các tập lệnh tuyên bố giúp khắc phục vấn đề này và cho phép bạn kiểm tra RAID trong khi chạy. Tuy nhiên, tìm kiếm các kịch bản này một lần nữa bây giờ tôi thấy khó tìm thấy bất cứ thứ gì có vẻ giống với những gì tôi đã chạy trước đây và tôi cảm thấy mình đã lỗi thời và không hiểu bất cứ điều gì đã thay đổi.

Làm thế nào bạn kiểm tra RAID đang chạy để đảm bảo tất cả các đĩa vẫn hoạt động bình thường?

Tôi giám sát SMART trên tất cả các ổ đĩa và cũng đã mdadmcài đặt email cho tôi trong trường hợp thất bại nhưng tôi cũng muốn biết các ổ đĩa của mình thỉnh thoảng cũng "tự kiểm tra".


Âm thanh như bạn đã đi đúng hướng, bạn chỉ cần thiết lập một cron để gửi cho bạn kết quả của smartctl cho các ổ đĩa của bạn.
laebshade

Câu trả lời:


56

Điểm quan trọng của RAID với sự dư thừa là nó sẽ tiếp tục hoạt động miễn là có thể, nhưng rõ ràng nó sẽ phát hiện ra các lỗi đưa nó vào chế độ xuống cấp, chẳng hạn như một đĩa bị hỏng. Bạn có thể hiển thị trạng thái hiện tại của một mảng với mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Hơn nữa, trạng thái trả về mdadm -Dlà khác không nếu có bất kỳ vấn đề nào, chẳng hạn như thành phần bị lỗi (1 chỉ ra lỗi mà chế độ RAID bù cho và 2 chỉ ra lỗi hoàn toàn).

Bạn cũng có thể nhận được một bản tóm tắt nhanh chóng về tất cả trạng thái thiết bị RAID bằng cách xem /proc/mdstat. Bạn cũng có thể nhận thông tin về một thiết bị RAID /sys/class/block/md*/md/*; xem Documentation/md.txttrong tài liệu kernel. Một số /sysmục có thể ghi là tốt; ví dụ bạn có thể kích hoạt kiểm tra đầy đủ md0với echo check >/sys/class/block/md0/md/sync_action.

Ngoài những kiểm tra tại chỗ này, mdadm có thể thông báo cho bạn ngay khi có chuyện không hay xảy ra. Hãy chắc chắn rằng bạn có MAILADDR roottrong /etc/mdadm.conf(một số bản phân phối (ví dụ như Debian) thiết lập này tự động). Sau đó, bạn sẽ nhận được thông báo qua email ngay khi xảy ra lỗi (một mảng bị xuống cấp) .

Đảm bảo rằng bạn nhận được thư gửi đến root trên máy cục bộ (một số bản phân phối hiện đại bỏ qua phần này, vì họ cho rằng tất cả email đều đi qua các nhà cung cấp bên ngoài - nhưng việc nhận thư cục bộ là cần thiết cho bất kỳ quản trị viên hệ thống nghiêm túc nào). Kiểm tra điều này bằng cách gửi thư gốc : echo hello | mail -s test root@localhost. Thông thường, một thiết lập email thích hợp đòi hỏi hai điều:

  • Chạy một MTA trên máy cục bộ của bạn. MTA phải được thiết lập ít nhất để cho phép gửi thư địa phương. Tất cả các bản phân phối đều đi kèm với các MTA phù hợp, chọn bất kỳ thứ gì (nhưng không phải là nullmailer nếu bạn muốn email được gửi cục bộ).
  • Chuyển hướng thư đến tài khoản hệ thống (ít nhất root) đến một địa chỉ mà bạn đọc thường xuyên. Đây có thể là tài khoản của bạn trên máy cục bộ hoặc địa chỉ email bên ngoài. Với hầu hết các MTA, địa chỉ có thể được cấu hình /etc/aliases; bạn nên có một dòng như

    root: djsmiley2k
    

    để giao hàng địa phương, hoặc

    root: djsmiley2k@mail-provider.example.com
    

    để giao hàng từ xa. Nếu bạn chọn phân phối từ xa, hãy đảm bảo rằng MTA của bạn được cấu hình cho điều đó. Tùy thuộc vào MTA của bạn, bạn có thể cần chạy newaliaseslệnh sau khi chỉnh sửa /etc/aliases.


Bạn có thể giải thích tại sao nullmailer không nên được sử dụng? Có phải vì những lý do được đề cập trong unix.stackexchange.com/questions/1449/ cấp ? MTA nào bạn muốn giới thiệu?
Cameron Martin

@CameronMartin Nullmailer chỉ chuyển tiếp thư đến một máy từ xa, nó không thực hiện chuyển phát cục bộ. Bạn có thể sử dụng nó nếu bạn có một máy chủ SMTP ở đâu đó chấp nhận thư từ máy của bạn, nhưng không phải nếu bạn đang gửi thư cục bộ. Tôi đã chỉnh sửa câu trả lời của mình để làm rõ.
Gilles 'SO- đừng trở nên xấu xa'

19

Bạn có thể buộc kiểm tra toàn bộ mảng trong khi trực tuyến. Ví dụ: để kiểm tra mảng trên /dev/md0, hãy chạy bằng root:

echo check > /sys/block/md0/md/sync_action

Tôi cũng có một công việc định kỳ chạy lệnh sau mỗi tháng một lần:

tar c /dir/of/raid/filesystem > /dev/null

Bản thân nó không phải là một kiểm tra kỹ lưỡng về ổ đĩa, nhưng nó buộc hệ thống phải định kỳ xác minh rằng (hầu hết) mọi tệp có thể được đọc thành công khỏi đĩa. Có, một số tệp sẽ được đọc ra khỏi bộ nhớ cache thay vì đĩa. Nhưng tôi hình dung rằng nếu tệp nằm trong bộ nhớ cache thì gần đây nó đã được đọc thành công trên đĩa hoặc sắp được ghi vào đĩa và một trong hai thao tác đó cũng sẽ phát hiện ra lỗi ổ đĩa. Dù sao, khi chạy công việc này, kiểm tra tiêu chí quan trọng nhất của mảng RAID (Tôi có thể đọc thành công dữ liệu của mình không? Lệnh này đã phát hiện ra nó.

Một cảnh báo nhỏ là nếu hệ thống tập tin của bạn lớn, thì lệnh này sẽ mất nhiều thời gian; hệ thống của tôi mất khoảng 6hr / TiB. Tôi chạy nó bằng cách sử dụng ioniceđể phần còn lại của hệ thống không bị dừng trong quá trình kiểm tra ổ đĩa:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

Lưu ý rằng ionicesẽ chỉ hoạt động nếu bạn sử dụng bộ lập lịch I / O CFQ (mặc định).
Totor

Vì vậy, điều này có thể rõ ràng với hầu hết, nhưng với tôi thì không - làm thế nào để chạy một tập lệnh có đầu ra được chuyển hướng để thực sự thông báo cho bạn về một cái gì đó? Đây có phải là trường hợp nếu "tar" gặp phải bất kỳ lỗi nào thì những lỗi này sẽ được truyền tới mdadm daemon, có lẽ sẽ gửi email cho bạn không?
ljwobker

Câu hỏi của tôi cho bạn một cách nghiêm túc, là làm thế nào để bạn nhận ra các lỗi tar nếu nó đang được chạy từ một công việc định kỳ? Sản lượng đó ở đâu? Tôi có thể nghĩ rằng bạn đã thêm một chuyển hướng cho stderr vào một tệp có thể được theo dõi định kỳ hoặc phần đuôi của nó được in ra để điều khiển mở một cửa sổ đầu cuối :)
Madivad

1
@ljwobker Xin lỗi vì đã hồi sinh một chủ đề cũ. Tôi nghĩ rằng mục đích của lệnh tar ở đây là cố gắng đọc toàn bộ nội dung của tập. Điều này sẽ xác minh toàn bộ ổ đĩa vẫn có thể đọc được và cho md cơ hội phát hiện đĩa xấu.
mikepj

1
Nếu nó đến từ một cronjob, cron thường sẽ gửi tất cả đầu ra của nó trực tiếp đến mailto = location, nếu một cái được đặt, nếu không thì sẽ root. Tuy nhiên ... tôi đang tự hỏi liệu dd sẽ tốt hơn tar, vì chi phí thấp hơn?
djsmiley2k - CoW

11

gói 'mdadm' của Debian và Ubuntu chứa tệp

/etc/cron.d/mdadm

đến lượt chủ nhật đầu tiên của mỗi tháng sẽ chạy lệnh

/usr/share/mdadm/checkarray --cron --all --idle --quiet

điều đó sẽ kiểm tra tất cả các mảng của bạn về tính nhất quán (trừ khi bạn đặt AUTOCHECK thành false trong / etc / default / mdadm ). Một báo cáo sẽ được gửi đến người dùng 'root' (đảm bảo bạn nhận được những email như vậy).


8

Tôi sử dụng chức năng đơn giản này để kiểm tra /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

khéo léo! tôi thích phong cách :) .. đây chính xác là những gì tôi đang tìm kiếm để đưa vào MOTD :) cảm ơn!
jirislav
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.