본문 바로가기

Linux/2) 리눅스 서버 관리자 과정

3_3 File System Administration - 파일 시스템 점검 및 사용량 점검

파일 시스템 점검 fsck (File system check)

: 파일 시스템이 전원이상이나 커널에서 동작하는 프로그램의 이상, 하드웨어적 이상, 비정상적인 시스템 shutdown이 발생해 데미지를 입게 되면, 파일 시스템을 fsck 명령어를 통해 파일 시스템의 무결성을 점검하게 된다.

: fsck 명령어와 비슷한 명령어로는 fsck.ext4, e2fsck

: 위의 명령어는 모두 파일 시스템을 점검하고, 손상된 파일 시스템을 복구하는 명령어

 

(Linux) fsck = 점검 (check) + 수정 (repair) <==> (Windows) scandisk / chkdsk (디스크점검)

 

∇ 명령어 형식

# fsck /dev/sda1  (# fsck -t ext4 /dev/sda1, # fsck.ext3 /dev/sda1, # e2fsck /dev/sda1)

# fsck -p /dev/sda1    -p : preen, non-interactive , 물어보는 화면이 나오지 않음 자동으로 처리됨

# fsck -y /dev/sda1    -y :  yes , 수행 과정의 질문에 모두 yes라 응답

 

# fsck -t ext4 /dev/sda1   -t : 특정 종류의 파일시스템만 점검

= fsck.ext4 /dev/sda1

= e2fsck /dev/sda1

 

∇ fsck, fsck.ext3 명령어 옵션

옵션 설명
-A /etc/fstab 파일에 있는 모든 파일시스템을 한번씩 점검
-R -A와 함께 사용시 /(root) 파일시스템은 제외
-T 시작시 제목은 생략
-N 실행은 하지 않고 어떤 작업을 할 것인지만 출력
-P -A와 함께 사용시 /파일시스템과 다음 파일시스템을 병렬처리하여 점검함
-V 자세한 정보가 출력
-a 에러 발생시 자동으로 복구함
-t 특정 종류의 파일시스템만 점검함.
-f 파일 시스템에 오류가 없더라도 강제로 점검하도록 함
-p 에러 발생 시 자동으로 복구하도록 함
-y 모든 질문에 yes라고 답하도록 설정
-b 슈퍼 블럭을 이용한 복구

 

∇ fsck 명령어 사용시 주의점

- 마운트된 파일 시스템에 대해서 fsck 명령어를 수행 X

 :  점검할 때는 반드시 서비스를 중지시켜야함 -> umount 상태로 만듦

 : 운영체제는 계속해서 돌아가기 때문에 umount가 불가 -> single user 모드로 들어가서 서비스 중지시켜야함

 

/home, /data1, /data2 ,...... -> umount CMD + fsck CMD

/, /usr, /var, /tmp ,........-> single user mode + fsck CMD

 

∇ fsck 명령어의 사용법

- 파일 시스템 생성

# mkfs.ext4 /dev/sdb1

# mkfs.xfs -f /dev/sdc1

 

- 파일 시스템 점검

: ext3/ext4와 xfs의 점검 명령어가 다름

 

(ext3/ext4)

# fsck.ext4 -N /dev/sdb1   : 파일시스템 점검 ( -N 옵션 : 실행하지 않는다는 의미로 repair하지 않는다는 것)

# fsck.ext4 /dev/sdb1       : 파일 시스템 점검 및 수정

 

(xfs) 

# xfs_repair -n /dev/sdc1   : 파일시스템 점검 

# xfs_repair /dev/sdc1       : 파일 시스템 점검 및 수정

 

# e2 [TAB] [TAB]

   e2fsck  : fsck 명령어의 확장명령어라고 할 수 있으며, 리눅스에서 파일시스템의 점검과 복구를 할 수 있는 명령어

[root@server1 ~]# e2
e2freefrag   e2fsck       e2image      e2label      e2mmpstatus  e2undo

 

# fsck. [TAB] [TAB]

