본문으로 바로가기

파일 시스템( Filesystem)

category Linux/Linux Server 2017. 8. 28. 19:09
  • 파일시스템

-파일시스템이란? 


파일을 저장하고 관리하는 체계이다.


운영체제가 파티션 영역을 인식 할 수 있도록 (운영체제만이 알 수 있도록) 파일 시스템을 만들어줘야 한다. 기억 공간에 데이터를 저장하고 유지하기 쉽도록 도와주는 것이 파일 시스템이다. 파일 시스템은 운영체제에 의해서 만들어진 파일이다. 파일을 만들기 위해서는 파일 시스템이 만들어 진 곳에다가 파일을 만들어야 하기 때문에 이를 그냥 통칭해서 파일 시스템이라 부른다.


- 파일시스템 종류

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

ext2        (mkfs.ext2)    리눅스 이전 버전에서 사용하는 파일시스템

ext3        (mkfs.ext3)    현재 CentOS 5.X 사용하는 파일시스템

ext4        (mkfs.ext4)    CentOS 6.X 사용하는 파일시스템

xfs          (mkfs.xfs)      고성능 저널링 파일 시스템(eXtended File System)

msdos    (mfs.msdos) MS-DOS filesystem

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


(xfs는 ext2와 같은 시기에 만들어 졌지만 더 좋은 ext3 와 ext4가 출시되면서 사용하지 않다가 최근에 수정을 많이 해 떠오르는 추세이다.)


[ 파일시스템 정보 확인 ]

# export LANG=ko_KR.utf8

# man 5 filesystem


[저널링]

파일시스템의 안정성을 보장하기 위해 저널( 원형 로그 )을 사용


1) 파일 저장시 저널이란 곳에 정보 ( inode ) 저장

2) 데이터를 디스크에 저장

3) 디스크에 저장이 완료되면 저널에 저장된 정보 디스크에 저장

-> 디스크에 데이터가 저장되다 전원이 끊기면 저널에 있는 정보 버림. 

-> 어중간하게 반토막난 정보가 저장되어 깨진 정보가 아닌 확실하게 없는 정보로 인식 


FAT32 + 저널링 -> NTFS

ext2 + 저널링 -> ext3



-파일 시스템의 구조


 MBR

 (1 sector)

Boot Sector 

-실린더그룹

 super block

 inode table

 data block 

inode table

data block 

 inode table

data block

......

 -> 446 BRUB 포인터

      64  Partition 정보

      2 체크섬

 -> boot 파티션 가리킴 ( 부팅용 디스크에만 있음 )














VFS : 아무 OS의 디스크나 마운트해서 사용 가능


[분석]

# dumpe2fs /dev/sda1


- 파일시스템 생성


[명령어 형식]

# mkfs -t ext3 /dev/sdb1        (-t : File System Type)

# mkfs.ext3 /dev/sdb1


# mkfs -t ext2 /dev/sdb1

# mkfs.ext2 /dev/sdb1


# mkfs.ext3 -m 10 /dev/sdb1     (-m : minfree)        

# mkfs.ext3 -L mkfs /dev/sdb1   (-L : Label)

# mkfs.ext3 -b [1024|2048|4096] /dev/sdb1  (-b : block size)

[참고] # dumpe2fs /dev/sda1     (# tune2fs /dev/sda1) #tune2fs -l /dev/sda1 (슈퍼블록 정보도 출력 )


# mkfs.ext2 /dev/sdb1


mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

50200 inodes, 200780 blocks

10039 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=67371008

25 block groups

8192 blocks per group, 8192 fragments per group

2008 inodes per group

Superblock backups stored on blocks: /*슈퍼블록은 네임정보라 없어지면 파일을 확인할수 없다. */

8193, 24577, 40961, 57345, 73729      /*그래서 복사본을 만들어놓음 */

 

Writing inode tables: done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 25 mounts or

180 days, whichever comes first. Use tune2fs -c or -i to override.


# mkfs.ext3 -m 10 /dev/sdb1


mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

50200 inodes, 200780 blocks

20078 blocks (10.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=67371008

25 block groups

8192 blocks per group, 8192 fragments per group

2008 inodes per group

Superblock backups stored on blocks:

8193, 24577, 40961, 57345, 73729

 

Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 33 mounts or

180 days, whichever comes first. Use tune2fs -c or -i to override.


(정리) 디스크를 추가해서 작업하는 방법

(ㄱ) 디스크 인식 

kudzu -> # ntsysv (# chkconfig kudzu on)

(ㄴ) 서버 Power OFF / 디스크 장착 / 부팅

(ㄷ) 파티션 작업

# ls -l /dev/sd?

# fdisk -l


# fdisk /dev/sdb

(ㄹ) 파일시스템 생성

# mkfs.ext3 /dev/sdb1

# dumpe2fs /dev/sdb1 (# tune2fs -l /dev/sdb1)

(ㅁ) 마운트 작업

# mkdir /disk1

# mount /dev/sdb1 /disk1

# vi /etc/fstab

# df -h  (# mount)


- minfree ( Minimum Free Space )



최소 남은 공간은 파일시스템이 Full 되었을 때 파일시스템을 접근 할 수 있는 최소로 공간으로 남겨져 있어야 하기 때문에 중요하다. 파일시스템이 Full 되면, root 사용자만 사용할 수 있는 공간으로 예약되어진 남은 공간이다.


Minfree 공간은 하나의 파티션에 0 ~ 50% 사이 값으로 정의된다. Minfree 공간은 파티션이 풀(Full)난 경우 root 사용자가 사용하기 위한 공간으로 사용된다. 일반사용자는 이 공간을 사용할 수 없다. 파일시스템에서 Minfree 공간은 0(zero)일수 없다. 최소 minfree는 0%이다.


[설정] minfree 공간 설정

# mkfs.ext3 -m 10 /dev/sdc1  /* 10%로 설정 */


[확인] minfree 공간 확인

# tune2fs -l /dev/sdb1 | grep -i Reserved 

-> Reserved block count:  2610 

# tune2fs -l /dev/sdc1 | grep -i Reserved 

-> Reserved block count:  26104


[변경] minfree 공간 변경

# tune2fs -m 1 /dev/sdc1  /* /dev/sdc1 을 1% 로 설정 */



[실무 예] 파티션이 풀(full) 날 경우


파티션 풀(Full) --> 요청 삭제

-> 불 필요한 파일 삭제 ( 시간 소요 )

-> 원인 분석 ( 시간 필요)


( 작업 절차 ) /was/logs 파티션 ( Full , /dev/sdb1 )

1) minfree 5% - > 1 %

