Tại sao ZFS không làm bất cứ điều gì với khu vực duff của đĩa của tôi?


8

Tôi có ấn tượng rằng nếu xảy ra lỗi I / O trong quá trình đọc từ nhóm ZFS, hai điều sẽ xảy ra:

  1. Thất bại sẽ được ghi lại trong thống kê READ hoặc CKSUM của thiết bị có liên quan, truyền lên phía trên tới mức pool.
    • Dữ liệu dư thừa sẽ được sử dụng để xây dựng lại khối được yêu cầu, trả lại khối được yêu cầu cho người gọi và nếu ổ đĩa vẫn còn chức năng thì hãy viết lại khối cho nó, HOẶC
    • Một lỗi I / O sẽ được trả về nếu không có dữ liệu dư thừa để sửa lỗi đọc.

Dường như một trong các đĩa trong thiết lập nhân bản của tôi đã phát triển một khu vực xấu. Điều đó tự nó không đáng báo động; những điều như vậy xảy ra, và đó chính xác là lý do tại sao tôi có sự dư thừa (chính xác là gương hai chiều). Mỗi lần tôi xóa hồ bơi hoặc đọc qua các tệp trong một thư mục cụ thể (tôi vẫn chưa bận tâm để xác định chính xác tệp nào bị lỗi), các thông báo sau xuất hiện trong dmesg, rõ ràng là có dấu thời gian khác nhau:

Nov  1 09:54:26 yeono kernel: [302621.236549] ata6.00: exception Emask 0x0 SAct 0x9c10 SErr 0x0 action 0x0
Nov  1 09:54:26 yeono kernel: [302621.236557] ata6.00: irq_stat 0x40000008
Nov  1 09:54:26 yeono kernel: [302621.236566] ata6.00: failed command: READ FPDMA QUEUED
Nov  1 09:54:26 yeono kernel: [302621.236578] ata6.00: cmd 60/a8:78:18:5a:12/00:00:5c:01:00/40 tag 15 ncq 86016 in
Nov  1 09:54:26 yeono kernel: [302621.236580]          res 41/40:a8:18:5a:12/00:00:5c:01:00/00 Emask 0x409 (media error) <F>
Nov  1 09:54:26 yeono kernel: [302621.236585] ata6.00: status: { DRDY ERR }
Nov  1 09:54:26 yeono kernel: [302621.236589] ata6.00: error: { UNC }
Nov  1 09:54:26 yeono kernel: [302621.238214] ata6.00: configured for UDMA/133

Đây là một phiên bản Debian Wheezy khá cập nhật, kernel 3.2.0-4-amd64 # 1 SMP Debian 3.2.63-2 x86_64, ZoL 0.6.3. Các phiên bản gói hiện có tại debian-zfs = 7 ~ wheezy, libzfs2 = 0.6.3-1 ~ wheezy, zfs-dkms = 0.6.3-1 ~ wheezy, zfs-initramfs = 0.6.3-1 ~ wheezy, zfsutils = 0.6 .3-1 ~ wheezy, zfsonlinux = 3 ~ wheezy, linux-image-amd64 = 3.2 + 46, linux-image-3.2.0-4-amd64 = 3.2.63-2. Gói ghim duy nhất mà tôi biết là dành cho ZoL, mà tôi có (như được cung cấp bởi gói zfsonlinux):

Package: *
Pin: release o=archive.zfsonlinux.org
Pin-Priority: 1001

Chạy hdparm -Rtrên ổ đĩa báo cáo rằng Write-Read-Confirm được bật (đây là Seagate, tính năng đó cũng vậy và tôi sử dụng nó như một mạng an toàn bổ sung; độ trễ ghi bổ sung không phải là vấn đề vì mẫu sử dụng tương tác của tôi rất dễ đọc -nặng):

/dev/disk/by-id/ata-ST4000NM0033-9ZM170_XXXXXXXX:
 write-read-verify =  2

Ngay cả khi đưa ra dấu hiệu rõ ràng rằng có gì đó không ổn, zpool statustuyên bố rằng không có vấn đề gì với nhóm:

  pool: akita
 state: ONLINE
  scan: scrub repaired 0 in 8h16m with 0 errors on Sat Nov  1 10:46:03 2014
config:

        NAME                        STATE     READ WRITE CKSUM
        akita                       ONLINE       0     0     0
          mirror-0                  ONLINE       0     0     0
            wwn-0x5000c50065e8414a  ONLINE       0     0     0
            wwn-0x5000c500645b0fec  ONLINE       0     0     0

