Linux

[Linux] 파일시스템

Victory_HA 2022. 7. 31. 13:57

Contents

  • 0.Why Linux?
  • 1.File System
  • 2.File
  • 3.Directory
  • 4.Link
  • 5.Mount
  • 6.File Allocation

0. Why Linux?

  • Linux IT 산업 전반에서 쓰는 OS

ex) 휴대폰, 클라우드 서버, 네트워크 장비 등 리눅스를 사용하는 경우가 많다.

  • 네트워크, 브라우저, 웹 어플리케이션, 보안 유틸리티 등.. 수많은 프로그램이 리눅스 기반에서 동작한다.
  • Linux를 통해 OS의 핵심 동작 원리를 파악할 수 있다.
  • Linux는 OpenSource이기 때문에 소스를 보면서, 네트워크 통신, 메모리 시스템, 파일시스템, CPU 아키텍처 (Exception, Interrupt, Memory Management)등을 알 수 있다.


1. File System

  • 파일을 관리하는 시스템
  • 파일에 이름을 지정하고 파일 읽기,쓰기,열기,닫기 등의 일련의 작업을 수행


2. File

  • 저장장치에 저장된 연관된 정보들의 집합
  • 보조 기억 장치에 할당하는 최소단위
  • Sequence of bytes (물리적 정의)

2-1. Inode (메타 데이터)

  • 파일시스템은 파일들을 관리할 정보가 필요하다.
  • 이 정보들을 메타 데이터 (파일 속성)라고 한다.
  • 파일 이름을 제외 한 파일의 데이터(실체)를 저장한다.

ex) 확장자, 생성날짜, 권한 정보, 파일 데이터 위치 등..



2-2. File Open

file1의 Contents(실제 데이터)가 데이터블록 212, 213에 저장되고,
file1의 메타 데이터에는 Contents의 데이터 블록 주소가 저장되어있다.
메타 데이터는 102(Inode 번호)에 저장되어 있다.

  • File Open
    • 전처리 과정(File Descriptor, File Table등 참조)을 통해,
    • file1의 메타데이터가 저장된 102 블록을 찾은 후, Contents가 저장된 블록 주소를 찾는다.
    • 실제 저장된 데이터의 위치를 찾았으니 읽기, 쓰기 등의 파일 수정이 가능해진다.


3. Directory

  • Window 폴더와 동일한 역할
  • Linux 파일 시스템 입장에서 디렉토리는 파일의 정보를 담고 있는 파일
  • file들의 inode들을 저장하는 파일

3-1. Directory Open & files search

Dir의 Contents는 211에 저장
Dir의 메타 데이터에는 Contents의 block 주소를 저장 되어있다.
메타데이터는 101(Inode 번호)에 저장되어있다.


  • 디렉토리의 파일 리스트 확인
    • 전처리 과정(File Descriptor, File Table등 참조)을 통해,
    • Dir의 메타데이터가 저장된 101 블록을 찾은 후, Contents가 저장된 블록 주소를 찾는다.
    • Dir의 Contents는 211에 저장돼있고, 211에서 파일명 file1을 확인 할 수 있다.


4. Link

Link 종류

  • Symbolic link (soft link)

    • Windows의 파일 바로가기와 비슷하다.
    • 파일(디렉토리 포함)의 경로만 복사
  • Hard link

    • 파일 전체 원본 복사 가능
    • 디렉토리 복사 불가능

ex) 어떤 디렉토리를 hard link를 한다고 해보자
doc에서 etc 디렉토리 link했고, etc에서 doc 디렉토리 link 했다.
이렇게 되면 순환반복이 일어난다.
검색이 잘 될까?
이런 이유로 linux에선 디렉토리에 대한 hard link를 금지한다.



5. Mount

  • 하드디스크들, USB 등의 2차 보조기억장치를 OS에서 사용할 수 있도록 연결하는 것
  • 이 기억장치들은 각각의 파일 시스템이다.
  • 리눅스에서 마운트는 자동으로 되지 않는다.
  • 리눅스는 window와 다르게 root 디렉토리로 마운트 할 필요가 없이 원하는 디렉토리에 마운트가 가능하다.

6. File Allocation

  • 파일은 디스크에 저장한다.
  • 파일을 저장하려면 디스크에 공간이 필요하다.

6-1. 파일 할당 방법 3가지

Continuouse Allocation (연속할당) - Window

  • 연속 할당은 말그대로 연속된 블록에 파일을 할당 하는 것이다.

    ex) 블록 크기가 1KB이고, 할당할 파일은 f1, f2, f3 3개가 있고 각각의 크기는 5KB, 3KB, 4KB이다.

  • 단점
    • 데이터가 늘어난다? => 데이터를 밀어내야한다.
    • 중간에 크기 1짜리 파일이 삭제됐다? => 공간 활용하기 위해선 복잡해진다.
  • 해결방법
    • Linked Allocation

Linked Allocation (연결 할당)

연결 할당을 수행한 모습이다.
공간에 맘대로 데이터를 저장했다.
데이터 블록의 마지막엔 다음 블록의 주소를 저장하는 포인터 공간이 존재하며,
여기서 다음 블록을 가리키고 있다.
데이터의 끝인 마지막 블록엔 포인터 공간에는 끝임을 나타내는 값이 저장되어 있다.

  • 연속 할당의 문제점을 해결하기 위해 나온 방법으로, linked list와 같은 방식으로 동작한다.

  • 단점

    • 디스크 단편화
    • 느리다 (곧바로 33 데이터를 찾아가고싶다, 그럼 첫번째 블럭부터 순차로 33 데이터를 찾아야한다)
    • 어떤 문제로 중간 데이터가 삭제가 된다면 주소 공간이 사라졌으므로 다음 데이터를 찾을 수 없다.
  • 해결방법

    • File Allocation table

Indexed Allocation (인덱스 할당) - Linux

  • 공간에 맘대로 데이터를 저장한다.
  • 데이터를 할당 하며 데이터들의 주소를 가지는 인덱스 블록을 하나 더 가진다.
  • linked Allocation의 단점을 어느정도 보완한 방법
  • 단점
    • 블록 한개당 할당 가능한 데이터 크기가 정해져있다.
    • 하나의 블록 크기가 512 bytes인 블록은 최대 저장할 수 있는 블록 인덱스 개수는 512 / 4 bytes(포인터 크기) = 128개이다. 즉 파일의 최대 크기는 128 512bytes = 64KB로 아주 작은 크기이다. 블록 크기가 1KB이라 하더라도 최대 인덱스 개수는 256개(1000/4)이고 최대 파일의 크기는 256KB(2561KB)이다.
  • 해결방법
    • 인덱스 블록을 여러개 둔다.
    • linked list화 한다.