2) 불 필요한 파일 삭제

3) 원인 분석

파티션이 풀(Full) 나면 서비스가 중단된다. 불 빌요한 파일을 걸러 내는 것에도 시간이 걸리며

그러한 파일이 왜 생성됬는지 파악해야 다음의 full을 막을 수 있다. 그러나 그러한 시간동안 서비스는 이루어지지 않는다

minfree를 1%로 줄이면 잠시간의 시간을 벌 수 있다.  


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


파일시스템이 전원이상이나 커널에서 동작하는 프로그램의 이상, 하드웨어적인 이상, 비정상적인 시스템 shutdown이 발생하여 데미지(Damaged)를 입게 되면, 파일시스템을 fsck 명령어를 통해 파일시스템의 무결성을 점검하게 된다. fsck 명령어와 비슷한 명령어로는 fsck.ext3, e2fsck가 있다. 이들 모두는 파일시스템을 점검하고, 손상된 파일시스템을 복구하는 명령어이다.


fsck = 점검 ( check ) + 수정 ( repair )


[명령어 형식]

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

# fsck -p /dev/sd1  /* -p : non-interactive */        /* 고칠것인지 묻지않고 모두 yes 실행 */

# fsck -y /dev/sd1  /* -y : yes */                        /* 고칠것인지 묻고 모두 yes로 실행 */ -> 파악 가능


# fsck /dev/sda1 

= fsck.ext3 /dev/sda1 

= e2fsck /dev/sda1 


(주의) fsck 명령어 사용시 주의점

마운트된 파일시스템에 대해서 fsck 명령어를 수행하지 말아야한다.

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

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


------------                        ---------- # fsck /dev/sda1

f=2                                 |

------------                             V        file이 2개인것을 이미 파악하고 확인하면서 내려오는대

file1                                            새로운 사용자가 file3 생성하면 file의 개수가 3개로 파악 -> 오류

file2


file3     (생성)

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


(실무 예) "# fsck -y /dev/sda1" 사용시

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

# fsck -y /dev/sda3 

# exit 

# cat fsck.log 


(실무 예) 슈퍼 블럭을 복구 하는 방법

# dumpe2fs /dev/sdb1 | grep -i superblock

# e2fsck -b 32768 /dev/sdb1


(정리) superblock 자동 복구 방법에 대한 과정

# umount /home

# dd if=/dev/zero count=1 bs=1024 seek=1 of=/dev/sda3  /* 망가 뜨림 */

# mount /home

-> 에러 메세지 확인

# e2fsck -y /dev/sda3     /* 복구*/

# mount /home

# df -h


(정리) superblock 수동 복구 방법에 대한 과정

# umount /home

# dd if=/dev/zero count=1 bs=1024 seek=1 of=/dev/sda3 

# mount /home

-> 에러 메세지 확인

# e2fsck -b 8193 -f -v -y /dev/sda3    /* superblock 번호 확인후 그 번호의 정보로 복구 */

# mount /home 

# df -h


- 파일 시스템 사용량 측정


(1) df ( disk free space ) - 파티션 단위의 사용량 점검

df 명령어는 남은 디스크 블럭과 남은 파일의 수를 출력하는 명령어이다. df 명령어에 -k, -h 옵션 등을 사용하면 출력 결과는 파일시스템 크기, 사용된 공간, 남은 공간, 전체에서 사용중인 %사용량, 마운트 포인트등을 출력한다.


(명령어 형식) 

# df 

# df -k      (-k : KB)

# df -m      (-m : MB)

# df -h      (-h : human) /* 사람들이 보기 좋게 출력 */


# df -k 

# df -k /data1 

# df -k /data1 /home 


# df -T       (# alias df='df -T -h')


(2) du ( disk usage ) -디렉토리 단위의 사용량 점검

du 명령어는 디스크와 파일의 사용량을 보여준다. du 명령어에 -s, -a, -k, -h 옵션 등을 사용하면 출력 결과는 디렉토리와 파일의 크기, 사용된 공간, 남은 공간, 전체에서 사용중인 사용량을 출력한다.


(명령어 형식)

# du /etc 

# du -k /etc    /* -k : KBytes */

# du -m /etc    /* -m : MBytes */

# du -h /etc    /* -h : human */


# du -ak /etc  / * /etc 밑의 모든 디렉토리 각각 용량 출력 */

# du -am /etc 

# du -ah /etc 


# du -sk /etc   /* -s : sum 해당 경로의 디스크 용량 총 합계만 출력 */

# du -sm /etc 

# du -sh /etc 




'Linux > Linux Server' 카테고리의 다른 글

RAID  (0) 2017.08.30
LVM ( Logical Volume Manage )  (0) 2017.08.29
마운트 ( mount )  (0) 2017.08.28
장치 인식과 파티션 작업  (0) 2017.08.27
디렉토리 구조  (0) 2017.08.27