errors: No known data errors

Lỗi này đã xuất hiện thường xuyên trong nhật ký trong vài ngày qua (kể từ ngày 27 tháng 10), vì vậy tôi không có khuynh hướng viết nó ra chỉ đơn thuần là một con sán. Tôi chạy các đĩa với thời gian chờ SCTERC khá ngắn; 1,5 giây đọc (để phục hồi nhanh chóng từ lỗi đọc), 10 giây ghi. Tôi đã xác nhận rằng các giá trị này đang hoạt động trên ổ đĩa được đề cập.

smartd tiếp tục làm phiền tôi (mà bản thân nó là một điều tốt!) về thực tế là số lỗi ATA đang tăng lên:

The following warning/error was logged by the smartd daemon:

Device: /dev/disk/by-id/ata-ST4000NM0033-9ZM170_XXXXXXXX [SAT], ATA error count increased from 4 to 5

For details see host's SYSLOG.

Chạy smartctl --attributestrên ổ đĩa trong câu hỏi mang lại như sau:

smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-4-amd64] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   076   063   044    Pre-fail  Always       -       48910012
  3 Spin_Up_Time            0x0003   091   091   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       97
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   092   060   030    Pre-fail  Always       -       1698336160
  9 Power_On_Hours          0x0032   089   089   000    Old_age   Always       -       9887
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       98
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   095   095   000    Old_age   Always       -       5
188 Command_Timeout         0x0032   100   099   000    Old_age   Always       -       10
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   058   052   045    Old_age   Always       -       42 (Min/Max 20/45)
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       61
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       492
194 Temperature_Celsius     0x0022   042   048   000    Old_age   Always       -       42 (0 11 0 0)
195 Hardware_ECC_Recovered  0x001a   052   008   000    Old_age   Always       -       48910012
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0

Không có gì hào nhoáng ngoài kia bình thường. Lưu ý rằng đây là ổ đĩa dành cho doanh nghiệp, do đó, bảo hành năm năm được xếp hạng cho hoạt động 24x7 (có nghĩa là nó đáng tin cậy trong hơn 40.000 giờ hoạt động, so với chỉ dưới 10.000 giờ cho đến nay). Lưu ý số 5 trong thuộc tính 187 Báo cáo_ Không chính xác; đó là vấn đề. Cũng lưu ý các giá trị Start_Stop_Count và Power_Cycl_Count khá thấp dưới 100 mỗi giá trị.

Không phải tôi nghĩ nó có liên quan trong trường hợp này, nhưng đúng vậy, hệ thống có RAM ECC.

Các thuộc tính không mặc định của hệ thống tệp gốc trên nhóm là:

NAME   PROPERTY              VALUE                  SOURCE
akita  type                  filesystem             -
akita  creation              Thu Sep 12 18:03 2013  -
akita  used                  3,14T                  -
akita  available             434G                   -
akita  referenced            136K                   -
akita  compressratio         1.04x                  -
akita  mounted               no                     -
akita  mountpoint            none                   local
akita  version               5                      -
akita  utf8only              off                    -
akita  normalization         none                   -
akita  casesensitivity       sensitive              -
akita  usedbysnapshots       0                      -
akita  usedbydataset         136K                   -
akita  usedbychildren        3,14T                  -
akita  usedbyrefreservation  0                      -
akita  sync                  standard               local
akita  refcompressratio      1.00x                  -
akita  written               0                      -
akita  logicalused           2,32T                  -
akita  logicalreferenced     15K                    -

và tương ứng cho chính hồ bơi :

NAME   PROPERTY               VALUE                  SOURCE
akita  size                   3,62T                  -
akita  capacity               62%                    -
akita  health                 ONLINE                 -
akita  dedupratio             1.00x                  -
akita  free                   1,36T                  -
akita  allocated              2,27T                  -
akita  readonly               off                    -
akita  ashift                 12                     local
akita  expandsize             0                      -
akita  feature@async_destroy  enabled                local
akita  feature@empty_bpobj    active                 local
akita  feature@lz4_compress   active                 local

Những danh sách này có được bằng cách chạy {zfs,zpool} get all akita | grep -v default.

Bây giờ cho các câu hỏi:

  1. Tại sao ZFS không báo cáo bất cứ điều gì về vấn đề đọc? Nó đang hồi phục rõ ràng từ nó.

  2. Tại sao ZFS không tự động viết lại khu vực duff mà ổ đĩa rõ ràng đang gặp sự cố khi đọc, do đó hy vọng sẽ kích hoạt việc di chuyển bởi ổ đĩa, do có đủ dư thừa để sửa chữa tự động trong đường dẫn yêu cầu đọc?


