ZFS 풀에서 읽는 동안 I / O 오류가 발생하면 두 가지 상황이 발생한다는 인상을 받았습니다.
- 실패는 관련 장치의 READ 또는 CKSUM 통계에 기록되어 풀 레벨을 향해 위쪽으로 전파됩니다.
- 중복 데이터는 요청 된 블록을 재구성하고, 요청 된 블록을 호출자에게 반환하고, 더프 드라이브가 여전히 작동하는 경우 블록을 다시 작성합니다. 또는
- 읽기 오류를 정정하기 위해 중복 데이터를 사용할 수없는 경우 I / O 오류가 리턴됩니다.
미러 설정의 디스크 중 하나가 불량 섹터를 개발 한 것으로 보입니다. 그 자체만으로는 놀라지 않습니다. 그런 일이 일어나고, 이것이 바로 중복성을 갖는 이유입니다 (양방향 미러). 풀을 문지르거나 특정 디렉토리의 파일을 읽을 때마다 (아직 오류가있는 파일을 정확하게 결정하기 위해 귀찮게하지 않았습니다) 다음은 다양한 타임 스탬프와 함께 dmesg에 나타납니다.
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
이것은 꽤 최신의 데비안 Wheezy, 커널 3.2.0-4-amd64 # 1 SMP 데비안 3.2.63-2 x86_64, ZoL 0.6.3입니다. 패키지 버전은 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. 내가 아는 유일한 패키지 고정은 ZoL을위한 것입니다 (zfsonlinux 패키지에서 제공).
Package: *
Pin: release o=archive.zfsonlinux.org
Pin-Priority: 1001
hdparm -R
드라이브에서 실행 하면 Write-Read-Verify가 켜져 있다고보고합니다 (Seagate이므로 해당 기능이 있으며 추가 안전망으로 사용합니다. 대화 형 사용 패턴을 매우 읽기 때문에 추가 쓰기 대기 시간은 문제가되지 않습니다) -무거운):
/dev/disk/by-id/ata-ST4000NM0033-9ZM170_XXXXXXXX:
write-read-verify = 2
무언가 잘못되었다는 분명한 증거가 있더라도 zpool status
수영장에 아무런 문제가 없다고 주장합니다.
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
이 오류는 최근 며칠 동안 (10 월 27 일 이후) 정기적으로 로그에 표시되어 있으므로 단지 우연히 그저 쓸 줄 모르는 경향이 없습니다. 매우 짧은 SCTERC 시간 초과로 디스크를 실행합니다. 1.5 초 읽기 (읽기 오류에서 빠르게 복구하기 위해), 10 초 쓰기. 이 값이 해당 드라이브에서 활성화되어 있음을 확인했습니다.
smartd는 ATA 오류 수가 증가하고 있다는 사실에 대해 저를 계속 괴롭 히고 있습니다.
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.
smartctl --attributes
해당 드라이브에서 실행 하면 다음이 생성됩니다.
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
아무것도 눈부시게 일반의 거기. 이 드라이브는 엔터프라이즈 드라이브이므로 5 년 보증 및 24x7 작동 등급 (지금까지는 벨트 아래 10,000 시간 미만에 비해 40,000 시간 이상 작동 할 수 있음)을 의미합니다. 187 Reported_Uncorrect 속성의 숫자 5를 확인하십시오. 그것이 문제가있는 곳입니다. 또한 각각 100 미만의 Start_Stop_Count 및 Power_Cycle_Count 값이 상당히 낮습니다.
이 경우에는 관련이 있다고 생각하지 않지만 시스템에는 ECC RAM이 있습니다.
풀 에서 루트 파일 시스템 의 비 기본 속성은 다음 과 같습니다.
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 -
풀 자체에 해당 합니다 .
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
이 목록은를 실행하여 얻었습니다 {zfs,zpool} get all akita | grep -v default
.
이제 질문이 있습니다.
ZFS 가 읽기 문제에 대해보고 하지 않는 이유는 무엇입니까? 분명히 회복되고 있습니다.
읽기 요청 경로에서 자동 복구를 위해 충분한 중복성이 존재하는 경우 ZFS가 드라이브에서 명확하게 읽기 문제가있는 더프 섹터를 자동으로 다시 쓰지 않는 이유는 무엇입니까?