출처 : 유튜브 따라하면서 배우는 it- 리눅스 고급 과정
- 리눅스의 파일 시스템
EXT2 | EXT3 | EXT4 | |
---|---|---|---|
출시 | 1993 | 2001 | 2006 |
최대 파일 크기 | 16GB ~ 2TB | 16GB ~ 2TB | 16GB ~ 16TB |
최대 파일 시스템 크기 | 2TB ~ 32TB | 2TB ~ 32TB | 1EB |
특징 | 저널링 X | 저널링 O | Extents Multi-block Allocation |
저널링: 파일시스템이 물리적 하드디스크 파일을 링크로 만들어주는데, 링크를 잃어버릴 수도 있는데, 그걸 복구할 수 있는 기능이 추가된 파일 시스템.
발전을 해왔다.
파일시스템이 뭔데?!
운영체제의 한 일부. 컴퓨터에서 파일이나 자료를 쉽게 보고 보관하는 등 관리하는 프로그램.
centos에서는 다른 파일 시스템을 사용하기 시작함. 요즘에는 xfs
를 쓰고 있음.
리눅스에서 많이 쓰는 ext4의 파일 시스템 구조
내부는 복잡하게 이루어져있다.
superblock, ....
네트워크 상에서 프로토콜 같은거라고 보면 된다.
이 중에서 그나마 중요한 내용이 있어서 보여줌.
리눅스 파일 시스템 파일이 저장될 때, 빨간 부분이 중요
super block: 엄청 중요. 이 테이블의 모든 정보를 가지고 있음.
inode table : 하드링크, 파일의 고유번호 ls -il
하드링크에는 inode번호가 같다.
직접적으로 불러오는 경우도 있고, inode-> inode-> data block도 가능.
파일을 좀 더 효율적으로 관리하려고. data 하나당 일정한 크기. 용량이 적은 경우에는 inode가 직접적으로 가리키게. 큰 경우엔, 따로 뽑아내서 직접 가리킴.
data blocks 예를 들어 1MB라고 하면, 최대 15MB밖에 안됨.
inode -> inode 128개 -> 1MB짜리
ex) inode -> inode -> inode (128 * 128 = 14GB)
파일 시스템 생성 mkfs make file system
파티션의 번호를 지정해주면 된다. 장치번호 아니고 파티션 번호
기본적으로 ext 파일 시스템으로 됨. 타입 지정하면 가능함.
윈도우 같은 경우에는 파일시스템까지만 만들어도 사용 가능. 리눅스에서는 마운트라는 작업을 해주어야만, 디스크를 사용할 수 있다.
특정 디렉토리와 특정 장치를 연결하는 마운트
disk1이라는 디렉토리를 만들고, fileA, fileB, fileC 만듦
이 파일은 20GB에 저장된 하드디스크 친구들. 여기에 저장.
/
밑에 특정 디렉토리와 연결. 아무리 최상이 되더라도 root 위에는 없음. 디렉토리와 장치를 연결하는 마운트
mout [옵션][장치] [마운트 포인트\
[옵션]
-t
: 특정 파일 시스템의 종류를 지정
[장치] (파티션 번호까지 써 줘야함)
: 마운트 포인트와 연결할 장치를 지정, 일반적으로 파일 시스템을 생성한 파티션이 온다.
[마운트 포인트]
: 특정 디렉토리
를 지정, 해당 디렉토리로 접근 시, 지정한 장치로 이동됨
fdisk -l
파티션에 파일 시스템을 생성. mkfs /dev/sdb1
(100MB 파티션 만들던것) cd /disk1
ls -al
touch fileA
cd ..
사용하는 mount에선 왠만하면 안하는 게 좋다.
mount /dev/sdb1 /disk1
: sdb1 파일 시스템,
disk1과 디렉토리 이동하게 되면, 100MB짜리 파티션으로 만든 하드디스크로 이동하게 된다.
cd /disk1
ls -l
얘를 재부팅해보면? df -h
했을 때,
연결이 끊김.
ls -l /etc/fstab
: 부팅이 되면서, 운영체제가 이 파일을 읽어서 이 파일에 있는 장치들만 mount를 수행한다.
mount같은 경우에는 명령어 -> 1회성, 재부팅 하면 추가가 되어있지 않음
이 파일을 직접 수정해야 자동으로 마운트 된다.
🌟vi /etc/fstab
한 줄이 mount 작업을 수행해라라는 내용.
특정 파일 시스템(장치) / /(마운트 포인트): 여기에 마운트 시킴
/ 파일 시스템의 종류(xfs) / defaults(옵션. 종류 많음.) /
#은 주석
/ : 슬래시 (루트 파일 시스템, 실제로는 마운트 포인트)
옵션 쪽에 ro나 rw ro(read only) 읽기 전용. 생성이나 삭제x 내용을 보는 건 가능. rw(읽고 쓰는 것 가능) , defaults-> rw 세팅됨.
0 0
첫 번째: 0 또는 1이 올 수 있는데, dump라는 명령어 수행할지 안할지,
fsck(file system check)로 점검을 할지 안할지, 1이면 하는것임.
ex) 1 1
: dump 백업도 하고, 파일 시스템도 체크를 하고.
- 자동으로 마운트 되게 하고 싶다, 한 줄 작성.
-🌟 /dev/sdb1 /disk1 ext2(파일시스템) defaults 0 0- 각각의 필드 구분 잘 해두기
재부팅하면...
자동으로 사용되고 있는 것을 확인할 수 있다.
mount /disk1
-> 저 /etc/fstab 파일에 등록만 해놨다면!!🌟🌟Super Block
파일 시스템의 대부분의 정보를 저장
하고 있는 블록
얘가 고장나면, 나머지 전부 알아볼 수 없게 됨.
블록 크기에 상관없이 항상 블록 그룹의 첫번째 블록
에 저장된다.
굉장히 중요한 정보를 저장하고 있기 때문에 백업을 해둔다.
정보 : 파일 시스템 크기, 마운트 정보, inode의 수, 블록 크기, 데이터 블록의 수
Group Descriptor Table
슈퍼 블록 다음에 위치한다.
그룹 블록에 대한 정보를 저장
정보 : Block Bitmap의 블록 번호, Inode Bitmap의 블록 번호
첫 번째 Inode Table의 블록 번호 등
Block Bitmap : 각각의 블록의 사용현황을 0 or 1로 표시
Inode Bitmap : 각각의 inode의 사용현황을 0 or 1로 표시
Inode Table :
superblock가 고장나면 어떻게 되는가?!
umount /disk1 로 마운트를 풀고,
dd라는 명령어 : 어떠한 입력장치-> 출력장치로 데이터를 보내주는 역할
-ex) 입력장치 아무거나, 출력장치는 하드디스크의 파일이라고 하면, 그러한 파일이 새로 생성이 되는.
dd if=/dev/zero of=/sjb/test bs(block size)=512 count=20
이러면 10KB 파일이 하나 생성이 됨.
입력장치 --> 출력장치 : 원하는 크기의 파일 만들 수 있고, 입력 장치/출력 하드디스크 장치를 똑같이 복사를 할 수도 있음. 백업하는 데에도 사용할 수 있음
/dev/zero
: 특이한 장치. 0으로 되어있음. 0을 출력장치에 써버리게 함.
원래 디스크 안에 superblock 어딘가에 있는데, /dev/zero를 덮어씌워서 superblock을 지워버리게 해보는 걸.
파일 시스템 만들 때, 여러 군데 백업이 되는데 복구하는 방법
dd if=/dev/zero of=/dev/sdb1 bs-512 count=32
: 슈퍼블록이 저장되는 지점이 32번째까지 덮어쓰면 다 지워짐.
마운트 해제한 상태에서 해주세요.
mount /dev/sdb1 /disk1 하면,
👍 슈퍼블록 복구
fsck(기본, filesystem check)
-b [백업 블록 번호
][복구할 장치]