linux class(new) 1 페이지

본문 바로가기
사이트 내 전체검색


회원로그인

linux class(new)

리눅스 file system 구조 및 점검/복구

페이지 정보

작성자 admin 작성일16-02-06 02:03 조회1,530회 댓글1건

본문

리눅스 파일시스템 구조 (ext2 / ext3 /ext4)

boot block | Block Group 0 | Block Group 1 | Block Group 2 | Block Group 3 | ... | Block Group n


그리고 각 block group 은 아래와 같은 형태로 구성되어 있다.

Super Block | Group Descriptor | GDT | Block Bitmap | Inode Bitmap |Inode Table | Data Blocks


이러한 파일시스템 구조는 파일시스템 생성시 만들어진다.
ex) mkfs -t ext4(또는 ext3 , ext2) /dev/sdc1
- 생성된 파일시스템의 논리적인 구조는 dumpe2fs 로 볼수 있다.
ex) dumpe2fs /dev/sdc1
*. boot block 은 볼 수 없음.

부트블록(부트섹터)
- 운영체제를 부팅시키기 위해 필요한 코드를 저장
- 대부분의 파일스템들은 부트블록으로 시작
- 하드웨어가 부팅에 필요한 코드를 부트블록에서 찾는다.

슈퍼블록 <.b>
- 블록 그룹의 가장 앞에 위치.
- 파일시스템과 관련된 정보를 담고 있음. 파일 시스템의 전체 크기,마운트정보 등..
- 리눅스 운영체제는 슈퍼블록의 정보를 사용하여 파일시스템을 관리함.
- 다른 블록그룹에 있는 슈퍼블록도 똑 같은 내용을 가지고 있는 사본이다.

. 매직넘버 - ext 파일시스템의 슈퍼블록임을 의미하는 숫자
. 마운트횟수 - 얼마나 많이 마운트 되었는지를 나타낸다.
.블록그룹번호 - 파일시스템내에서 몇 번째 블록인지를 나타내는 번호

블록크기 - 파일시스템의 기본 블록크기를 바이트 단위로 표시(예를들면 1024byte)
그룹당 블록수 - 하나의 그룹에 속하는 블록 갯수
free blocks - 할당되지 않은 block 갯수
free inode - 할당되지 않은 inode 갯수
first inode - 파일시스템내의 가장 첫 번째 inode 번호

group 디스크립터 table
- 해당 파일시스템 내의 모든 블록 그룹에 대한 정보를 기록.
- 다른 블록그룹에 있는 group 디스크립터 영역도 똑 같은 내용을 가지고 있는 사본이다.
. 첫 번째 inode table block 의 블록번호
. 그룹내의 free block 갯수
. 그룹내의 inode 갯수
. 디렉토리갯수

block bitmap - 블록 그룹에서 블록의 할당 상태를 나타내는 맵, 블록을 할당하거나 해제 할 때 사용된다.
inode bitmap - inode 의 할당 상태를 나타내는 맵, inode를 할당하거나 해제 할 때 사용

아이노드(inode = index node) 블록

- 파일의 정보[접근권한/소유주/파일크기/inode 번호 등]를 저장하고있는 부분.
- 파일 하나당 하나의 아이노드가 사용됨.
- 파일의 형태와 무관하게 아이노드 블록을 가지게 됨

데이터 블록
- 실제 데이터 내용이 저장되는 디스크 영역

ext2 및 ext3 파일시스템 비교(파일시스템 손상시)
ext2
- 갑작스러운 시스템 다운(정전)이 되었을 경우 파일시스템이 손상될 가능성이 많다.
- 파일시스템의 maximum mount count 에 도달한 경우 부팅시 데이터 손실을 방지하기 위해서
fsck를 자동 실행하도록 되어 있다.
- 파일시스템이 클수록 시간이 많이 걸린다. 부팅시 파일시스템 체크를 하게 되면 완료될때까지
시스템을 사용할 수 없다.

