푸라멘 2023. 8. 13. 17:51

파일시스템 : 운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘

 

파일시스템을 사용하는 이유

● 0과 1을 비트로 고나리하기에는 오버헤드(시간, 메모리, 자원)이 너무 큼

● 블록 단위로 관리하기로함(4KB)

● 블록마다 고유번호를 부여해서 관리 -> 사용자가 블록 고유번호를 관리하기 어려움

● 추상적(논리적)객체가 필요 -> 파일

● 각 파일을 블록 단위로 관리하기 위함 

 

파일 저장방법 

-> 가능한 연속적인 공간에 파일을 저장하는 것이 좋음 

But

외부단편화, 파일사이즈 변경 문제로 불연속 적인 공간에 파일 저장기능이 요구됨

-> 해결방안 제시 

1) 블록체인 : 블록을 링크드리스트로 연결 (맨 처음 블록부터 주소를 따라가면 연결 )

2) 인덱스 블록 기법 : 각 블록에 대한 위치정보를 기록해서 한번에 끝 블록을 찾아갈 수 있도록 함 (블록 위치정보를 저장)

 

 

※외부단편화

외부단편화 설명

위와 같이 남아있는 메모리 공간은 50MB+50MB =100MB로 요청한 메모리 공간 80MB보다 크지만, 남아있는 공간이 연속적이지 않아 Process C를 할당할 수가 없게 된다. 따라서 남아있는 메모리 공간이 낭비되게 되는 문제가 발생한다.

참조 : https://code-lab1.tistory.com/54

 

 

파일시스템 예시

● Linux : ext2, ext3, ext4 

● Windows : FAT, FAT32, NTFS

 

 

파일시스템

1) inode : UNIX 스타일의 파일 시스템

크게 3가지 구조

● Super Block : 파일 시스템 정보 및 파티션 정보 (리눅스에서 df)

● inode Block : 파일상세정보 (PCB)

● Data Block : 실제데이터 저장 

 

모든 파일이나 디렉토리는 반드시 inode를 하나씩 가지게 됨 -> 파일 or 디렉토리를 inode 번호랑 매칭시켜 인식 

파일처리방법

1) 파일 생성 -> inode번호  부여

2) 생성된 inode block에 메타데이터(파일권한, 소유자정보, 파일사이즈, 생성기간, 데이터저장위치) 를 저장 

3) inode block의 메타데이터 정보를 기반으로 파일 접근

 

각 block group 마다 다음과 같은 파일 시스템 구조를 가진다(Inode table = inode block)

● Super Block

  -> 파일 시스템의 전체 크기, 마운트 정보, Data Block의 개수, 파일 시스템과 같은 주요 정보를 담음

● Group descriptors(GDT)

  -> 해당 파일 시스템 내에 모든 Block Group 들의 정보를 기록

  -> Group 내의 Free Block의 개수, inode의 개수 및 디렉토리 개수 저장

● inode table 

  -> inode block들의 모임 -> inode block 안에 inode 들이 모여있음 

  -> 접근 권한, 소유주, inode번호 등, 파일에 대한 정보를 저장하고 있는 부분 

  -> 파일 하나당 하나의 inode가 사용됨

● Data blocks Bitmap 

  -> Data block 내에서 빈공간을 관리하기위해 비트맵을 사용

  -> Block의 할당 상태를 나타내며, Block을 할당하거나 해제할때 사용

● inode Bitmap

  -> inode table 내에서 빈공간을 관리하기위해 비트맵을 사용

  -> inode를 할당하거나 해제할때 사용

● Data blocks

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

 

 

 

inode 구조

● mode 

i_mode File mode

-> type(4bit) : directory, file, link를 결정 

-> u (setuid) : 파일이 수행될 때 파일을 생성한 사용자의 권한을 동작할 수 있게 함

-> g (setgid) : 파일이 수행될 때 파일 소유 그룹의 멤버로의 권한을 동작할 수 있게 함

-> s (sticky bit) : 해당 bit 설정된 디렉토리에서는 누그든 파일을 저장할 수 있으나, 파일 삭제는 해당  파일 소유자만 가능하게 함 

-> 하위 9bit : r(read), w(write), x(excute) 

 

※ link file

하드링크 : 같은 inode를 가르킴

심볼릭 링크 : 새로운 inode를 할당하고 새로운 inode가 data block을 가르킴 

 

● Owner Info (i_oid, i_gid)

 -> 파일을 생성한 소유자의 user id

 -> 파일을 생성한 소유자의 group id 

 

● Size 

 -> 파일의 사이즈를 표시 

 

