강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스파일시스템점검과 복구강좌. e2fsck 1편

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

리눅스파일시스템점검과 복구강좌. e2fsck 1

 

 

 

 

 

 

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

 

1 : 리눅스 파일시스템의 점검 과 복구를 하는 e2fsck 개론

2  : e2fsck명령어로 특정 파일시스템의  점검 및 복구하는 방법

3  : e2fsck로 특정 파일시스템 강제 점검 및 복구하기

4  : ext3(저널링)파일시스템의 점검 및 복구하기

5  : e2fsck로 특정 파일시스템 강제 점검 및 상세 작업내역보기

6  : 파일시스템의 수퍼블록을 이용한 파일시스템 복구방법

7  : e2fsck로 디스크의 배드블록 마크하기

8  : e2fsck로 특정 파일시스템 강제점검하기

9  : e2fsck로 파일시스템 점검시 버퍼캐쉬의 내용을 디스크에 저장하기

10  : e2fsck로 특정 파일시스템 점검시 오류 자동수정하기

11  : e2fsck로 파일시스템 점검시 모든 질문항목에 Yes라고 자동입력하기

12  : e2fsck사용시 파일시스템을 읽기전용으로 열고 모든 질문에 no라고 자동 답하기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 <?xml:namespace prefix = st2 ns = "urn:schemas-microsoft-com:office:smarttags" /><?xml:namespace prefix = st1 ns = "urn:schemas:contacts" />박성수

 

ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/

 

 

 

 

 

 

 

1 : 리눅스 파일시스템의 점검과 복구를 하는 e2fsck 개론

 

리눅스 파일시스템 점검및 복구를 할 수 있는 명령어입니다.  fsck의 확장명령어라고 할 수 있으며 리눅스에서 사용가능한 거의 모든 종류의 파일시스템의 점검과 복구를 할 수 있는 명령어입니다.

 

한마디로 리눅스 파일시스템의 점검 또는 복구를 위하여 서버관리자가 반드시 꼭 알아야하는 매우 중요한 명령어입니다.  가끔씩 파일시스템 오류로 인하여 서버부팅이 정상적으로 되지않을 경우에 이 명령어를 이용하여 파일시스템의 오류를 수정하고 정상적으로 부팅하는 경우가 있습니다.

 

파일시스템의 오류로 인한 서버다운이나 서버장애는 이 명령어를 정확하게 사용할 수 있는 것만으로도 응급조치하여 정상화를 시킬 수 있습니다. 

 

따라서 굳이 이 명령어의 중요성에 대해서 더 이상 언급하지 않더라도 이 명령어의 필요성과 중요성에 대해서는 충분히 전달되었으리라 생각합니다.

 

리눅스 시스템이 부팅되는 과정에서 /etc/rc.d/rc.sysinit 스크립트가 자동으로 실행이 됩니다.
/etc/rc.d/rc.sysinit
스크립트를 확인해 보시면 파일시스템을 점검하는 명령어가 실행되는 단계가 있습니다.   따라서 시스템부팅시마다 파일시스템 점검명령어가 실행됩니다.

 

서버관리를 하다보면 흔하지않게 경험하는 것이 파일시스템 에러로 인한 시스템 다운입니다.
파일시스템 에러가 발생하는 이유는 여러가지가 있지만 그중에서도 배드블록(Bad Block)이 가장 큰 원인인 것 같습니다.  따라서 이 명령어와 함께 배드블록을 점검하는 명령어인 badblocks명령어를 반드시 익혀두시기 바랍니다.

 

특히 e2fsck명령어의 정확한 사용법을 익히고 파일시스템 복구를 정확하게 할 수 있다는 것만으로 서버관리자에게는 위급한 경우에 매우 큰 힘이 될 것입니다.  따라서 서버관리를 하시는 분들께서는 fsck명령어와 badblocks명령어와 함께 이 명령어를 반드시 익혀두시기 바랍니다.

 

그리고 e2fsck는 다음과 같은 종료코드를 출력합니다.   , e2fsck의 종료코드의 종류와 의미는 다음과 같습니다.  e2fsck의 종료코드는 아래 값의 합으로 표시됩니다.

 

    0  - 에러없이 정상적인 종료를 의미함.
    1  -
파일시스템을 복구하였음을 의미함.
    2  -
파일시스템이 복구되어 시스템이 재부팅되어야함을 의미함.
    4  -
작업대상 파일시스템에 문제가 있으나 복구하지않고 그대로 두었음을 의미함.
    8  -
실행에러를 의미함.
   16  -
사용법(Usage)또는 문법(Syntax)에러를 의미함.
   32  - e2fsck
작업이 사용자에 의해서 취소(Cancel)되었음을 의미함.
  128  -
공유 라이브러리(Shared library) 에러를 의미함.

 

그리고 실제로 e2fsck작업에서 기본적으로 점검하는 항목은 다음과 같습니다.

 

 - inodes 점검
 - blocks