ext3
- ext3 파일시스템에서는 기록된 인덱스 로그를 이용하여 복구할 수 있도록 하였다.
그래서 갑작스러운 시스템 다운시 부팅시간을 단축할 수 있게 되었다.
즉, fsck로 파일시스템을 일일이 채크하지 않아도 인덱스로그를 이용하기 때문에
복구시간과 부팅시간이 단축된다는 점이다.
*. 저널링 파일 시스템의 종류에는 ext3, ext4, reiserfs, XFS등이 있다.

--------------------------------------------------------------------------------------
파일시스템 점검 및 복구

fsck(또는 e2fsck) ; 파일시스템 점검 및 복구 명령어
기타 : fsck,fsck.ext2,fsck.ext3,fsck.msods,fsck.vfat

- fsck(e2fsck) 로 파일시스템 점검시 점검하는 항목
- inode table
- datablocks
- datablock size
- 디렉토리 구조
- 디렉토리 연결성
- 파일링크 정보(하드링크정보)
- 전체파일갯수
- 전체블록중 사용중인 블록
- 기타점검.


파일시스템 점검 및 복구
fsck /dev/sdb1
fsck -j ext3 /dev/sdb1
fsck -y /dev/sdb1 ; 비대화식으로 실행

파일시스템 점검 및 복구

- 백업슈퍼블록을 이용한 복구
fsck -b 백업슈퍼블록번호 장치명
fsck -b 32768 /dev/sdb1 ; 32769 은 백업슈퍼블록 번호

ex) 손상된 file system 복구
- 아래처럼 파일시스템을 강제로 손상시킨다.(디스크복제에 주로 사용되는
dd 로 파일시스템을 간단히 손상시킬수 있다)
dd if=/dev/zero of=/dev/sdb1 bs=1024 count=10
<== /dev/sdb1 파일시스템을 첫번째 블록부터 10개 블록까지를 0 으로 덮어쓴다.
그러면 primary super block, group descriptor, GDT 블록의 일부영역까지 손상된다.
손상된 파일시스템은 마운트 되지 않는다. 파일시스템 체크후 복구해야 한다.

ex) 파일시스템 복구 test
- sdc를 전체크기로 주파티션 하나만 만들어서 /testhome 을 만들어서
거기에 마운트한다음 test

/# mkfs.ext4 /dev/sdc1 > /dev/null
mke2fs 1.41.12 (17-May-2010)
/# mount /dev/sdc1 /testhome
/# useradd -d /testhome/tuser1 tuser1
/# useradd -d /testhome/tuser2 tuser2
/# useradd -d /testhome/tuser3 tuser3
/# useradd -d /testhome/tuser4 tuser4
/# useradd -d /testhome/tuser5 tuser5
/# df -h /testhome
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 1004M 18M 936M 2% /testhome



/# fsck /dev/sdc1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sdc1 is mounted.
e2fsck: Cannot continue, aborting.
/# umount /dev/sdc1
/# fsck /dev/sdc1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sdc1: clean, 56/65280 files, 8568/261048 blocks
/# fsck -f /dev/sdc1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
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/sdc1: 56/65280 files (0.0% non-contiguous), 8568/261048 blocks



/# dd if=/dev/zero of=/dev/sdc1 bs=1024 count=10
10+0 records in
10+0 records out
10240 bytes (10 kB) copied, 0.00104521 s, 9.8 MB/s
/# mount -t ext4 /dev/sdc1 /testhome
mount: wrong fs type, bad option, bad superblock on /dev/sdc1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

/# dumpe2fs /dev/sdc1
dumpe2fs 1.41.12 (17-May-2010)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sdc1
Couldn't find valid filesystem superblock.
/#



