파일 시스템 구조
블록들이 하나의 I/O 단위가 된다.
부트 블록(Boot block)
파일 시스템 시작부에 위치하고 보통 첫 번째 섹터를 차지
부트스트랩 코드가 저장되는 블록
슈퍼 블록(Super block)
전체 파일 시스템에 대한 정보를 저장
총 블록 수, 사용 가능한 i-노드 개수, 사용 가능한 블록 비트 맵, 블록의 크기, 사용 중인 블록 수, 사용 가능한 블록 수 등
i-리스트(i-list)
각 파일을 나타내는 모든 i-노드들의 리스트
한 블록은 약 40개 정도의 i-노드를 포함
모든 파일은 반드시 i-노드 블록을 하나 가지고 있음
데이터 블록(Data block)
파일의 내용(데이터)을 저장하기 위한 블록들
i-node란?
파일을 구성하는 구성 요소는 파일 이름, 파일의 내용, 파일의 메타 정보 이렇게 크게 3가지로 나눌 수 있다.
i-node란 파일의 메타 정보를 갖고 있는 것이다. 각 파일은 하나의 i-node를 갖고있다.
=> i-node 하나당 파일 하나에 대한 메타 정보
한 블록에 여러 개의 i-node를 담을 수 있다. i-node는 고정된 사이즈이며
전체 i노드 개수는 전체 파일의 개수와 같다.
파일의 메타 정보-> i-node에 저장.
파일의 내용 -> 데이터 블록에 저장.
파일의 이름 -> 데이터 블록에 저장.
여기서 중요한 점은 i-node에는 데이터 블록에 대한 포인터가 들어있다.
이 파일 컨텐츠가 어느 데이터 블록에 있는지 알기 위해서는 블록에 대한 주소를 가지고 있어야 한다.
i-node가 그것을 가지고 있는 것이다.
그 주소를 따라 데이터 블록에서 내용을 읽어온다.
파일에 접근하기 위해서는 i-node 정보를 무조건 읽어와야 나머지 접근이 가능해진다.
-파일에 대한 모든 정보를 가지고 있음(파일 내용 제외)
소유자(individual owner/group owner)
파일 타입: 일반 파일, 디렉터리, 블록 장치, 문자 장치 등
파일 크기
사용권한(owner/group/other)
파일 소유자 및 그룹
접근 및 갱신 시간
the number of links in the file
데이터 블록에 대한 포인터(주소) 등
데이터 블록에 대한 포인터
그림의 왼쪽을 보면 i-node 안의 데이터 블록에 대한 포인터가 있다.
예전 자료라 요즘엔 12개 direct가 있다고 한다.
각각엔 데이터 블록에 대한 포인터 정보가 있다.
파일이 모두 4kb로 같다고 가정할 경우 10개일 때 40kb의 크기를 갖게 될텐데,
데이터 블록에 쓰여지는 파일의 사이즈는 어떤건 크고, 어떤건 작듯 각각 다를 것이다.
파일이 많아지면 i-node에는 그만큼의 포인터가 필요하다.
하지만 i-node는 사이즈가 고정이다. (= I node의 포인터 개수는 고정되어 있다.)
i-node 하나의 크기가 4kb라 한다면 13 x 4kb 크기의 최대 13개 블록밖에 할당하지 못한다. 이것은 말이 안된다.
이를 해결하기 위해 single, double,triple direct를 이용한다.
앞의 i-node 10개에는 실제 데이터 블록의 주소가 있다.
데이터의 크기가 40kb보다 커지게 되면 데이터 블록을 할당받아 다른 데이터 블록의 주소를 넣는다.
이런식으로 다리를 거쳐 데이터 블록을 할당받는것이다.
한번 거치면 single, 2번이면 double, 3번이면 triple
데이터 블록 하나가 4kb, 주소가 4byte라고 할때, 4kb/4byte = 1000개의 주소, 즉 1000개의 데이터블록을 저장할 수 있다. (4kb는 4000byte이므로)
파일이 작은 경우에는 다이렉트하게 블록 주소를 집어 넣어 접근할 수 있지만,
파일이 커지게 되면 single-double-triple …소속된 데이터 블록의 주소를 이런식으로 수용한다.
I-node에는 13개의 포인터만 있지만, 데이터 블록을 활용함으로써 큰 사이즈 데이터 접근이 가능하다.
여기서 퀴즈
Q. 포인터가 4byte, 데이터 블록가 1kb이면
만들 수 있는 데이터블록은 몇 개며 최대 수용할 수 있는 파일 크기는?
A.
1kb * 10 = 10kb
+
Single: 데이터 블록 하나가 1kb(1024byte)이고 주소 하나당 4byte이니까 256개의 주소가 들어갈 수 있다.
256 * 1kb = 256kb
Double: 256 *256 * 1kb=2의8승 * 2의8승 * 1kb= 2의 16승kb = 2의 6승 mb = 64mb
Triple : 256 * 256 * 256 * 1kb = 2의 24승 = 2의 4승gb = 16gb
'DEVOPS > LINUX' 카테고리의 다른 글
[Linux] 잠금(lock) (0) | 2021.12.04 |
---|---|
[Linux] 리눅스 ps 명령어 (0) | 2021.11.07 |
[Linux] 커널과 시스템 콜(System call) (0) | 2021.10.13 |
[Linux] 쉘(shell)이란? (0) | 2021.10.12 |
[Linux] 리눅스 프로세스 확인하기, 죽이기 (0) | 2021.10.12 |