Làm thế nào để theo dõi cuộc đột kích hệ thống tập tin BTRFS cho các lỗi?


11

Tôi đã thấy một số tài liệu về một daemon có thể thực thi chương trình / tập lệnh cho các sự kiện BTRFS khác nhau, nhưng tôi không thể tìm thấy nó nữa.

Làm cách nào để tập lệnh / chương trình được thực thi khi lỗi ổ đĩa cho mảng BTRFS raid1? Tôi muốn chạy một kịch bản trên bất kỳ lỗi nào để đóng vai trò là một cảnh báo sớm cho ổ đĩa có khả năng bị lỗi, nhưng lỗi ổ đĩa thực tế là quan trọng nhất. Tôi muốn ngắt kết nối hệ thống tập tin tại thời điểm đó (nếu đó không phải là những gì BTRFS làm) và đặt báo thức.


1
Tại sao bạn muốn hệ thống ngắt kết nối raid1 khi lỗi ổ đĩa? Đó là loại nhịp đập mục đích phải không? Ý tôi là bạn có thể có một số lý do cho nó, nhưng theo mặc định, nó không nên làm điều này
Petr

Tôi đã có một RAID5 có hai ổ đĩa bị lỗi trong một thời gian ngắn của nhau. Tôi đang tìm cách thiết lập một hệ thống mới sử dụng khả năng đột kích gương của BTRFS và phản ứng nhanh với các sự cố ổ đĩa (không nhất thiết là lỗi lái xe) để giảm khả năng thiệt hại thêm trong khi cung cấp thời gian để xử lý nguyên nhân ban đầu. Tôi hy vọng gương N-way của BTRFS một ngày nào đó sẽ hoạt động tốt.
Ioan

@Ioan: Đây là lý do tại sao RAID-5 không được khuyến nghị và RAID-6 nên được sử dụng thay thế. Một bộ phục hồi sẽ gây ra rất nhiều căng thẳng cho tất cả các ổ đĩa, điều này có thể khiến ổ đĩa thứ hai, có thể sắp hỏng, bị hỏng trong quá trình này. Không giống như RAID-5, RAID-6 có thể xử lý việc đó (bạn cũng có thể xem lại nó chỉ đọc và cập nhật bản sao lưu của mình trước khi thay thế ổ đĩa thứ hai).
bản6

Câu trả lời:


18

Ngoài hệ thống ghi nhật ký thông thường, BTRFS còn có lệnh thống kê , theo dõi các lỗi (bao gồm lỗi đọc, ghi và lỗi tham nhũng / tổng kiểm tra) trên mỗi ổ đĩa:

# btrfs device stats /
[/dev/mapper/luks-123].write_io_errs   0
[/dev/mapper/luks-123].read_io_errs    0
[/dev/mapper/luks-123].flush_io_errs   0
[/dev/mapper/luks-123].corruption_errs 0
[/dev/mapper/luks-123].generation_errs 0

Vì vậy, bạn có thể tạo một cronjob gốc đơn giản:

MAILTO=admin@myserver.com
@hourly /sbin/btrfs device stats /data | grep -vE ' 0$'

Điều này sẽ kiểm tra số lỗi tích cực mỗi giờ và gửi email cho bạn. Rõ ràng, bạn sẽ kiểm tra một kịch bản như vậy (ví dụ bằng cách gây ra tham nhũng hoặc xóa grep) để xác minh rằng thông báo email hoạt động.

Ngoài ra, với các hệ thống tệp nâng cao như BTRFS (đã kiểm tra lại), chúng tôi thường khuyên bạn nên lên lịch kiểm tra mỗi vài tuần để phát hiện tham nhũng thầm lặng do ổ đĩa xấu gây ra.

@monthly /sbin/btrfs scrub start -Bq /data

Các -Btùy chọn sẽ giữ chà ở mặt trước, do đó bạn sẽ thấy những kết quả trong cron email gửi cho bạn. Nếu không, nó sẽ chạy trong nền và bạn sẽ phải nhớ kiểm tra kết quả theo cách thủ công vì chúng sẽ không có trong email.

Cập nhật : Cải thiện grep theo đề xuất của Michael Kjorling, cảm ơn.