Tôi không biết. Có thể bạn không nhấn các tập tin bị ảnh hưởng. Hoặc có lẽ không có tập tin nào bị ảnh hưởng vào thời điểm này.
ewwhite

@ewwhite Trong quá trình chà, chạy liên tục gây ra lỗi hiển thị trong nhật ký hệ thống? (Lỗi cũng xuất hiện khi tôi ghi một tập hợp các tệp vào DVD, đó là những gì ban đầu tôi đã xem xét này.) Ngoài ra còn có một tấn ảnh chụp nhanh trên hồ bơi sẽ quay trở lại.
CVn

Được nâng cấp bởi vì tôi không chắc tại sao bạn gặp phải điều này với ZFS - Thật thú vị khi xem liệu đây có phải là lỗi không ... Tuy nhiên, từ quan điểm của một sysadmin, đĩa quay là vật tư tiêu hao. Tôi có các đĩa là DOA, chết trong vòng vài tuần, chết sau một năm ... và một số thất bại sau 5 năm. Nếu bạn nghi ngờ vấn đề nghiêm trọng, hãy thay thế ổ đĩa.
ewwhite

1
Đúng. Bạn cũng đã đăng lên nhóm ZFS?
ewwhite

1
Tôi không có câu trả lời cho bạn, nhưng tôi đã thấy hành vi tương tự trên FreeBSD. Một ổ đĩa bị lỗi dẫn đến hiệu suất giảm và rất nhiều lỗi được in ra bàn điều khiển, nhưng không thể tăng bất kỳ bộ đếm lỗi cấp độ zpool nào. Tôi chưa tìm thấy lời giải thích, nhưng ít nhất có thể đáng để xem xét rằng đây không phải là một hiện tượng dành riêng cho Linux.
Charley

Câu trả lời:


1

Tôi nghi ngờ trình điều khiển ATA đang thử lại thao tác đọc một vài lần khi nó nhận được lỗi trước khi chuyển lỗi trở lại trình điều khiển hệ thống tập tin.

Điều này có nghĩa là vào thời điểm trình điều khiển hệ thống tập tin ZFS nhận được kết quả của việc đọc dữ liệu ở đó và chính xác, nhưng có thể mất nhiều thời gian hơn bình thường để xảy ra. Tất nhiên không có bộ đếm lỗi cho độ trễ cao hơn mức trung bình, vì vậy không có gì được ghi lại.

Thực tế là giá trị SMART cho Báo cáo_ Không chính xác không phải là 0 khiến tôi nghi ngờ rằng nguyên nhân của sự cố là do chính đĩa, trái ngược với việc nói rằng cáp SATA hoặc bộ điều khiển SATA bị bong ra.

Nếu đây là trường hợp, rất có thể đĩa cuối cùng sẽ chết nhiều hơn và bắt đầu không đọc được ngay cả khi nhiều lần thử lại trình điều khiển thiết bị khối đang cố gắng. Như vậy lời khuyên của tôi sẽ là thay thế đĩa.

Việc thử nghiệm một bài kiểm tra SMART dài có thể sẽ thất bại trên các khối bị ảnh hưởng, nếu bạn muốn làm cho lỗi biến mất việc viết lại các khối đó (ví dụ với dd) sẽ khiến đĩa hoán đổi các khu vực đó, nhưng theo kinh nghiệm của tôi là khi một ổ đĩa bắt đầu để đi tốt hơn là chỉ cần thay thế nó và được thực hiện với nó.


0

Tôi đã có một đĩa SCSI xấu với một cuộc đột kích ZFS trên Solaris. Tôi đã quét các tệp nhật ký để biết thông tin về các thông báo lỗi để thu thập bằng chứng đĩa bị hỏng và nhờ Oracle bảo vệ nó trong phần bảo trì phần cứng. Tôi đã chạy grep cho một số chuỗi nhất định trong nhật ký lỗi và những dòng này hiển thị lỗi đĩa sẽ nằm trong màn hình bảng điều khiển của tôi. Khi "Explorer" (công cụ báo cáo và nhật ký hệ thống cho Solaris) được chạy và gửi tới Oracle, họ nói rằng không có lỗi trên các đĩa. Nhưng tôi đã có chúng trên lịch sử màn hình của tôi. Tôi đã kiểm tra và nó thực sự đã đi từ các bản ghi trên đĩa.

