Solaris 파일시스템 체크 - fsck

Solaris 2006. 2. 23. 14:30 posted by CecilDeSK
반응형

■파일시스템 체크 - fsck

파일 시스템은 내부, 외부의 악조건으로 인해, 에러가 생기거나, 꼬이거나, 부서질 수 있습니다.

fsck 는 filesystem check 를 위한 명령어로서, 아주 유용하게 쓰이는 유틸리티입니다.

다음의 내용은 fsck 를 실행 시켜본 결과입니다.

------------------------------------------------------------------------------------

[solagoing# fsck -F ufs /dev/rdsk/c0d1s0

** /dev/rdsk/c0d1s0
** Last Mounted on /packages
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
9463 files, 541567 used, 4496887 free (10031 frags, 560857 blocks, 0.1% fragmentation)

------------------------------------------------------------------------------------

위에서 보인 예는 아무런 문제가 없는 파일 시스템 체크를 보여준 것입니다.

5가지의 과정을 거치게 되는데

Phase 1 - Check Blocks and Sizes : 블럭과 사이즈 검사

Phase 2 - Check Pathnames : 패스이름 검사

Phase 3 - Check Connectivity : 연결 상태 검사

Phase 4 - Check Reference Counts : 참조 수 검사

Phase 5 - Check Cyl groups : 싸이클 그룹 검사

각 검사당 오류 부분이 생기면 해당하는 메세지와 함께 해결책에 대한 메세지가 나옵니다.

fsck 수행시 주의 할점은 single mode 와 검사 대상 파일 시스템을 umount 상태에서 해야 정확하다는 것입니다.

다음은 " 드라이브가 아닌 경우, fsck 수행 결과 보고된 불량 섹터(블록)를 복구하는 방법 " 의 예입니다.

============================================================

오류 메시지
============================================================

SRDB 19871 IDE 드라이브가 아닌 경우, fsck 수행 결과 보고된 불량 섹터(블록)를 복구하는 방법
------------------------------------------------------------

fsck를 수행하여 읽기가 불가능한 손상된 섹터를 찾을 수 있습니다.
다음은 이런 경우 나타나는 오류 메시지의 예입니다.

# fsck /dev/rdsk/c0t1d0s0
** /dev/rdsk/c0t1d0s0
** Last Mounted on /
** Phase 1 - Check Blocks and Size

CANNOT READ:BLK 2036256
CONTINUE? y

** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups

FREE BLK COUNT(S) WRONG IN SUPERBLK
SALVAGE? y

THE FOLLOWING SECTORS COULD NOT BE READ: 2036256 2036257 2036258 2036259

fsck is incapable of fixing sector errors.

#


문제 해결 방법

디스크 블록(섹터)이 불량 상태가 되는 원인은 여러 가지가 있습니다.
하드웨어 문제로 인해 해당 섹터에 대한 포맷 정보가 파손되거나, 섹터가 약화되어
시작할 수 없거나, 정전으로 인해 드라이브에 충격이 가해진 경우 등이 원인일 수
있습니다.

대부분의 경우, 섹터 오류를 발견하면 하드 드라이브가 불량 상태가 된 것으로
생각하고 다시 포맷하거나 교체하게 됩니다.이런 경우 드라이브의 테이프 백업본을
찾고, 드라이브를 포맷하거나 교체하고, 다시 파티션을 나누고, newfs를 실행하고,
복원하는 등의 절차가 필요합니다.

이 문서에서 설명하는 해결 방법은 이와 같이 과감한 접근 방식이 아닙니다.
하지만 해당 드라이브의 중요성 정도나 오류의 심각성 정도에 따라 장기적으로
또는 단기적으로 효과적일 수 있습니다.

상황이 다음 조건에 부합하는 경우, 하드 드라이브를 복구하거나
단일 불량 섹터 또는 연속적인 불량 섹터 그룹을 제외시키는 것을 고려할 수
있습니다.

* 원시 장치 /dev/rdsk/...에 대해 fsck를 수행했음.

* 파일 시스템을 마운트하지 않은 상태에서 fsck를 수행했음.

* 디스크가 SCSI 유형임(IDE 드라이브에는 이 절차를 적용할 수 없음).

* fsck 수행 결과 보고된 불량 섹터가 거의 없고 작은 영역에 한정되어 있음.

* 불량 섹터의 절대 블록 번호(Absolute Block Number)를 알고 있음.
blcok 0에서 시작하는 슬라이스를 제외한 모든 슬라이스의 경우 이 정보는 매우
중요합니다.
blcok 0에서 시작하는 슬라이스는 대개의 경우 slice 0입니다.
일반적으로 슬라이스는 상대 블록 번호(Relative Block Number)에 의해 지정됩니다
(슬라이스의 block 0은 디스크에서 해당 슬라이스가 시작되는 블록임).
즉, slice 0은 block 0에서 시작하므로 절대 블록 및 상대 블록에 대한 모든
참조는동일합니다.
slice 1이 block 3000에서 시작하는 경우 이 슬라이스에 대한 상대 블록 100은
실제로 절대 블록 3100이 됩니다.
위의 예에서와 같이 모든 슬라이스의 절대 블록 번호를 계산할 수 있습니다.
하지만 계산하는 방법에 대한 자세한 내용은 이 문서의 범위 밖이므로 생략
하겠습니다.

* 문제가 발생한 디스크를 제어하는 디스크 관리 유틸리티(Veritas, DiskSuite 등)
가 없음. (그렇지 않은 경우에는 특별히 고려해야 할 사항이 있습니다.이에 대한
사항은 여기서 다루지 않습니다. 자세한 내용은 SRDB 16305를 참조하십시오.)
이 문서에서 설명한 복구 절차를 수행하면 소프트 오류나 하드 오류를 발견할 수
있습니다.
다음은 오류 유형에 따라 불량 섹터를 복구하는 방법입니다.

소프트 오류
----------
소프트 오류가 발견되면 손상된 블록에 상주한 데이터가 대체 블록에
자동으로 이동되며,그런 다음 이 블록을 복구하거나결함 섹터로 분류하여
제외시킵니다.

하드 오류
----------
손상 정도에 따라 소프트 오류의 경우와 같은 방식으로 처리합니다.
그러나 손상이 심각한 경우에는 블록에 있는 데이터가 삭제될 수 있습니다.
이런 경우, 일반적인 방법을 사용해도 데이터를 읽을 수 없습니다.

경고:디스크가 매우 심하게 손상된 경우에는 해당 블록에 있는 데이터를
복구할 수 없으므로버려야 할수도 있습니다.
중요한 시스템의 경우 디스크가 심각하게 손상될 상황에 대비하여
다음과 같은 예방 조치를 취해야 합니다

1) 불량 블록을 복구하기 전에 디스크 전체를 백업하십시오.