Cập nhật 2 : Ghi chú bổ sung về việc cọ rửa so với thao tác đọc thông thường (điều này không chỉ áp dụng cho BTRFS):
Như Ioan đã chỉ ra, một quá trình chà có thể mất nhiều giờ, tùy thuộc vào kích thước và loại mảng (và các yếu tố khác), thậm chí hơn một ngày trong một số trường hợp. Và nó là một hoạt động quét, nó sẽ không phát hiện ra các lỗi trong tương lai - mục tiêu của việc xóa là tìm và sửa lỗi trên các ổ đĩa của bạn tại thời điểm đó. Nhưng cũng như các hệ thống RAID khác, nên lập lịch trình định kỳ. Đúng là một thao tác i / o điển hình, như đọc một tệp, sẽ kiểm tra xem dữ liệu đã đọc có thực sự chính xác hay không. Nhưng hãy xem xét một tấm gương đơn giản - nếu bản sao đầu tiên của tệp bị hỏng, có thể do một ổ đĩa sắp chết, nhưng bản sao thứ hai, chính xác, thực sự được đọc bởi BTRFS, thì BTRFS sẽ không biết rằng có tham nhũng trên một trong các ổ đĩa. Điều này chỉ đơn giản là vì dữ liệu được yêu cầu đã được nhận,Điều này có nghĩa là ngay cả khi bạn đọc cụ thể một tệp mà bạn biết bị hỏng trên một ổ đĩa, không có gì đảm bảo rằng tham nhũng sẽ được phát hiện bởi thao tác đọc này.
Bây giờ, hãy giả sử rằng BTRFS chỉ đọc từ ổ đĩa tốt, không có hoạt động chà nào phát hiện ra thiệt hại trên ổ đĩa xấu và sau đó ổ đĩa tốt cũng bị hỏng - kết quả sẽ là mất dữ liệu (ít nhất BTRFS sẽ biết tập tin nào vẫn đúng và vẫn cho phép bạn đọc những tập tin đó). Tất nhiên, đây là một ví dụ đơn giản; trong thực tế, BTRFS sẽ không luôn luôn đọc từ một ổ đĩa và bỏ qua ổ đĩa khác.
Nhưng vấn đề là việc kiểm tra định kỳ rất quan trọng vì họ sẽ tìm thấy (và sửa) các lỗi mà các hoạt động đọc thông thường không nhất thiết phải phát hiện.

Ổ đĩa bị lỗi : Vì câu hỏi này khá phổ biến, tôi muốn chỉ ra rằng "giải pháp giám sát" này là để phát hiện các vấn đề với các ổ đĩa xấu có thể xảy ra (ví dụ: ổ đĩa chết gây ra lỗi nhưng vẫn có thể truy cập được).

Mặt khác, nếu một ổ đĩa bị mất đột ngột (bị ngắt kết nối hoặc chết hoàn toàn thay vì chết và tạo ra lỗi), đó sẽ là một ổ đĩa bị lỗi (ZFS sẽ đánh dấu một ổ đĩa đó là FAULTED). Thật không may, BTRFS có thể không nhận ra rằng một ổ đĩa đã biến mất trong khi hệ thống tập tin được gắn kết, như được chỉ ra trong mục nhập danh sách gửi thư này từ 09/2015 (có thể điều này đã được vá):

Sự khác biệt là chúng tôi có mã để phát hiện một thiết bị không có mặt tại mount, chúng tôi không có mã (chưa) để phát hiện thiết bị rơi trên hệ thống tập tin được gắn. Tại sao có phát hiện đúng cho một thiết bị biến mất dường như không phải là ưu tiên, tôi không biết, nhưng đó là một vấn đề riêng biệt với hành vi gắn kết.

https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg46598.html

Vào thời điểm đó, có rất nhiều thông báo lỗi trong dmesg, do đó, việc đưa dmesg có thể không đáng tin cậy.
Đối với máy chủ sử dụng BTRFS, có thể nên kiểm tra tùy chỉnh (công việc định kỳ) để gửi cảnh báo nếu ít nhất một trong các ổ đĩa trong mảng RAID bị mất, tức là không thể truy cập được nữa ...


1
Sẽ không có cái gì đó grep -vE ' 0$'tốt hơn?
một CVn

@ MichaelKjorling: Ý kiến ​​hay, tôi đã cập nhật câu trả lời của mình, cảm ơn bạn!
bản6

Đây là một ý tưởng hay và tôi thực hiện nó như một kiểm tra tính toàn vẹn thường xuyên. Tuy nhiên, có thể mất nhiều thời gian hơn một giờ để kiểm tra tất cả dữ liệu. Chưa kể sự hao mòn trên phần cứng nếu chạy liên tục để nhận lỗi. BTRFS kiểm tra tất cả các hoạt động của hệ thống tập tin thông thường và đó sẽ là cách hiệu quả hơn để phản ứng ngay lập tức với chúng.
Ioan