/# fsck /dev/sdc1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
fsck.ext2: Superblock invalid, trying backup blocks...
/dev/sdc1 was not cleanly unmounted, check forced.
Resize inode not valid. Recreate? 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
Free blocks count wrong for group #0 (28600, counted=28576).
Fix? yes
Free blocks count wrong for group #1 (32703, counted=32683).
Fix? yes
Free blocks count wrong (252524, counted=252480).
Fix? yes
Free inodes count wrong for group #0 (8149, counted=8108).
Fix? yes
Directories count wrong for group #0 (2, counted=23).
Fix? yes
Free inodes count wrong for group #1 (8160, counted=8157).
Fix? yes
Directories count wrong for group #1 (0, counted=3).
Fix? yes
Free inodes count wrong for group #2 (8160, counted=8159).
Fix? yes
Directories count wrong for group #2 (0, counted=1).
Fix? yes
Free inodes count wrong (65269, counted=65224).
Fix? yes
-
/dev/sdc1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdc1: 56/65280 files (0.0% non-contiguous), 8568/261048 blocks
/#
/# mount -t ext4 /dev/sdc1 /testhome
/# ls /testhome/
lost+found tuser1 tuser2 tuser3 tuser4 tuser5 ; 복구 완료됨.



실습 2 - /dev/sdc1 의 파일시스템을 훨씬 더 심각한 상태로 만들어서 다시 복구 test

/# umount /testhome
/# mkfs.ext3 /dev/sdc1 1> /dev/null ; ext 3으로 filesystem 생성
mke2fs 1.41.12 (17-May-2010)
/#

* 파일시스템을 ext4 로 하는경우에는 1000 개 블럭손상시 복구 못할수도 있음.(ext3 로 테스트 권장함)
계속 이어서...

/# mount -t ext3 /dev/sdc1 /testhome
/# df -h /testhome
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 1004M 18M 936M 2% /testhome

/# useradd -d /testhome/tuser10 tuser10
/# useradd -d /testhome/tuser20 tuser20
/# useradd -d /testhome/tuser30 tuser30
/# useradd -d /testhome/tuser40 tuser40
/# useradd -d /testhome/tuser50 tuser50
/# ls /testhome/
lost+found tuser10 tuser20 tuser30 tuser40 tuser50
/# umount /testhome
/# dd if=/dev/zero of=/dev/sdc1 bs=1024 count=1000
1000+0 records in
1000+0 records out
1024000 bytes (1.0 MB) copied, 0.026792 s, 38.2 MB/s
/# mount /dev/sdc1
mount: can't find /dev/sdc1 in /etc/fstab or /etc/mtab
/# mount /dev/sdc1 /testhome
mount: you must specify the filesystem type
/# mount -t ext3 /dev/sdc1 /testhome
mount: wrong fs type, bad option, bad superblock on /dev/sdc1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
/#


직접 복구 해 볼것.
* fsck 실행에서 손상된 디렉토리 블럭에 저장되어 있는 파일이름은 lost+found 디렉토리를
통해서 복구를 할 수 있다.
복구 완료후에 su - 계정명(tuser1 등..) ; 아무 경고나 에러없이 계정이 변경되면
복구가 된것이다.
복구가 완료되었나요?
복구 실패이면 ---> 링크파일참조 ; 만약 한글이 깨져서 보이면
웹브라우저에서 문자셋을 한국어로 설정

*. 기타

/root# fsck /dev/sdc1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
fsck.ext2: Superblock invalid, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/sdc1

The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193

백업 슈퍼블럭을 자동으로 찾지 못해서 복구 못했으며 -b 옵션 사용하라는 메시지가 출려되었다.
이런경우에는
아래처럼 백업슈퍼블록의 위치를 직접 찾아서 복구를 해야하는 경우도 있다.
(깨진 파일시슽템 구조를 볼수는 없으므로 똑 같은 크기와 똑 같은 파일시스템 타입으로
파일시스템이 생성되어 있는 다른 파일시스템 구조를 보면 백업슈퍼블록의 위치를 알수 있다)

/root# fsck -b 229376 /dev/sdc1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
Superblock has an invalid journal (inode 8).
Clear? yes
*** ext3 journal has been deleted - filesystem is now ext2 only ***

/dev/sdc1 was not cleanly unmounted, check forced.
Resize inode not valid. Recreate? yes
Pass 1: Checking inodes, blocks, and sizes
Root inode is not a directory. Clear? yes
--- 이하 생략

댓글목록

leelj2님의 댓글

leelj2 작성일

pp.327-


접속자집계

오늘
2
어제
200
최대
611
전체
453,483
개인정보취급방침 서비스이용약관 twoseven.kr All rights reserved.
상단으로