fsck.xfs    fsck.ext4 : 부팅시에 파일 시스템을 자동으로 체크하고, 파일 시스템이 손상 입었을 때 점검하고 복구할 수 있는 명령어

[root@server1 ~]# fsck.
fsck.cramfs  fsck.ext3    fsck.fat     fsck.msdos   fsck.xfs     
fsck.ext2    fsck.ext4    fsck.minix   fsck.vfat

 

- 파일 시스템 점검

# mount /dev/sdb1 /raid0 

# df -h -T

/dev/sdc1           ext4      991M  2.6M  963M   1% /raid1

[root@server1 ~]# df -h -T
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  866M     0  866M   0% /dev
tmpfs               tmpfs     896M     0  896M   0% /dev/shm
tmpfs               tmpfs     896M   18M  878M   2% /run
tmpfs               tmpfs     896M     0  896M   0% /sys/fs/cgroup
/dev/mapper/cl-root xfs        39G  6.0G   33G  16% /
/dev/mapper/cl-home xfs        19G  179M   19G   1% /home
/dev/sda1           xfs      1014M  240M  775M  24% /boot
tmpfs               tmpfs     180M  1.2M  178M   1% /run/user/42
tmpfs               tmpfs     180M  4.6M  175M   3% /run/user/0
/dev/sdb1           ext4      477M  2.3M  465M   1% /raid0
/dev/sdc1           ext4      991M  2.6M  963M   1% /raid1

 

# fsck /dev/sdb1

/dev/sdb1 is mounted.
e2fsck: Cannot continue, aborting.    :  마운트되어 있는 중이기 때문에 실행할 수 없다고 나옴

[root@server1 ~]# fsck /dev/sdb1
fsck from util-linux 2.32.1
e2fsck 1.45.6 (20-Mar-2020)
/dev/sdb1 is mounted.
e2fsck: Cannot continue, aborting.

 

# umount /raid0

# df -h

-> /raid0가 umount 되어 보이지 않음

[root@server1 ~]# umount /raid0