● Timestamps (i_atime, i_ctime, i_mtime)

 -> 파일 접근시간, 생성시간, 수정시간 

 

● Direct Blocks 

 -> 실제 데이터를 담고 있는 하나의 크기가 4kb인 Block을 가르키는 포인터

 

● Indirect Blocks (Single, Double, Triple)

 -> Data Block을 가르키는 포인터를 가르키는 포인터 테이블

 

2) ext 계열 파일 시스템 (extended file system)

● ext2 : 리눅스에서 적용하는 시스템 inode구조를 따르고 있다./

● ext3 : ext2구조에서 저널링 기능이 추가되었다. 

ext4 : Extent Tree를 사용하여 인접한 물리적 블록의 묶음 및 대용량 파일 접근 성능을 향상시키도 단편화를 줄임

Extend Tree 구조

 

ext 비교

※저널링(Journaling)

파일 수정 중  시스템 충돌이나 전원 문제가 발생하면 여러문제가 발생할 수 있다.

ex) inode 번호를 할당 받았으나 데이터를 할당 받지 못하는경우 -> Data Block을 사용하지 못해 스토리지 누수가 발생

 

inode나 비트맵의 수정이 있으면 그 내용을  로그로 남긴다.

이렇게 남겨진 로그를 추적하여 변경사항을 반영한다. 

 

로그를 작성중 크래시가 발생하는 경우

 -> 실제 파일에 반영되지 않아 파일의 일관성이 깨지지 않음

 

실제 파일에 반영하는 중에 크래시가 발생하는 경우 

 -> 저널에 기록된 로그를 기반으로 다시 반영 

 

3가지 저널링 모드

- Journal : 모든 데이터는 파일 시스템에 쓰여지기전에 Journal에 커밋되고, 나중에 실제 파일 시스템에 복사됨, 속도는 라지만 높은 안정성 보장

 

- Ordered (ext4 default mode) : 데이터는 저널링 없이 기록하고 , 메타 데이터만 journal에 기록, 속도 측면에서 성능이 좋아지나 journal에 기록되어지지 않았다면 데이터 손실 가능성이 있다.

 

- Writeback - 데이터를 먼저 저너링하여 기록 후 메타데이터를 journal에 기록한다. 성능향상을 기대할 수 있으나 안정성이 떨어짐 

 

 

3) FAT (File Allocation Table)

- 디지털 카메라의 저장 장치, USB 메모리등에서 사용

- FAT12, FAT16, VFAT, FAT32 등의 구조가 있다. 

 

FAT32 구조

- FAT32 는 크게 예약영역, FAT 영역, DATA영역 3가지로 나눌 수 있다.

FAT32 구조

● 예약된 영역 (Reserved Area)

Resesrved Area 구조

- BR(Boot Record) : window를 부팅시키기 위한 기계어 코드와 FAT 파일 시스템의 여러 설정 ㄱ밧 저장

- FSINFO(File System Information) : 파일시스템의 정보를 저장

- Boot Strap : 부팅시 동작해야할 명령어 코드가 들어있는 부분

- Reserved Sector : 예약된 섹터 공간

- Boot Record Backup : BR의 정보를 백업하는 섹터

- FSINFO Backup : FSINFO의 정보를 백업하는 섹터 

 

● FAT 영역 

 

FAT영역 구조

- FAT1 

 -> 파일이나 디렉토리 할당 유무구 기록되는 부분

 -> 클러스터 단위로 기록되며 1개의 클러스터에 대한 사용 유무를 기록하기 위해 4byte 필요

 

- FAT2

 -> FAT1 영역의 백업 영역

 -> FAT1 구조와 동일 

 

● DATA 영역

 - 실제 데이터인 파일이나 디렉토리가 저장되어 있는 영역 

 

4) NTFS 

 - Window NT 부터 사용되기 시작한 파일 시스템

 - 모든 데이터를 파일 형태로 관리 

 - VBR(Volume Boot Record), MFT(Master File Table), Data 영역으로 나뉘어진다.

 

NTFS 파일 시스템 구조

- VBR 영역
 -> Boot Sector 와 추가적인 Boot Code가 저장되는 영역

- MFT

 -> 파일의 위치, 시간정보, 크기, 파일 ,이름등의 속성 정보를 보관

- Data 영역

 

 

 

 

 

참조 : https://heeya-stupidbutstudying.tistory.com/entry/Linux-ext-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C%EA%B3%BC-inode-Linux-File-System-Hierarchy

https://gedor.tistory.com/5

https://jmoon.co.kr/84