점검
 - sizes
점검
 -
디렉토리구조 점검
 -
디렉토리 연결성점검
 -
파일링크 정보
 -
전체파일갯수 점검
 -
전체블록수중 사용중인 블록 점검등

 

 

명령어위치 : /sbin/e2fsck

 

사용형식

e2fsck [-pacnyrdfvtFV][-b 수퍼블록][-B 블록크기][-l|-L 배드블록목록화일] 장치명

장치명에는 다음예와 같이 디스크장치명을 정확하게 지정해 주셔야 합니다.

       /dev/sda1
       /dev/sda2
       /dev/hda1
       /dev/hdb1


위의 장치명들은 마운트가 되어있지않은 경우에 fdisk명령어로 확인하실 수 있습니다.  만약 현재 운용되고 있는 서버라면 즉, 마운트가 되어있는 상태라면 "df" 또는 "mount"등으로 위의 파일시스템명을 확인하실 수 있습니다.

 

[주의사항]

e2fsck명령어로 파일시스템을 점검하고 복구할 때에는 대상 파일시스템이 마운트되어있지않은 상태에서 실행하시기 바랍니다. 만약 마운트되어있는 상태에서 이 명령어를 사용하신다면 원하지않은 오류를 발생할 수도 있습니다.

 

 

 


2 : e2fsck명령어로 특정 파일시스템의  점검 및 복구하는 방법

e2fsck로 할 수 있는 가장 흔한 작업중 한가지가 파일시스템에 이상이 있는가를 간단히 점검하는 것입니다.  아래의 예는 e2fsck를 이용하여 /dev/hda1라는 파일시스템(장치명)을 점검한 예입니다.  아래의 예는 현재 마운트된 파일시스템(/dev/hda1) e2fsck로 점검하기 때문에 "WARNING!!!"메시지가 나온 것입니다.


마운트된 파일시스템을 대상으로 점검을 할 때에는 심각한 손상이 있을 수 있다는 의미의 메시지입니다.

 

[root@file root]# e2fsck /dev/hda1
e2fsck 1.32 (09-Nov-2002)
/dev/hda1 is mounted. 

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? yes

/boot: recovering journal
/boot: clean, 41/32128 files, 13384/128488 blocks
[root@file root]#

 

, 위의 “Do you really want to continue (y/n)?”에서 “yes”를 입력하시면 계속 진행됩니다. 만약 “no”라고 입력하시면 실행종료합니다.

 

e2fsck /dev/hda1을 점검한 결과 위와 같이 별다른 메시지가 없다면 파일시스템에는 이상이 없다는 것을 의미합니다.

 

 

 

3 : e2fsck로 특정 파일시스템 강제 점검 및 복구하기

 

파일시스템에 이상이 없더라도 강제적으로 파일시스템을 점검하려면 -f옵션을 사용합니다.
보시는 바와 같이 e2fsck inodes점검, blocks 점검, sizes점검, 디렉토리구조 점검, 디렉토리 연결성점검, 전체파일갯수 점검, 전체블록수중 사용중인 블록 점검등을 수행합니다.

 

[root@file root]# e2fsck -f /dev/hda1
e2fsck 1.32 (09-Nov-2002)
/dev/hda1 is mounted. 

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? yes

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
/boot: 41/32128 files (2.4% non-contiguous), 13384/128488 blocks
[root@file root]#

 

, 위의 예는 -f옵션을 사용하여 /dev/hda1파일시스템의 강제점검복구를 수행한 예입니다.

 

 


4 : ext3(저널링)파일시스템의 점검 및 복구하기

e2fsck는 이름에서도 알수 있는 바와 같이 ext2파일시스템을 기본 작업대상으로 개발된 것입니다.  하지만 -j 옵션을 사용하시면 ext3파일시스템의 점검및 복구를 할 수 있습니다.

아래의 예는 ext3로 포맷된 파일시스템의 점검과 복구를 수행한 예입니다.


, e2fsck에서 "-j ext3"라는 옵션을 함께 주시면 됩니다.

 

[root@file root]# e2fsck -j ext3 /dev/hda1
e2fsck 1.32 (09-Nov-2002)
/dev/hda1 is mounted. 

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? yes

/boot: clean, 41/32128 files, 13384/128488 blocks
[root@file root]#


ext3
로 포맷된 파일시스템 점검과 복구시에 편하게 사용할 수 있는 fsck.ext3라는 명령어를 사용하실 수도 있습니다.  fsck.ext3라는 명령어는 “e2fsck -j ext3”명령어와 동일한 것이지만 명령어의 이름에서도 알 수 있듯이 ext3로 포맷된 파일시스템만을 그 대상으로 하고 있습니다.

 

 

 

5 : e2fsck로 특정 파일시스템 강제 점검 및 상세 작업내역보기

 

