이런 경우 몇가지 명령어만 알고 있다면 파일 시스템의 오류로 인한 서버 다운이나 서버 장애는 간단(?)하게 응급조치를 취하여 서버의 데이터를 복구할 수 있다.
리눅스는 시스템이 부팅되는 과정에서 "/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 -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
점검, 복구시 묻는 질문에 무조건 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
...
...
/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등으로 열어보고 해당 파일을 복구하는 경우도 있다. 물론 이 경우는 좋은 상황은 아니지만 데이터를 전부 유실하는 최악의 경우보단 나을테니...............
잊지 말자! 백업!!!!!!!!!!!!!!!!!!!!!!!!!!!!