풀에 완전한 오류가 발생했습니다. 어레이 섀시의 팬이 작동을 멈추고 모든 드라이브가 과열되었습니다. 냉각 후 Seagate의 Seatools 테스트 유틸리티를 사용하여 모든 드라이브가 정상인지 확인했고 smartctl에서는 드라이브가 정상임을 확인했습니다. 또한 각 장치에서 직접 데이터를 읽을 수 있으며 각 장치는 시스템에 표시됩니다.
하지만... 풀을 다시 온라인으로 가져오려고 하면 상태가 "UNAVAIL"입니다. 총 4개의 드라이브가 있는 raidz1 풀입니다. 내가 얻는 오류는 다음과 같습니다.
zpool cannot import pool one or more devices is currently unavailable
zpool 상태 표시:
NAME STATE READ WRITE CKSUM
pool_01 UNAVAIL 0 0 1
raidz1-0 DEGRADED 0 0 4
c0t5000C500A24AD833d0 ONLINE 0 0 4
c0t5000C500A232AFA6d0 ONLINE 0 0 4
3743539469189005045 UNAVAIL 0 0 0
c0t5000C500A243C8DEd0 ONLINE 0 0 4
logs
mirror-1 ONLINE 0 0 0
c0t5F8DB4C095690612d0s0 ONLINE 0 0 0
c0t5F8DB4C095691282d0s0 ONLINE 0 0 0
zpool clear는 체크섬을 지우지만 풀을 사용 가능하게 만들지는 않습니다. 이전에도 비슷한 동작을 본 적이 있으며 풀을 내보낸 후 다시 가져오면 문제가 해결되었습니다. 이번에는 그렇지 않습니다. 이번에는 시스템이 풀 가져오기를 거부합니다. -F를 사용하여 가져올 수 있지만 그렇게 하면 다시 사용할 수 없는 상태로 돌아갑니다.
한 가지 이상한 점은...위의 출력을 보면 "3743539469189005045"라는 장치가 있다는 것입니다. 이것이 무엇인지, 왜 풀과 연결되는지 전혀 모르겠습니다. 여기에 나열되어야 하는 실제 장치는 "c0t5000C500A22D9330d0"이며, 사용 가능하고 직접 읽을 수 있습니다.
이것을 무시하고 나는 이것이 raidz1 풀이므로 3개의 "온라인" 드라이브를 사용하여 가져올 수 있어야 한다고 생각했습니다. 아직하지 않았습니다. 그래서 제가 생각할 수 있는 모든 것을 시도한 후 다음을 실행했습니다.
zpool 가져오기-FX pool_01
"-X"를 어디서 얻었는지 잘 모르겠습니다. 제 노트에는 있지만 매뉴얼 페이지에서는 이에 대한 참조를 찾을 수 없습니다. 또한 이제 ZFS를 검색할 때마다 Solaris 대신 Linux 또는 FreeBSD가 시작되기 때문에 Google은 별로 도움이 되지 않습니다.
풀은 4개의 6TB 드라이브로 구성됩니다. 따라서 모든 블록을 스캔해야 한다면 총 18TB의 데이터에 대해 3개의 드라이브를 가져와야 합니다.
가져오기가 14일 동안 실행되었습니다. 오류가 발생하지 않으며 각 드라이브에서 읽기/쓰기 활동을 볼 수 있습니다. 일반적으로 iostat는 다음과 같습니다.
extended device statistics
r/sw/s Mr/s Mw/s wait actv wsvc_t asvc_t %w %b device
210.3 70.1 6.7 0.1 0.0 0.2 0.0 0.6 0 15 c0t5000C500A232AFA6d0
338.5 129.2 8.1 0.1 0.0 0.4 0.0 0.8 0 28 c0t5000C500A24AD833d0
210.3 70.1 6.7 0.1 0.0 0.2 0.0 0.6 0 13 c0t5000C500A243C8DEd0
한 드라이브는 다른 두 드라이브보다 지속적으로 더 바쁘지만 모든 통계는 매초마다 변경되므로 드라이브가 뭔가를 하고 있다고 믿게 됩니다.
PID를 트러스로 가져오려고 하면 트러스가 정지됩니다. zpool-pool_01 프로세스는 매초마다 다시 생성되며 너무 빨리 죽어서 추적조차 할 수 없고 PID가 무엇인지 모르기 때문에 아무 작업도 하지 않는 것이 분명합니다.
이제 내 질문은 -X 옵션이 Solaris에서 무엇을 합니까?입니다. 사용하기 전에는 가져오기가 즉시 실패했거나 UNAVAIL 상태로 가져왔습니다. 이제 가져오기가 무기한 실행됩니다. 실제로 뭔가를 하고 있고 가져오기에 성공할 가능성이 있다면 실행시켜도 괜찮습니다.
더 큰 피해를 입히지 않고 막을 수 있을까요? 이 풀을 온라인으로 전환할 수 있는 다른 방법이 있나요? 3개의 사용 가능한 디스크가 있는 4개의 디스크 풀이 어떻게 온라인 상태가 되지 않는지 여전히 혼란스럽습니다.
3743539469189005045 장치를 실제 장치(c0t5000C500A22D9330d0)로 다시 매핑하는 방법이 있습니까? 이것이 풀이 자체적으로 수정하는 데 도움이 됩니까?
시스템은 Solaris x64 11.4.27.0.1.82.1입니다. 여기에서는 더 이상 Solaris 관련 경험이 많지 않을 것이라는 것을 알고 있지만 ZFS와 그 역사에 대한 좋은 지식이 여러분 중 일부에게 도움이 될 수 있기를 바랍니다.
정말 도움이 필요해요. 이 어레이에는 많은 데이터가 있는데 내 실수로 인해 백업이 이루어지지 않았습니다. 중요한 데이터는 예전에는 중요한 데이터였지만 중요하지 않은 데이터가 너무 많이 손실되면 여전히 고통스러울 수 있습니다. 18TB는 많은 백업 용량이지만 백업 관점에서 보면 리소스가 제한되어 있습니다. 그럼에도 불구하고 그곳에서 교훈을 얻었습니다.
어떤 도움이라도 대단히 감사하겠습니다.
- -갱신- -
zpool 가져오기를 중지할 수 없어서 시스템을 재부팅했습니다(I/O 잠김). 간단한 zpool 극(즉, 풀 이름을 지정하지 않고 zpool import)을 시도하면 다음과 같은 결과를 얻습니다.
pool: pool_01
id: 346760273105473837
state: UNAVAIL
status: One or more devices are unavailable. action: The pool cannot be imported due to unavailable devices or data. The pool may be active on another system, but can be imported using the '-f' flag. config:
pool_01 UNAVAIL incorrect labeling data
raidz1-0 DEGRADED
c0t5000C500A24AD833d0 ONLINE
c0t5000C500A232AFA6d0 ONLINE
c0t5000C500A24AD833d0 UNAVAIL incorrect labeling data
c0t5000C500A243C8DEd0 ONLINE
logs
mirror-1 ONLINE
c0t5F8DB4C095690612d0s0 ONLINE
c0t5F8DB4C095691282d0s0 ONLINE
device details:
c0t5000C500A24AD833d0 UNAVAIL incorrect labeling data
status: ZFS detected errors on this device.
The device has bad label or disk contents.
c0t5000C500A24AD833d0이 어떻게 두 번 나타나는지 확인하십시오. 한 번은 "온라인"으로, 다른 한 번은 "사용할 수 없음"으로 표시됩니다. 또한 목록에 있어야 하는 다른 드라이브(c0t5000C500A22D9330d0)가 전혀 나열되지 않습니다.
format 명령은 풀에 속해야 하는 4개의 드라이브를 모두 표시합니다.
16. c0t5000C500A22D9330d0 <ATA-ST6000VN0041-2EL-SC61-5.46TB>
/scsi_vhci/disk@g5000c500a22d9330
17. c0t5000C500A24AD833d0 <ATA-ST6000VN0041-2EL-SC61-5.46TB>
/scsi_vhci/disk@g5000c500a24ad833
18. c0t5000C500A232AFA6d0 <ATA-ST6000VN0041-2EL-SC61-5.46TB>
/scsi_vhci/disk@g5000c500a232afa6
19. c0t5000C500A243C8DEd0 <ATA-ST6000VN0041-2EL-SC61-5.46TB>
/scsi_vhci/disk@g5000c500a243c8de
각각에 대해 "형식 유효성 검사"를 수행하면 오류가 반환되지 않습니다. 각 드라이브의 "포맷 확인" 출력은 다음과 같습니다.
Volume name = < >
ascii name = <ATA-ST6000VN0041-2EL-SC61-5.46TB>
bytes/sector = 512 sectors = 11721045167
accessible sectors = 11721045134
Part Tag Flag First Sector Size Last Sector
0 usr wm 256 5.46TB 11721028750
1 unassigned wm 0 0 0
2 unassigned wm 0 0 0
3 unassigned wm 0 0 0
4 unassigned wm 0 0 0
5 unassigned wm 0 0 0
6 unassigned wm 0 0 0
8 reserved wm 11721028751 8.00MB 11721045134
fmadm에는 결함이 표시되지 않습니다.
-f, -F, readonly=on 및 이러한 옵션의 다양한 조합을 사용하여 가져오려는 시도는 실패합니다. 대부분 실패: 'pool_01'을(를) 가져올 수 없습니다. 하나 이상의 장치를 현재 사용할 수 없습니다.
옵션(예: zpool import pool_01) 없이 가져오려고 하면 다음 오류가 반환됩니다.
cannot import 'pool_01': I/O error Destroy and re-create the pool from a backup source.
D833 드라이브를 삭제하고 가져오면 다음이 반환됩니다.
pool: pool_01
id: 346760273105473837
state: UNAVAIL
status: One or more devices are unavailable. action: The pool cannot be imported due to unavailable devices or data. config:
pool_01 UNAVAIL insufficient replicas
raidz1-0 UNAVAIL insufficient replicas
c0t5000C500A22D9330d0 UNAVAIL incorrect labeling data
c0t5000C500A232AFA6d0 ONLINE
c0t5000C500A24AD833d0 REMOVED
c0t5000C500A243C8DEd0 ONLINE
logs
mirror-1 ONLINE
c0t5F8DB4C095690612d0s0 ONLINE
c0t5F8DB4C095691282d0s0 ONLINE
device details:
c0t5000C500A22D9330d0 UNAVAIL incorrect labeling data
status: ZFS detected errors on this device.
The device has bad label or disk contents.
두 드라이브 모두 장치 식별자를 올바르게 표시합니다.
D833 드라이브를 다시 삽입하고 9330 드라이브를 제거하면 다음과 같이 표시됩니다. pool: pool_01 id: 346760273105473837 state: UNAVAIL status: 하나 이상의 장치를 사용할 수 없습니다. 조치: 장치 또는 데이터를 사용할 수 없기 때문에 풀을 가져올 수 없습니다. 풀은 다른 시스템에서 활성화될 수 있지만 "-f" 플래그를 사용하여 가져올 수 있습니다. 구성:
pool_01 UNAVAIL incorrect labeling data
raidz1-0 DEGRADED
c0t5000C500A24AD833d0 ONLINE
c0t5000C500A232AFA6d0 ONLINE
c0t5000C500A24AD833d0 UNAVAIL incorrect labeling data
c0t5000C500A243C8DEd0 ONLINE
logs
mirror-1 ONLINE
c0t5F8DB4C095690612d0s0 ONLINE
c0t5F8DB4C095691282d0s0 ONLINE
장치 세부정보:
c0t5000C500A24AD833d0 UNAVAIL incorrect labeling data
status: ZFS detected errors on this device.
The device has bad label or disk contents.
잘못된 장치 ID가 여기에 다시 표시됩니다. D833을 제거하면 모든 장치에서 올바른 이름이 보고되지만 이를 설치하면 9330과 혼동이 발생한다는 사실을 어떻게 설명해야 할지 모르겠습니다.
둘 다 제거하면 다음과 같이 표시됩니다.
pool: pool_01
id: 346760273105473837
state: UNAVAIL
status: One or more devices are unavailable. action: The pool cannot be imported due to unavailable devices or data. The pool may be active on another system, but can be imported using the '-f' flag. config:
pool_01 UNAVAIL incorrect labeling data
raidz1-0 DEGRADED
c0t5000C500A22D9330d0 REMOVED
c0t5000C500A232AFA6d0 ONLINE
c0t5000C500A24AD833d0 REMOVED
c0t5000C500A243C8DEd0 ONLINE
logs
mirror-1 ONLINE
c0t5F8DB4C095690612d0s0 ONLINE
c0t5F8DB4C095691282d0s0 ONLINE
내가 아는 한 모든 디스크는 완벽하게 작동합니다. 어딘가에 ZFS 태그 문제가 있는 것 같습니다. 형식 확인은 디스크 수준 레이블 문제를 보고하지 않기 때문에 적어도 그것은 내 추측입니다.
이는 zpool 메타데이터가 엉망이고 시스템이 두 개의 별도 장치로 분명히 인식하더라도 두 개의 서로 다른 장치(c0t5000C500A24AD833d0 및 c0t5000C500A22D9330d0)를 동일한 장치(c0t5000C500A24AD833d0)로 식별하는 것과 같습니다.
zpool 메타데이터를 수정하는 방법이 있습니까? zdb를 시도했지만 풀을 열 수 없어 방금 종료되었습니다. zdb: 'pool_01' 풀을 열 수 없습니다: I/O 오류
--- 업데이트 2 ---
주말 동안 더 깊이 파고들어 각 드라이브의 zpool 태그를 비교했습니다.
나는 (예를 들어) 다음을 사용했습니다.
zdb -ll /dev/dsk/c0t5000C500A24AD833d0s0
Solaris에서는 zpool 태그를 볼 때 슬라이스-0(d0s0)을 지정해야 합니다. 장치만 지정하면(예: ...d0 대 ...d0s0) 태그를 "분할할 수 없다"는 메시지가 표시됩니다. " "
제가 발견한 것은 조금 예상치 못한 것이었습니다. 레이블 중 하나를 제외한 모든 레이블은 일관적이었지만 불만 사항을 등록하지 않은 드라이브 중 하나(c0t5000C500A232AFA6d0 드라이브)에는 일관되지 않은 레이블이 있었습니다. 드라이브는 항상 "온라인"을 보고합니다. 그래서 변덕스럽게 어레이에서 드라이브를 제거하고 DEGRADED 상태의 풀을 가져왔습니다. 유망해 보였던 "zpool import -R /mnt/x -o readonly=on -f pool_01"을 사용하여 가져왔지만 이러한 희망은 빠르게 무너졌습니다. 어레이에서 파일, 스냅샷 등을 읽으려고 하면 거의 모든 것이 "/path/to/my/file: I/O error"를 반환하고 어레이의 CKSUM 번호가 급증하기 시작합니다.
현재 수영장은 이렇습니다..
pool: pool_01
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
Run 'zpool status -v' to see device specific details.
see: http://support.oracle.com/msg/ZFS-8000-8A
scan: resilvered 0 in 2m16s with 1 errors on Fri Feb 16 06:32:18 2024
config:
NAME STATE READ WRITE CKSUM
pool_01 DEGRADED 0 0 59K
raidz1-0 DEGRADED 0 0 118K
c0t5000C500A24AD833d0 DEGRADED 0 0 128K
c0t5000C500A22D9330d0 DEGRADED 0 0 118K
3743539469189005045 UNAVAIL 0 0 0
c0t5000C500A243C8DEd0 DEGRADED 0 0 116K
logs
mirror-1 ONLINE 0 0 0
c0t5F8DB4C095690612d0s0 ONLINE 0 0 0
c0t5F8DB4C095691282d0s0 ONLINE 0 0 0
errors: 32790 data errors, use '-v' for a list
UNAVAIL 또는 REMOVED를 보고하는 드라이브에 세심한 주의를 기울였으나 가져오기 실패의 원인이 된 드라이브가 오류나 불만 사항이 없는 드라이브 중 하나라는 사실을 발견했기 때문에 이는 다소 실망스럽습니다.
이제 제 질문은 "import -FX"를 사용하고 2주 동안 실행한 결과 손상된 데이터입니까?입니다. 즉. -X를 실행할 때 다른 옵션이 없다고 생각하여 제 발을 쏘고 있습니까? 아니면 데이터가 손상되지 않고 드라이브 자체에 문제가 있는 것인가요? 하드웨어 수준 오류를 보고하지 않더라도? 그리고...-X의 결과라면 복구할 수 있는 방법이 있나요?