Đây là những gì đang diễn ra ... ZFS hứa hẹn không có lỗi hệ thống tệp, không phải lỗi dữ liệu. Khi gặp phải một tham nhũng nghiêm trọng, nó sẽ khôi phục giao dịch, làm bất cứ điều gì được yêu cầu để làm cho tính toàn vẹn của hệ thống tệp tốt. Do đó, các cập nhật tệp bị mất khi quay lại phiên bản cũ hơn của tệp trước khi bị hỏng và do đó mất dữ liệu có thể xảy ra. Nhưng hệ thống tập tin của bạn không có lỗi.

Có lẽ đối với các lỗi đơn giản, ZFS có thể khôi phục và ghi lại dữ liệu trong một lần thử khác, nhưng có vẻ như trong các trường hợp nghiêm trọng về hành vi đĩa xấu, nó có thể bị kẹt trong 22 khi dữ liệu không được phục hồi và ghi. Nếu bạn cần thu thập bằng chứng về lỗi đĩa, hãy để chúng xuất hiện trên màn hình và không dựa vào bằng chứng sẽ nằm trên đĩa, nơi dữ liệu có khả năng được đặt lại bởi các giao dịch ZFS.


Hai điều. Một, tôi không hoàn toàn thấy cách này trả lời câu hỏi; có lẽ bạn có thể làm rõ? Hai, câu trả lời này dường như không chính xác. Theo lời của một trong những người lãnh đạo nhóm ZFS ban đầu , "lưu ý rằng tính toàn vẹn dữ liệu từ đầu đến cuối của ZFS không yêu cầu bất kỳ phần cứng đặc biệt nào" (nhấn mạnh của tôi). Nếu xảy ra sự cố hệ thống, bạn có thể mất txg hiện tại và zpool import -Fcó thể được sử dụng nếu các txss gần đây không sử dụng được, nhưng các khiếu nại về việc quay lại txg tự động sẽ IMO yêu cầu trích dẫn.
một CVn

OP đã hỏi: "Tại sao ZFS không báo cáo bất cứ điều gì về vấn đề đọc". Tôi đang trả lời rằng. ZFS không thể báo cáo các tệp trên đĩa khi không thể ghi vào đĩa. ZFS không thể hoàn hảo khi hiệu suất phần cứng không hoàn hảo. Tất cả những gì nó có thể hy vọng đạt được là bảo vệ chống tham nhũng hệ thống tập tin. "Toàn vẹn dữ liệu kết thúc" phụ thuộc vào "dữ liệu" và "toàn vẹn" nghĩa là gì. Tôi tin rằng nó có nghĩa là "không tham nhũng", không phải "tất cả dữ liệu của bạn sẽ được ghi / đọc hoàn hảo trong bất kỳ điều kiện nào". Có một cách để kiểm tra mất tập tin dưới / var, check / var / log cho số giờ / ngày bị thiếu. Tôi đã thấy điều đó.
labradort

(1) Tôi là OP. (2) Như thể hiện trong câu hỏi, vdev là một cấu hình gương. (3) Khẳng định là một khi dữ liệu trên ZFS được lưu trữ liên tục, nó sẽ vẫn ở đó và có thể đọc được hoặc thao tác I / O sẽ trả về lỗi đọc. (4) HĐH đã phát hiện rõ vấn đề I / O và chính hạt nhân hoặc ZFS đã phục hồi từ nó (do thao tác đọc thành công), nhưng lỗi I / O không được ghi lại trong các số liệu thống kê nhóm.
một CVn

ZFS của tôi cũng là một tấm gương. Nhưng lỗi phần sụn có thể phun rác khiến không có đĩa nào hoạt động bình thường. Đâu là lỗi và số liệu thống kê hồ bơi? Để phương tiện truyền thông xấu. Tìm trong các tệp trong khu vực / var / log của bạn. Nhìn vào các tập tin liên tục được ghi vào, cho bất cứ điều gì máy chủ của bạn làm. Nếu thư, hãy nhìn vào maillog. Nếu web, nhìn vào nhật ký truy cập. Nếu không hãy thử tin nhắn. Nếu tôi đúng, sẽ có những khoảng trống thời gian (trong trường hợp của tôi, ngày mất tích) từ các tệp nhật ký. Đó là bằng chứng của bạn rằng dữ liệu đang bị mất. Đừng tin tôi. Đừng tìm trích dẫn. Nhìn vào các tập tin của bạn, và điều đó có thể xác nhận những gì đang xảy ra.
labradort
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.