@loan: Bạn đã đúng, một chà có thể chạy trong nhiều giờ, vì vậy nó rõ ràng gây ra rất nhiều căng thẳng cho các ổ đĩa. Nhưng nó đã được thực hiện để phát hiện tham nhũng thầm lặng, vì vậy bạn có thể thay thế một ổ đĩa xấu trước khi một ổ đĩa khác cũng bị hỏng. Tham nhũng im lặng không xảy ra trong các hoạt động fs bình thường, vì vậy bạn sẽ không được thông báo tự động.
bản6

@ basic6: Hoàn toàn đúng, và điều này thật tuyệt vời cho điều đó. Tuy nhiên, nó không làm gì để phát hiện lỗi trong quá trình hoạt động bình thường, chẳng hạn như mảng BTRFS bị xuống cấp, cho đến lần chà tiếp theo. Tham nhũng thầm lặng có thể được xử lý bằng cách sử dụng chà hàng tháng cho hiệu quả, nhưng quá lâu cho các lỗi khác.
Ioan

4

Kể từ các thống kê btrfs-pross v4.11.1 có tùy chọn --check sẽ trả về giá trị khác không nếu bất kỳ giá trị nào khác không, loại bỏ sự cần thiết của biểu thức chính quy.

thống kê thiết bị -c /


3

Tôi sẽ không dựa vào lệnh thống kê để thông báo lỗi, bởi vì lệnh này trả về không có lỗi nếu một ổ đĩa đột nhiên biến mất. Bạn có thể kiểm tra nó bằng cách ngắt kết nối cáp sata hoặc kéo ổ đĩa - không được khuyến nghị với một hệ thống tệp quan trọng.

btrfs device stats /

Sau khi khởi động lại, btrfs hiển thị (các) ổ đĩa bị thiếu, nhưng điều đó có thể là quá muộn.

btrfs fi show

2

Dường như không có trình nền hoặc tiện ích báo cáo chính thức các sự kiện BTRFS để xử lý người dùng. Cách thay thế gần nhất là theo dõi nhật ký hệ thống cho các tin nhắn từ BTRFS và phản ứng tương ứng.

http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html

Liên kết trên cung cấp thêm chi tiết để định cấu hình tập lệnh ( secgói trên Debian hoặc SEC ) được thiết kế để theo dõi nhật ký mục đích chung để hành động trên các thông báo nhật ký không mong muốn liên quan đến BTRFS. Nó cũng phụ thuộc vào việc có một hệ thống tập tin được lên lịch thường xuyên để kiểm tra bit-rot và phát ra các mục nhật ký như là một biện pháp phòng ngừa. Dưới đây là một đoạn trích cụ thể cho kịch bản SEC:

Cách định cấu hình sec, bộ tương quan sự kiện để báo cáo lỗi hoặc cảnh báo hệ thống tập tin btrfs

Sau khi cài đặt sec.pl (apt-get install sec trên debian hoặc http://simple-evcorr.sourceforge.net/ ), hãy cài đặt 2 tệp cấu hình bên dưới.

Điều này không phải là hoàn hảo, nó dựa trên một biểu thức của các tin nhắn đã biết là ổn và báo cáo tất cả những tin nhắn chưa biết. Bạn có thể mở rộng regex tiêu cực về phía trước khi cần thiết.

polgara:~\# cat /etc/default/sec  
\#Defaults for sec  
RUN_DAEMON="yes"  
DAEMON_ARGS="-conf=/etc/sec.conf -input=/var/log/syslog -pid=/var/run/sec.pid -detach -log=/var/log/sec.log"

polgara:~# cat /etc/sec.conf  
\# http://simple-evcorr.sourceforge.net/man.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html  
type=SingleWithSuppress  
ptype=RegExp  
pattern=(?i)kernel.*btrfs: (?!disk space caching is enabled|use ssd allocation|use .* compression|unlinked .* orphans|turning on discard|device label .* devid .* transid|detected SSD devices, enabling SSD mode|has skinny extents|device label|creating UUID tree|checking UUID tree|setting .* feature flag|bdev.* flush 0, corrupt 0, gen 0)  
window=60  
desc=Btrfs unexpected log  
action=pipe '%t: $0' /usr/bin/mail -s "sec: %s" root

1

Âm thanh như một nhiệm vụ để giám sát hệ thống. Có tồn tại một kiểm tra thực hiện API Plugin Nagios được gọi là: check_btrfs . Như bạn có thể thấy trong mã nguồn, nó có một hàm được gọi là check_dev_statskiểm tra các số liệu thống kê của thiết bị và sẽ rất quan trọng nếu bất kỳ giá trị nào khác không. Nó cũng kiểm tra các vấn đề phân bổ. Điều vẫn chưa rõ ràng là cách kiểm tra hoạt động nếu một đĩa vắng mặt hoặc không hoạt động .

PS: Plugin được đóng gói trong Debian: theo dõi-plugins-btrfs

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.