ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파일시스템
    Computer Science/File System 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

    'Computer Science > File System' 카테고리의 다른 글

    하드디스크 / cluster, block  (0) 2023.08.28
Designed by Tistory.