2) 아래에서 설명하는 "연속적인 불량 섹터를 복구하려면" 항목에서
제시하는 방법을 두 번 실행하십시오.

다음의 setup 질문에서 "no"로 대답하고 실행하십시오.

analyze> setup Repair defective blocks[yes]? no

복구 가능한 소프트 오류만 발견된 경우에는 위 절차를 다시 수행하고
setup 질문에 대한 응답을 "yes"로 바꾸어 불량 블록을 실제로 복구할 수
있습니다.

analyze> setup Repair defective blocks[yes]? yes
fsck 수행 결과 보고된 불량 섹터의 수에 따라 단일 섹터 또는 연속적인 섹터를
복구할 수 있습니다.

다음은 이 두 가지 경우에 대해 복구하는 절차입니다.
단일 불량 섹터를 복구하려면 format 유틸리티를 실행하고 드라이브를 선택한 다음
단일 불량 섹터(절대 블록 번호)를 복구합니다.

예:

format> repair
Enter absolute block number of defect:2036256
Ready to repair defect, continue? y
(이 단계에서 format은 블록이 복구되는 방법과 복구되었는지의 여부를 나타냅니다.)

format> q
이제 원시 슬라이스(raw slice)를 대상으로 fsck를 실행하여 문제가 없는지 확인
하십시오.문제가 없다면 해당 섹터를 마운트할 수 있습니다.

연속적인 불량 섹터를 복구하려면

다음 예제는 이 문서의 앞부분에서 설명한 섹터 오류를 대상으로 합니다.
이 예제에서는 모든 불량 섹터를 포함할 수 있도록 디스크 시작 섹터 2036240부터
마지막 섹터 2036270까지 스캔합니다.예제에서 불량 섹터는 slice 0을 대상으로
fsck를 수행한 결과이므로 "절대 블록"과 "블록"은 동일합니다.
slice 0이 아닌 경우에는 "절대 블록"을 사용해야 합니다.

format 유틸리티를 실행하고 손상된 디스크를 선택합니다.

#format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
0. c0t1d0
/iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5,8800000/sd@1,0
Specify disk (enter its number):0
selecting c0t1d0
[disk formatted]

format> analyze

analyze> setup
Analyze entire disk[yes]? no
Enter starting block number[0, 0/0/0]:2036240
Enter ending block number[2052287, 2035/13/7]:2036270
Loop continuously[no]? no
Enter number of passes[2]:1
Repair defective blocks[yes]? no/yes (참고:위에서 설명한 "경고" 내용을 다시
살펴보십시오.)
Stop after first error[no]? no
Use random bit patterns[no]? no
Enter number of blocks per transfer[126, 0/2/0]:1
Verify media after formatting[yes]? yes
Enable extended messages[no]? no
Restore defect list[yes]? yes Restore disk label[yes]? yes

analyze> read
Ready to analyze (won`t harm SunOS).This takes a long time,
but is interruptible with CTRL-C. Continue? y

pass 0

Error during read:block 2036256 (0x5da1c0) (2003/5/3)
Repairing soft error on 2036256 (2003/5/3)...ok.

Error during read:block 2036257 (0x5da1c1) (2003/5/4)
Repairing soft error on 2036257 (2003/5/3)...ok.

Error during read:block 2036258 (0x5da1c2) (2003/5/5)
Repairing soft error on 2036258 (2003/5/3)...ok.

Error during read:block 2036259 (0x5da1c3) (2003/5/6)
Repairing soft error on 2036259 (2003/5/3)...ok.

2035/13/7

Total of 4 defective blocks repaired.
(0x5da1c0) (2003/5/3)
(0x5da1c1) (2003/5/4)
(0x5da1c2) (2003/5/5)
(0x5da1c3) (2003/5/6)

analyze> quit
format> quit

이제 마운트되지 않은 원시 파일 시스템을 대상으로 fsck를 다시 실행하십시오.
fsck는 정확히 실행되어야 합니다.

섹터 오류가 다시 발생하면 디스크 또는 디스크 컨트롤러가 불량인 경우일 수
있습니다.

반응형

'Solaris' 카테고리의 다른 글

Solaris 해상도 변경  (0) 2006.02.23
solaris 언어 변경 방법  (0) 2006.02.23
Solaris ifconfig Example (ifconfig 설정 예)  (1) 2006.02.23
Solaris Network Setting  (0) 2006.02.22
Solaris CD Image file을 마운트하는 lofiadm  (0) 2006.02.22