Tóm tắt về TL; DR : Dịch số md sector thành offset (s) trong /dev/mdX
thiết bị và cách điều tra với xfs_db
. Số ngành là từ sh->sector
trong linux/drivers/md/raid5.c:handle_parity_checks5()
.
Tôi không biết nội bộ MD, vì vậy tôi không biết chính xác phải làm gì với đầu ra từ printk
nhật ký tôi đã thêm.
Việc bù vào các thiết bị thành phần (cho dd
hoặc trình soạn thảo / trình xem hex) cũng sẽ rất thú vị.
Tôi cho rằng tôi nên hỏi điều này trong danh sách gửi thư đột kích của Linux. Nó chỉ dành cho người đăng ký, hoặc tôi có thể đăng mà không đăng ký?
Tôi có xfs trực tiếp trên MD RAID5 của 4 đĩa trong máy tính để bàn của tôi (không có LVM). Một chà gần đây đã phát hiện ra một con số không mismatch_cnt
(thực tế là 8, vì md hoạt động trên các trang 4kiB cùng một lúc).
Đây là RAID5, không phải RAID1 / RAID10 trong đó mismatch_cnt
! = 0 có thể xảy ra trong quá trình hoạt động bình thường . (Các liên kết khác ở cuối trang wiki này có thể hữu ích với một số người.)
Tôi chỉ có thể mù quáng repair
, nhưng sau đó tôi không biết nên kiểm tra tập tin nào để tham nhũng, ngoài việc mất bất kỳ cơ hội nào để chọn cách tái tạo. Câu trả lời của Frostschutz cho một câu hỏi tương tự là gợi ý duy nhất tôi tìm thấy để theo dõi lại sự khác biệt trong hệ thống tập tin. Nó cồng kềnh và chậm chạp, và tôi muốn sử dụng cái gì đó tốt hơn để thu hẹp nó xuống một vài tệp trước tiên.
Bản vá hạt nhân để thêm đăng nhập
Kỳ lạ thay, tính năng kiểm tra của md không báo cáo nơi tìm thấy lỗi . Tôi đã thêm một printk
trong md / raid5.c để đăng nhập sh->sector
vào if
chi nhánh mà increments mddev->resync_mismatches
tronghandle_parity_checks5()
(vá nhỏ được công bố trên github , ban đầu dựa trên 4.5 rc4 từ kernel.org.) Đối với điều này là ok để sử dụng chung, nó có lẽ sẽ cần phải tránh làm ngập các bản ghi trong sửa chữa với rất nhiều sự không phù hợp (có thể chỉ đăng nhập nếu giá trị mới resync_mismatches
là <1000?). Cũng có thể chỉ đăng nhập check
và không repair
.
Tôi khá chắc chắn rằng tôi đang ghi nhật ký một cái gì đó hữu ích (mặc dù tôi không biết nội bộ MD!), Bởi vì cùng một chức năng in số ngành đó trong trường hợp xử lý lỗi củaswitch
.
Tôi đã biên dịch kernel đã sửa đổi của mình và khởi động nó, sau đó chạy lại kiểm tra:
[ 399.957203] md: data-check of RAID array md125
...
[ 399.957215] md: using 128k window, over a total of 2441757696k.
...
[21369.258985] md/raid:md125: check found mismatch at sector 4294708224 <-- custom log message
[25667.351869] md: md125: data-check done.
Bây giờ tôi không biết chính xác phải làm gì với số ngành đó. Là sh->sector * 512
một địa chỉ tuyến tính bên trong /dev/md/t-r5
(aka /dev/md125
)? Đây có phải là số ngành trong mỗi thiết bị thành phần (vì vậy nó đề cập đến ba dữ liệu và một khu vực tương đương)? Tôi đoán điều sau, vì sự không tương đương trong RAID5 có nghĩa là các thành phần N-1 của thiết bị md đang ở trong tình trạng nguy hiểm, được bù trừ cho nhau bằng đơn vị sọc. Là ngành 0 là khởi đầu của thiết bị thành phần, hay nó là khu vực sau siêu khối hay gì đó? Có nhiều thông tin hơn trong handle_parity_checks5()
đó tôi nên đã tính toán / đăng nhập không?
Nếu tôi chỉ muốn có được các khối không khớp, điều này có đúng không?
dd if=/dev/sda6 of=mmblock.0 bs=512 count=8 skip=4294708224
dd if=/dev/sdb6 of=mmblock.1 bs=512 count=8 skip=4294708224
dd if=/dev/sda6 of=mmblock.2 bs=512 count=8 skip=4294708224
dd if=/dev/sdd of=mmblock.3 bs=512 count=8 skip=4294708224 ## not a typo: my 4th component is a smaller full-disk
# i.e.
sec_block() { for dev in {a,b,c}6 d; do dd if=/dev/sd"$dev" of="sec$1.$dev" skip="$1" bs=512 count=8;done; }; sec_block 123456
Tôi đoán là không, bởi vì tôi nhận được 4k số không từ cả bốn thành phần đột kích, và 0^0 == 0
, vì vậy đó phải là sự tương đương chính xác, phải không?
Một nơi khác tôi đã thấy đề cập đến việc sử dụng địa chỉ sector trong md là cho sync_min
và sync_max
(trong sysfs). Neil Brown trong danh sách đột kích linux , để trả lời câu hỏi về một ổ đĩa bị lỗi với số ngành từ đó hdrecover
, trong đó Neil đã sử dụng số khu vực toàn đĩa làm số khu vực MD. Điều đó không đúng phải không? Các số ngành md sẽ không liên quan đến các thiết bị thành phần (phân vùng trong trường hợp đó), không phải là thiết bị đầy đủ mà phân vùng là một phần của?
khu vực tuyến tính đến tên tệp XFS:
Trước khi nhận ra rằng số md sector có lẽ là dành cho các thành phần, không phải thiết bị RAID, tôi đã thử sử dụng nó ở chế độ chỉ đọc xfs_db
:
Gợi ý rất ngắn gọn của Dave Chinner về cách tìm XFS đang sử dụng một khối nhất định dường như không hoạt động với tôi. (Tôi đã mong đợi một số loại kết quả, đối với một số lĩnh vực, vì số lượng không nên vượt quá cuối thiết bị ngay cả khi đó không phải là khu vực không khớp)
# xfs_db -r /dev/md/t-r5
xfs_db> convert daddr 4294708224 fsblock
0x29ad5e00 (699227648)
xfs_db> blockget -nv -b 699227648
xfs_db> blockuse -n # with or without -c 8
must run blockget first
Huh? Tôi làm gì sai ở đây? Tôi đoán đây là một câu hỏi riêng biệt. Tôi sẽ thay thế nó bằng một liên kết nếu / khi tôi hỏi nó hoặc tìm câu trả lời cho phần này ở một nơi khác.
RAID5 của tôi về cơ bản là không hoạt động, không có hoạt động ghi và đọc tối thiểu (và noatime
, do đó, đọc không tạo ra ghi).
Thêm công cụ về thiết lập của tôi, không có gì quan trọng ở đây
Nhiều tệp của tôi là video hoặc dữ liệu nén khác cung cấp một cách hiệu quả để biết liệu dữ liệu đó có chính xác hay không (có thể là tổng kiểm tra nội bộ ở định dạng tệp hoặc chỉ là liệu nó có giải mã được không có lỗi hay không). Điều đó sẽ làm cho phương thức loopback chỉ đọc này khả thi, một khi tôi biết nên kiểm tra tệp nào. Tuy nhiên, tôi không muốn chạy khác biệt 4 chiều của mọi tệp trong hệ thống tệp để tìm sự không phù hợp trước, khi hạt nhân có thông tin cần thiết trong khi kiểm tra và có thể dễ dàng đăng nhập nó.
của tôi /proc/mdstat
cho mảng dữ liệu số lượng lớn của tôi:
md125 : active raid5 sdd[3] sda6[0] sdb6[1] sdc6[4]
7325273088 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 0/19 pages [0KB], 65536KB chunk
Đó là trên các phân vùng trên ba ổ đĩa Toshiba 3TB và ổ đĩa xanh (chậm) WD25EZRS không phân vùng mà tôi sẽ thay thế bằng một chiếc Toshiba khác. (Sử dụng mdadm --replace
để thực hiện trực tuyến mà không có lỗ hổng dự phòng. Tôi nhận ra sau một bản sao rằng tôi nên kiểm tra sức khỏe RAID trước cũng như sau đó, để phát hiện sự cố. , vì tôi đã gặp một số sự cố gần một năm trước, nhưng tôi không có nhật ký cũ và mdadm dường như không gửi thư về việc này theo mặc định (Ubuntu 15.10).
Các hệ thống tập tin khác của tôi nằm trên các thiết bị RAID10f2 được tạo từ các phân vùng trước đó trên ba HD lớn hơn (và RAID0 cho / var / tmp). RAID5 chỉ dành cho lưu trữ số lượng lớn, không /home
hoặc /
.
Các ổ đĩa của tôi đều ổn: Số lỗi SMART là 0 tất cả các bộ đếm khối xấu trên tất cả các ổ đĩa và các bài kiểm tra SMART ngắn + dài đã qua.
gần như trùng lặp của câu hỏi này không có câu trả lời:
- Những khối nào không khớp trong một mảng md Linux?
- http://www.spinics.net/lists/ston/msg49459.html
- MDADM mismatch_cnt> 0. Có cách nào để xác định khối nào bất đồng không?
- Những thứ khác đã được liên kết nội tuyến, nhưng đáng chú ý nhất là ý tưởng loopback chỉ đọc của frostschutz .
- chà trên trang RAID wiki Arch
.damaged
hoặc một cái gì đó, thay vì chỉ biết có thể có một tập tin bị hỏng ở đâu đó.
mdadm -E /dev/xxx
.