[리눅스]하드디스크 점검
리눅스 서버를 사용하다보면 가끔 예기치 않은 상황(정전이나 전원차단)에 의해 파일시스템이 문제가 생겨 부팅이 되지 않는 경우가 발생하곤 한다.
이런 경우 몇가지 명령어만 알고 있다면 파일 시스템의 오류로 인한 서버 다운이나 서버 장애는 간단(?)하게 응급조치를 취하여 서버의 데이터를 복구할 수 있다.
리눅스는 시스템이 부팅되는 과정에서 "/etc/rc.d/rc.sysinit" 스크립트가 자동으로 실행이 되는데, 해당 스크립트를 살펴보면 파일시스템을 점검하는 명령어가 포함되어 있음을 확인할 수 있다.
리눅스에서 파일 시스템 에러가 발생하는 이유중에 하나가 배드블럭인데, 이 배드블럭을 점검하는 명령어인 "badblocks"와 함께 파일시스템을 점검하고 복구할 수 있는 "e2fsck"명령어를 익혀두도록 하자.
[/]# badblocks -v /dev/hd1
(배드 블록 점검)
[/]# e2fsck -cv /dev/sda1
(파일 시스템 점검 및 배드블록 마킹)
....
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/: ***** FILE SYSTEM WAS MODIFIED *****
/: ***** REBOOT LINUX *****
336288 inodes used (7%)
489 non-contiguous inodes (0.1%)
# of inodes with ind/dind/tind blocks: 14145/72/0
1537521 blocks used (18%)
0 bad bloks
0 large files
293030 regular files
15863 directories
2522 character device files
15884 block device files
1 fifo
4451 links
8974 symbolic links (8968 fast symbolic links)
5 sockets
________
340730 files
※ e2fsck 명령어는 마운트가 해제된 상태에서 사용해야함.
마운트가 된 상태에서 실행시 파일 시스템이 손상될 수 있음. Warning!!! 메시지 출력.
점검 복구 자동 : e2fsck -p /dev/sda1
점검, 복구시 묻는 질문에 무조건 yes : e2fsck -y /dev/sda1
점검, 복구시 묻는 질문에 무조건 No : e2fsck -n /dev/sda1
버퍼 캐쉬의 내용을 디스크에 저장하기 : e2fsck -F /dev/sda1
● 파일 시스템의 슈퍼 블록을 이용한 파일시스템 복구하기
만약 e2fsck 로 파일시스템이 자동복구가 되지 않을 경우에는 슈퍼블록을 이용하여 직접 복구를 해주어야 한다. 이 방법을 이용하면 물리적으로 문제가 있는 부분 이외에는 거의 모든 데이터를 복구 할 수 있는데 리눅스의 파일시스템 구조와 슈퍼블록의 정확한 위치를 알아야 사용이 가능한 방법이다.
e2fsck의 -b 옵션을 이용한 방법이며 "-b 수퍼블록번호"를 파라미터로 주면 된다.
- 첫번째 슈퍼블록 : 1 번블록에 위치함.
- 두번째 슈퍼블록 : 1 번블록 + 8192 번블록 * 1 = 8193 번째 블록에 위치함.
- 세번째 슈퍼블록 : 1 번블록 + 8192 번블록 * 2 = 16385 번째 블록에 위치함.
- n 번째 슈퍼블록 : 1 번블록 + 8192 번블록 * n 번째 블록에 위치함.
아래는 첫번째 슈퍼블록에 오류가 생겨 일반적인 방법으로 복구가 불가능하게 되었을때, 두번째 슈퍼 블록으로 복구하는 예이다.
[/]# e2fsck -b 8193 /dev/sda1
...
/dev/sda1 is mounted.
Do you really want to continue (y/n)? yes
/boot was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
...
위의 명령어로 복구가 안되면 두번째, 세번째... 슈퍼블록을 이용하여 복구하면 된다.
세번째 수퍼블록을 이용한 복구작업 : # e2fsck -b 16385 /dev/sda1
네번째 수퍼블록을 이용한 복구작업 : # e2fsck -b 24577 /dev/sda1
참고로 mke2fs 로 파일시스템을 생성한 후에는 반드시 lost+found 라는 디렉토리가 생성이 되는데, 이 디렉토리는 파일시스템의 점검작업 결과로 연결되지 않은 파일에 대한 정보를 저장하고 있는 장소이다.
e2fsck 로도 복구되지 않은 파일들은 이 디렉토리를 보면 숫자로된 파일형태로 존재하게 되는데 이 파일들을 cat/vi/tail등으로 열어보고 해당 파일을 복구하는 경우도 있다. 물론 이 경우는 좋은 상황은 아니지만 데이터를 전부 유실하는 최악의 경우보단 나을테니...............
'02.서버-Linux' 카테고리의 다른 글
[리눅스]아파치 사설 인증서 설치 (0) | 2012.12.19 |
---|---|
[리눅스]아파치 번역 (0) | 2012.12.19 |
[리눅스]Core 분석 (0) | 2012.12.19 |
[리눅스]요약 정리 (0) | 2012.12.19 |
[리눅스]본딩 작업 (0) | 2012.12.19 |