만약 e2fsck의 여러가지 옵션들과 함께 -v옵션을 사용하면 다음예와 같이 파일시스템 점검의 상세정보를 확인하실 수 있습니다.

 

[root@file root]# e2fsck -fv /dev/hda1
e2fsck 1.32 (09-Nov-2002)
/dev/hda1 is mounted. 

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? yes

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

      41 inodes used (0%)
       1 non-contiguous inodes (2.4%)
         # of inodes with ind/dind/tind blocks: 9/3/0
   13384 blocks used (10%)
       0 bad blocks
       0 large files

      25 regular files
       3 directories
       0 character device files
       0 block device files
       0 fifos
       0 links
       4 symbolic links (4 fast symbolic links)
       0 sockets
--------
      32 files
[root@file root]#

 

, 위의 예는 e2fsck명령어로 /dev/hda1파일시스템의 강제(-f)점검 및 복구를 수행하면서 상세한(-v) 결과메시지를 출력한 예입니다.

 

 

 

6 : 파일시스템의 수퍼블록을 이용한 파일시스템 복구방법

 

만약 e2fsck로 파일시스템이 자동복구가 되지 않을 경우에는 수퍼블록을 이용하여 직접 복구를 해주셔야 합니다.  이 방법을 이용하시면 물리적으로 문제있는 부분 이외에는 거의 모든 데이터를 복구할 수 있습니다.  , 리눅스의 파일시스템구조와 수퍼블록의 정확한 위치를 알아야만 가능한 방법입니다.  

 

이 방법은 e2fsck -b옵션을 이용한 방법이며 "-b 수퍼블록번호"를 함께 주시면 됩니다.

먼저 수퍼블록에 대한 이해를 드리기 위하여 간단한 설명을 드리도록 하겠습니다.

 

리눅스의 파일시스템은 블록그룹(Block Group)이라는 것으로 기본구조를 이루고 있으며 모든 블록그룹의 맨 앞에는 수퍼블록이라는 것이 존재합니다 블록그룹에 존재하는 모든 수퍼블록들은 동일한 정보를 가지고 있으며 파일시스템이 파괴되었을 경우에 이 정보를 이용하여 복구를 할 수 있도록 준비하고 있습니다


즉 여기서 설명할 내용은 e2fsck의 기본적인 실행으로 깨진 파일시스템이 정상적인 복구가 되지 않을 경우에 그 다음 복구방법으로 수퍼블록이라는 것을 이용하여 복구를 한다는 의미입니다.
수퍼블록(Superblock)이라는 것은 파일시스템의 크기와 파일시스템정보에 대한 내용이 들어있습니다.

 

다음은 리눅스의 대표적인 파일시스템 구조를 나타낸 것입니다.

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

[수퍼블록관점에서의 리눅스 파일시스템구조를 도식화한 그림]

 

 

위의 그림을 보시면 이해할 수 있는 것처럼 파일시스템의 맨 앞에는 첫번째 수퍼블록이 존재합니다.


그리고 그 다음 첫번째 블록그룹의 맨 앞에는 두번째 수퍼블록이 존재합니다.
그리고 그 다음 두번째 블록그룹의 맨 앞에는 세번째 수퍼블록이 존재합니다.

그리고 n번째 블록그룹에는 n+1번째 수퍼블록이 존재합니다.

 

e2fsck의 일반적인 방법으로 깨진 파일시스템의 복구가 불가능 할 경우에는 다음과 같이 수퍼블록을 이용하여 복구를 합니다.  

 

다음은 위의 그림에서 보시는 바와 같이 수퍼블록의 블록번호를 계산한 것입니다. 8192개의 블록은 하나의 블록그룹(Block Group)이 됩니다.  , 첫번째 수퍼블록은 1번째 블록에 존재하며 두번째 수퍼블록은 1+8192번째인 8193번블록에 존재합니다.


세번째 수퍼블록은 1+8192*2번째인 16385번째 수퍼블록에 존재합니다. , 다음과 같이 계산할 수 있습니다.

 

- 첫번째 수퍼블록 : 1번블록에 위치함.
-
두번째 수퍼블록 : 1번블록 + 8192번블록*1 = 8193번째 블록에 위치함.
-
세번째 수퍼블록 : 1번블록 + 8192번블록*2 = 16385번째 블록에 위치함.
- n
번째 수퍼블록 : 1번블록 + 8192번블록*n 번째블록에 위치함.

 

다음은 첫번째 수퍼블록이 깨졌기 때문에 일반적인 방법으로 복구가 불가능하게 된 경우로서 두번째 수퍼블록으로 복구를 하는 예를 보이고 있습니다.

[root@file root]# e2fsck -b 8193 /dev/sda1
e2fsck 1.32 (09-Nov-2002)
/dev/sda1 is mounted. 

WARNING!!!

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,041 명
  • 현재 강좌수 :  35,855 개
  • 현재 접속자 :  148 명