[root@server1 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             866M     0  866M   0% /dev
tmpfs                896M     0  896M   0% /dev/shm
tmpfs                896M   18M  878M   2% /run
tmpfs                896M     0  896M   0% /sys/fs/cgroup
/dev/mapper/cl-root   39G  6.0G   33G  16% /
/dev/mapper/cl-home   19G  179M   19G   1% /home
/dev/sda1           1014M  240M  775M  24% /boot
tmpfs                180M  1.2M  178M   1% /run/user/42
tmpfs                180M  4.6M  175M   3% /run/user/0
/dev/sdc1            991M  2.6M  963M   1% /raid1

 

# fsck /dev/sdb1

: 파일 시스템 점검이 된 것을 확인할 수 있음

[root@server1 ~]# fsck /dev/sdb1
fsck from util-linux 2.32.1
e2fsck 1.45.6 (20-Mar-2020)
/dev/sdb1: clean, 11/128016 files, 26684/512000 blocks

= # e2fsck /dev/sdb1  

= # fsck.ext4 /dev/sdb1

= # fsck -t ext4 /dev/sdb1  (ext4 타입을 점검)

= # fsck -y /dev/sdb1        ( -y : yes)

 

 

※ # fsck -y /dev/sda1 사용시

: 점검할 때 고장이 났거나 문제가 생겼을 경우에는 fsck 하는 동안 많은 것을 물어봄, 그렇지 않은 경우에는 문제가 없다는 것

: 많은 출력 내용들이 나중에 고칠 때 필요하는데 화면이 매우 빠르게 지나가기 때문에 script라는 명령어를 실행시킨 후 fsck 명령어를 돌리면 그 출력 결과가 file에 저장됨

: 파일에 저장된 내용들을 바탕으로 문제점을 확인할 수 있음

 

- 과정 -

# script -a fsck.log     (# fsck -y /dev/sda3 2>&1 | tee -a fsck.log)

# fsck -y /dev/sda3

# exit

# cat fsck.log

 

 

※ 슈퍼 블럭을 복구하는 방법 - 수동 복구 방법

: 하나의 파티션인 ext4가 만들어지면 상단에는 superblock이 존재하는데 그것은 전체적인 정보를 담고 여러 개의 그룹들로 구성되어 있음

: 여러 개의 그룹들로 나누어져 있는데 용량이 커지면 커질수록 늘어남

: 그곳의 곳곳에 백업 superblock의 카피본이 존재함

: 그룹의 하나의 superblock이 깨지면 그룹 전체에 접근이 불가능하기에 그것을 복원하기 위해 사용

: 즉, 백업 슈퍼블락을 이용

 

- 슈퍼블록 복구 - 

# dumpe2fs /dev/sdb1 | grep -i superblock

  Backup superblock at 8193, Group descriptors at 8194-8197

[root@server1 ~]# dumpe2fs /dev/sdb1 | grep -i superblock
dumpe2fs 1.45.6 (20-Mar-2020)
  Primary superblock at 1, Group descriptors at 2-5
  Backup superblock at 8193, Group descriptors at 8194-8197
  Backup superblock at 24577, Group descriptors at 24578-24581
  Backup superblock at 40961, Group descriptors at 40962-40965
  Backup superblock at 57345, Group descriptors at 57346-57349
  Backup superblock at 73729, Group descriptors at 73730-73733
  Backup superblock at 204801, Group descriptors at 204802-204805
  Backup superblock at 221185, Group descriptors at 221186-221189
  Backup superblock at 401409, Group descriptors at 401410-401413

 

# e2fsck -b 8193 /dev/sdb1

[root@server1 ~]# e2fsck -b 8193 /dev/sdb1
e2fsck 1.45.6 (20-Mar-2020)
/dev/sdb1 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
Block bitmap differences:  +(8193--8453) -(10247--10249) -10255 -(10285--10286) -(10305--10307) -10312 -(10314--10315) -(10318--10319) -(10321--10323) -10326 -10329 -(10334--10335) -(10337--10339) -10344 -(10346--10347) -(10350--10351) -(10353--10355) -10358 -10361 -(10366--10367) -(10369--10371) -10376 -(10378--10379) -(10382--10383) -(10385--10387) -10390 -10393 -(10398--10399) -10450 -(10468--10469) -10561 -10563 -10570 -(10594--10595) -10602 -(10625--10627) -10634 -10660 -10666 -10689 -10692 -10698 -10722 -10724 -10730 -(10753--10754) -10756 -10762 -(10787--10788) -10794 -10817 -(10819--10820) -10826 -(10850--10852) -10858 -(10881--10884) -10890 -10917 -10922 +(24577--24837) +(40961--41221) +(57345--57605) +(73729--73989) +(204801--205061) +(221185--221445) -(272369--278528) +(401409--401669) -(403441--409600)
Fix<y>? yes
Padding at end of inode bitmap is not set. Fix<y>? yes

/dev/sdb1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdb1: 11/128016 files (0.0% non-contiguous), 26684/512000 blocks

 

 

※ 배드블럭(Bad Block) 발생한 경우 복구하는 방법

- 배드블럭(Bad Block)의 종류

  • 물리적인 배드블럭(Physical badblock) : 플래터와 헤더가 닿아 플래터에 스크래치가 생긴 경우로 최대한 빨리 백업하고 변경해야 함
  • 논리적인 배드블럭(Logical badblock) : 파일 시스템도 하나의 프로그램으로 관리되는 방식인데 그 과정이 꼬여서 생긴 경우로 데이터 백업 후 초기화 시킨 후 다시 파일 시스템을 만들어 해결

# badblocks -v /dev/sdb1   상당히 오랜 시간이 걸림

# e2fsck -c -p -f -v /dev/sdb1 ( # e2fsck -cpfv /dev/sdb)

  - p (preen) : 질문함 없이 자동적으로 오류 수정

  - f  (force) : 파일 시스템에 이상이 없다 하더라도 점검하도록 강제함

  - c  :  e2fsck로 하여금 badblocks을 실행해 파일 시스템 상의 배드 블럭을 찾아내고 배드 블럭 inode에 추가함으로써 표시를 해둠

  - v  : 자세한 출력 모드