탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
![]() |
Oracle Solaris 11.1 관리: ZFS 파일 시스템 Oracle Solaris 11.1 Information Library (한국어) |
1. Oracle Solaris ZFS 파일 시스템(소개)
3. Oracle Solaris ZFS 저장소 풀 관리
5. Oracle Solaris ZFS 파일 시스템 관리
6. Oracle Solaris ZFS 스냅샷 및 복제 작업
7. ACL 및 속성을 사용하여 Oracle Solaris ZFS 파일 보호
10. Oracle Solaris ZFS 문제 해결 및 풀 복구
이 절에서는 장치 오류 유형 확인, 일시적인 오류 지우기 및 장치 교체 방법에 대해 설명합니다.
손상된 장치라는 용어는 다소 모호하므로 여러 가지 가능한 상황을 들어 설명할 수 있습니다.
비트 로트 – 시간이 경과하면 자기적 영향 및 우주선(cosmic ray)과 같은 모든 이벤트로 인해 디스크에 저장된 비트가 플립됩니다. 이러한 이벤트는 상대적으로 발생할 확률이 거의 없지만, 대형 시스템 또는 장기 실행 중인 시스템에서 데이터 손상을 일으킬 가능성이 있습니다.
잘못 지정된 읽기 또는 쓰기 – 펌웨어 버그 또는 하드웨어 결함으로 인해 전체 블록의 읽기 또는 쓰기가 디스크의 잘못된 위치를 참조할 수 있습니다. 이러한 오류는 보통 일시적이지만, 이 오류의 대부분이 고장난 드라이브를 나타낼 수 있습니다.
관리자 오류 – 관리자가 실수로 디스크의 일부분을 잘못된 데이터로 덮어쓸 수 있습니다(예: /dev/zero를 디스크 일부분으로 복사). 이로 인해 디스크에 영구적인 손상이 발생할 수 있습니다. 이 오류는 항상 일시적입니다.
일시적인 작동 중단 – 일정 기간 동안 디스크를 사용할 수 없게 되어 I/O가 실패합니다. 이 상황은 보통 네트워크 연결 장치와 관련이 있지만, 로컬 디스크에서 일시적인 작동 중단이 발생할 수 있습니다. 이 오류는 일시적일 수도 있고 일시적이지 않을 수도 있습니다.
잘못되거나 이상한 하드웨어 – 이 상황은 일관된 I/O 오류, 모든 손상을 일으키는 잘못된 전송 또는 여러 오류와 같이 고장난 하드웨어에서 발생하는 다양한 문제에 모두 적용됩니다. 이 오류는 보통 영구적입니다.
오프라인 장치 – 장치가 오프라인일 경우 장치에 결함이 있어 관리자가 해당 장치를 이 상태로 설정한 것으로 간주합니다. 장치를 이 상태로 설정한 관리자는 이러한 가정이 정확한지 확인할 수 있습니다.
장치에서 발생한 문제가 무엇인지 정확하게 확인하는 것은 어려운 프로세스일 수 있습니다. 첫번째 단계는 zpool status 출력에서 오류 카운트를 확인하는 것입니다. 예를 들면 다음과 같습니다.
# zpool status -v tank pool: tank state: ONLINE 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. see: http://support.oracle.com/msg/ZFS-8000-8A config: NAME STATE READ WRITE CKSUM tank ONLINE 2 0 0 c8t0d0 ONLINE 0 0 0 c8t0d0 ONLINE 2 0 0 errors: Permanent errors have been detected in the following files: /tank/file.1
오류는 I/O 오류와 체크섬 오류로 분류되는데, 둘 다 발생 가능한 오류 유형을 나타냅니다. 일반적인 작업의 경우 매우 적은 수의 오류(긴 기간 동안 소수의 오류)가 발생할 것으로 예측됩니다. 많은 수의 오류가 표시될 경우 이는 임박한 장치 오류나 전체 장치 오류를 나타내는 것일 수 있습니다. 그러나 관리자 오류로 인해 많은 오류 카운트가 발생할 수도 있습니다. 정보의 다른 소스는 syslog 시스템 로그입니다. 로그에 많은 수의 SCSI 또는 Fibre Channel 드라이버 메시지가 표시될 경우 이는 심각한 하드웨어 문제를 나타내는 것일 수 있습니다. syslog 메시지가 생성되지 않을 경우 일시적인 손상일 수 있습니다.
목표는 다음 질문에 답하는 것입니다.
이 장치에서 또 다른 오류가 발생할 가능성이 있습니까?
한 번만 발생하는 오류는 일시적인 오류로 간주되고 잠재적인 실패를 나타내지 않습니다. 잠재적인 하드웨어 실패를 나타낼 수 있는 영구적이거나 심각한 오류는 치명적인 오류로 간주됩니다. 오류의 유형을 확인하는 작업은 현재 ZFS에서 제공하는 자동 소프트웨어의 범위를 벗어나는 것이므로, 관리자가 수동으로 많은 부분을 수행해야 합니다. 확인이 이루어진 후에 적절한 조치를 취할 수 있습니다. 일시적인 오류를 지우거나 치명적인 오류가 발생한 장치를 교체하십시오. 이러한 복구 절차는 다음 절에서 설명합니다.
장치 오류가 일시적인 오류로 간주되더라도 풀 내에서 해결할 수 없는 데이터 오류를 일으킬 수도 있습니다. 이 경우 기본 장치가 정상적으로 작동하거나 복구되었다 하더라도 이러한 오류에는 특별한 복구 절차가 필요합니다. 데이터 오류 복구에 대한 자세한 내용은 손상된 데이터 복구를 참조하십시오.
장치 오류가 일시적인 오류로 간주될 경우, 장치의 이후 상태에 영향을 줄 가능성이 거의 없으므로 치명적인 오류가 발생하지 않음을 나타내도록 안전하게 오류를 지우십시오. RAID-Z 또는 미러링된 장치에 대한 오류 카운터를 지우려면 zpool clear 명령을 사용하십시오. 예를 들면 다음과 같습니다.
# zpool clear tank c1t1d0
이 구문은 장치 오류를 지우고 해당 장치와 연관된 데이터 오류 카운트를 지웁니다.
풀의 가상 장치와 연관된 모든 오류를 지우고 해당 풀과 연관된 데이터 오류 카운트를 지우려면 다음 구문을 사용하십시오.
# zpool clear tank
풀 오류 지우기에 대한 자세한 내용은 저장소 풀 장치 오류 지우기를 참조하십시오.
장치 손상이 영구적이거나 이후에 영구적인 손상이 될 가능성이 있을 경우 장치를 교체해야 합니다. 장치를 교체할 수 있는 여부는 구성에 따라 달라집니다.
교체할 장치가 중복 구성의 일부일 경우 정상적인 데이터를 검색할 수 있는 충분한 복제본이 있어야 합니다. 예를 들어 4방향 미러의 두 디스크가 UNAVAIL 상태인 경우 정상 상태인 복제본을 사용할 수 있으므로 둘 중 한 디스크를 교체할 수 있습니다. 그러나 4방향 RAID-Z(raidz1) 가상 장치의 두 디스크가 UNAVAIL 상태인 경우, 데이터를 검색할 수 있는 충분한 복제본이 없으므로 어떠한 디스크도 교체할 수 없습니다. 장치가 손상되었으나 온라인일 경우 풀이 UNAVAIL 상태가 아니라면 장치를 교체할 수 있습니다. 그러나 정상적인 데이터를 포함하는 복제본이 부족할 경우 장치의 손상된 데이터가 새 장치로 복사됩니다.
다음 구성에서 c1t1d0 디스크는 교체할 수 있으며, 풀의 데이터는 정상 복제본 c1t0d0에서 복사됩니다.
mirror DEGRADED c1t0d0 ONLINE c1t1d0 UNAVAIL
c1t0d0 디스크도 교체할 수 있지만, 정상적인 복제본을 사용할 수 없으므로 데이터 자체 치료가 수행되지 않습니다.
다음 구성에서는 UNAVAIL 디스크를 교체할 수 없습니다. ONLINE 디스크는 풀 자체가 UNAVAIL 상태이므로 교체할 수 없습니다.
raidz1 UNAVAIL c1t0d0 ONLINE c2t0d0 UNAVAIL c3t0d0 UNAVAIL c4t0d0 ONLINE
다음 구성에서 최상위 디스크는 교체할 수 있지만, 디스크에 있는 잘못된 데이터가 새 디스크로 복사됩니다.
c1t0d0 ONLINE c1t1d0 ONLINE
디스크가 UNAVAIL인 경우 풀 자체가 UNAVAIL이기 때문에 교체를 수행할 수 없습니다.
장치 손실로 인해 풀이 UNAVAIL 상태가 되거나 장치의 비중복 구성에 너무 많은 데이터 오류가 있는 경우 장치를 안전하게 교체할 수 없습니다. 충분한 중복성을 사용하지 않으면 손상된 장치를 치료할 수 있는 정상적인 데이터가 생기지 않습니다. 이 경우 유일한 옵션은 풀을 삭제하고 구성을 다시 생성한 다음 백업 복사본에서 데이터를 복원하는 것입니다.
전체 풀 복원에 대한 자세한 내용은 ZFS 저장소 풀 전반의 손상 복구를 참조하십시오.
교체할 수 있다고 장치로 확인되었으면 zpool replace 명령을 사용하여 장치를 교체하십시오. 손상된 장치를 다른 장치로 교체할 경우 다음과 비슷한 구문을 사용하십시오.
# zpool replace tank c1t1d0 c2t0d0
이 명령은 손상된 장치 또는 풀의 다른 장치(중복 구성인 경우)에서 새 장치로 데이터를 마이그레이션합니다. 명령이 완료되면 구성에서 손상된 장치가 분리됩니다. 따라서 시스템에서 해당 당치를 제거할 수 있습니다. 아미 장치를 제거하고 같은 위치의 새 장치로 교체한 경우 명령의 단일 장치 양식을 사용하십시오. 예를 들면 다음과 같습니다.
# zpool replace tank c1t1d0
이 명령은 포맷되지 않은 디스크를 가져와서 적절하게 포맷한 다음 나머지 구성에서 데이터를 리실버링합니다.
zpool replace 명령에 대한 자세한 내용은 저장소 풀의 장치 교체를 참조하십시오.
예 10-1 ZFS 저장소 풀의 SATA 디스크 교체
다음 예에서는 SATA 장치가 있는 시스템의 미러링된 저장소 풀 tank에서 장치(c1t3d0)를 교체하는 방법을 보여줍니다. c1t3d0 디스크를 같은 위치(c1t3d0)의 새 디스크로 교체하려면 디스크 교체를 시도하기 전에 디스크를 구성 해제해야 합니다. 교체할 디스크가 SATA 디스크가 아니면 저장소 풀의 장치 교체를 참조하십시오.
기본 단계는 다음과 같습니다.
교체할 디스크(c1t3d0)를 오프라인으로 설정합니다. 현재 사용 중인 SATA 디스크는 구성 해제할 수 없습니다.
cfgadm 명령을 사용하여 구성 해제할 SATA 디스크(c1t3d0)를 식별한 다음 구성 해제합니다. 이 미러링된 구성의 오프라인 디스크로 풀이 디그레이드되지만 풀은 계속 사용 가능합니다.
디스크(c1t3d0)를 물리적으로 교체합니다. UNAVAIL 드라이브를 물리적으로 제거하기 전에 Ready to Remove 파란색 LED가 켜졌는지 확인합니다(사용 가능한 경우).
SATA 디스크(c1t3d0)를 다시 구성합니다.
새 디스크(c1t3d0)를 온라인으로 설정합니다.
zpool replace 명령을 사용하여 디스크(c1t3d0)를 교체합니다.
주 - 이전에 풀 등록 정보 autoreplace를 on으로 설정한 경우, 새 장치가 이전에 풀에 속해 있던 장치와 동일한 물리적 위치에서 발견되면 zpool replace 명령을 사용하지 않고 자동으로 포맷되고 교체됩니다. 이 기능은 일부 하드웨어에서만 지원될 수 있습니다.
실패한 디스크가 자동으로 핫 스패어로 교체된 경우 실패한 디스크가 교체된 후 핫 스패어를 분리해야 합니다. 예를 들어 실패한 디스크를 교체한 후에도 여전히 c2t4d0가 활성 핫 스패어인 경우 이를 분리하십시오.
# zpool detach tank c2t4d0
FMA에서 장애가 발생한 장치를 보고하는 경우 장치 오류를 지워야 합니다.
# fmadm faulty # fmadm repaired zfs://pool=name/vdev=guid
다음 예는 ZFS 저장소 풀에서 디스크를 교체하는 단계를 보여줍니다.
# zpool offline tank c1t3d0 # cfgadm | grep c1t3d0 sata1/3::dsk/c1t3d0 disk connected configured ok # cfgadm -c unconfigure sata1/3 Unconfigure the device at: /devices/pci@0,0/pci1022,7458@2/pci11ab,11ab@1:3 This operation will suspend activity on the SATA device Continue (yes/no)? yes # cfgadm | grep sata1/3 sata1/3 disk connected unconfigured ok <Physically replace the failed disk c1t3d0> # cfgadm -c configure sata1/3 # cfgadm | grep sata1/3 sata1/3::dsk/c1t3d0 disk connected configured ok # zpool online tank c1t3d0 # zpool replace tank c1t3d0 # zpool status tank pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Feb 2 13:17:32 2010 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror-2 ONLINE 0 0 0 c0t3d0 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 errors: No known data errors
위 zpool output의 경우 replacing 제목 아래에 새 디스크와 이전 디스크를 모두 표시할 수 있습니다. 예를 들면 다음과 같습니다.
replacing DEGRADED 0 0 0 c1t3d0s0/o FAULTED 0 0 0 c1t3d0 ONLINE 0 0 0
이 텍스트는 교체 프로세스가 진행 중이며 새 디스크를 리실버링하는 중임을 의미합니다.
디스크(c1t3d0)를 다른 디스크(c4t3d0)로 교체하려는 경우에는 zpool replace 명령을 실행하기만 하면 됩니다. 예를 들면 다음과 같습니다.
# zpool replace tank c1t3d0 c4t3d0 # zpool status pool: tank state: DEGRADED scrub: resilver completed after 0h0m with 0 errors on Tue Feb 2 13:35:41 2010 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror-2 DEGRADED 0 0 0 c0t3d0 ONLINE 0 0 0 replacing DEGRADED 0 0 0 c1t3d0 OFFLINE 0 0 0 c4t3d0 ONLINE 0 0 0 errors: No known data errors
디스크 교체가 완료될 때까지 zpool status 명령을 여러 번 실행해야 할 수도 있습니다.
# zpool status tank pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Feb 2 13:35:41 2010 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror-2 ONLINE 0 0 0 c0t3d0 ONLINE 0 0 0 c4t3d0 ONLINE 0 0 0
예 10-2 실패한 로그 장치 교체
ZFS는 zpool status 명령 출력에서 계획 로그 오류를 식별합니다. FMA(Fault Management Architecture)에서는 이러한 오류도 보고됩니다. ZFS 및 FMA 모두 의도 로그 오류에서 복구하는 방법을 설명합니다.
다음 예는 저장소 풀(pool)의 실패한 로그 장치(c0t5d0)에서 복구하는 방법을 보여줍니다. 기본 단계는 다음과 같습니다.
zpool status -x 출력 결과 및 여기에 표시된 FMA 진단 메시지를 검토합니다.
실패한 로그 장치를 물리적으로 교체합니다.
새 로그 장치를 온라인으로 설정합니다.
풀의 오류 조건을 지웁니다.
FMA 오류를 지웁니다.
예를 들어 별도의 로그 장치가 있는 풀에 동기식 쓰기 작업이 커밋되기 전에 시스템이 갑자기 종료된 경우에는 다음과 비슷한 메시지가 표시됩니다.
# zpool status -x pool: pool state: FAULTED status: One or more of the intent logs could not be read. Waiting for adminstrator intervention to fix the faulted pool. action: Either restore the affected device(s) and run 'zpool online', or ignore the intent log records by running 'zpool clear'. scrub: none requested config: NAME STATE READ WRITE CKSUM pool FAULTED 0 0 0 bad intent log mirror-0 ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c0t4d0 ONLINE 0 0 0 logs FAULTED 0 0 0 bad intent log c0t5d0 UNAVAIL 0 0 0 cannot open <Physically replace the failed log device> # zpool online pool c0t5d0 # zpool clear pool # fmadm faulty # fmadm repair zfs://pool=name/vdev=guid
로그 장치 오류는 다음과 같은 방식으로 해결할 수 있습니다.
로그 장치를 교체하거나 복구합니다. 이 예제에서 로그 장치는 c0t5d0입니다.
로그 장치를 다시 온라인으로 설정합니다.
# zpool online pool c0t5d0
실패한 로그 장치 오류 조건을 재설정합니다.
# zpool clear pool
실패한 로그 장치를 교체하지 않고 이 오류로부터 복구하려면 zpool clear 명령을 사용하여 오류를 지울 수 있습니다. 이 시나리오에서 풀은 성능 저하 모드로 작동하며 별도의 로그 장치가 교체될 때까지 로그 레코드가 기본 풀에 작성됩니다.
로그 장치 오류 시나리오를 방지하려면 미러링된 로그 장치를 사용하는 것이 좋습니다.
장치를 교체하는 프로세스는 장치의 크기 및 풀에 포함된 데이터의 양에 따라 상당한 시간이 걸릴 수 있습니다. 데이터를 한 장치에서 다른 장치로 이동하는 프로세스를 리실버링이라고 하며 zpool status 명령을 사용하여 모니터링할 수 있습니다.
다음 zpool status 리실버링 상태 메시지가 제공됩니다.
리실버링 진행 중 보고입니다. 예를 들면 다음과 같습니다.
scan: resilver in progress since Mon Jun 7 09:17:27 2010 13.3G scanned out of 16.2G at 18.5M/s, 0h2m to go 13.3G resilvered, 82.34% done
리실버링 완료 메시지입니다. 예를 들면 다음과 같습니다.
resilvered 16.2G in 0h16m with 0 errors on Mon Jun 7 09:34:21 2010
리실버링 완료 메시지는 시스템 재부트 후에도 보존됩니다.
기존 파일 시스템은 블록 레벨에서 데이터를 리실버링합니다. ZFS에서는 볼륨 관리자의 인공 계층이 제거되므로 훨씬 더 강력하고 제어된 방식으로 리실버링을 수행할 수 있습니다. 이 기능의 두 가지 주요 이점은 다음과 같습니다.
ZFS에서는 최소한으로 필요한 데이터만 리실버링합니다. 단기 작동 중단(전체 장치 교체와 반대)의 경우 전체 디스크를 간단하게 리실버링할 수 있습니다. 전체 디스크를 교체할 경우 디스크에 사용된 데이터의 양에 비례하여 리실버링 프로세스 시간이 걸립니다. 풀의 사용된 디스크 공간이 몇 GB에 불과할 경우 몇 초면 500GB 디스크를 교체할 수 있습니다.
리실버링은 중단 가능하며 안전합니다. 시스템 전원이 끊기거나 시스템이 재부트될 경우 사용자의 개입 없이도 정확히 중단되었던 부분부터 리실버링 프로세스가 재개됩니다.
리실버링 프로세스를 확인하려면 zpool status 명령을 사용하십시오. 예를 들면 다음과 같습니다.
# zpool status tank pool: tank state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Mon Jun 7 10:49:20 2010 54.6M scanned out of 222M at 5.46M/s, 0h0m to go 54.5M resilvered, 24.64% done config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 replacing-0 ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 (resilvering) c1t1d0 ONLINE 0 0 0
이 예에서 c1t0d0 디스크가 c2t0d0으로 교체되는 중입니다. 상태 출력 결과에서 구성에 replacing 가상 장치가 있다면 이 이벤트를 확인할 수 있습니다. 이 장치는 실제가 아니므로 이 장치를 사용하여 풀을 만들 수 없습니다. 아 장치의 목적은 리실버링 진행률을 표시하고 교체할 장치를 식별하기 위한 것입니다.
리실버링 프로세스가 완료될 때까지 풀이 원하는 레벨의 중복성을 제공할 수 없기 때문에 현재 리실버링이 진행 중인 풀은 ONLINE 또는 DEGRADED 상태입니다. 리실버링은 가능한 빠르게 진행되지만, 시스템에 미치는 영향을 최소화하기 위해 I/O는 항상 사용자가 요청한 I/O보다 낮은 우선 순위로 예약됩니다. 리실버링이 완료되면 구성이 완료된 새 구성으로 되돌아갑니다. 예를 들면 다음과 같습니다.
# zpool status tank pool: tank state: ONLINE scrub: resilver completed after 0h1m with 0 errors on Tue Feb 2 13:54:30 2010 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 377M resilvered c1t1d0 ONLINE 0 0 0 errors: No known data errors
풀이 다시 ONLINE 상태가 되고, 실패한 원래 디스크(c1t0d0)가 구성에서 제거되었습니다.