리눅스 파일시스템

Jongwon·2021년 12월 1일
1

Linux Programming

목록 보기
10/25

리눅스 파일 시스템

저장장치에 파일 형태로 데이터를 저장하는 운영체제 내부의 코드로, 디스크의 파티션마다 다른 파일 시스템을 사용한다. 파일에 이름을 부여하고. 디스크의 파일위치를 기록해둔다.
응용프로그램이 운영체제에 파일을 요청하면 파일시스템을 통해 파일을 찾아 반환한다.
리눅스는 최대 4개의 파티션까지 사용할 수 있고, 보통 ext4 파일시스템을 사용하는데 Root 파일 시스템 단 1개에서 시작되어야 함. 다른 파일 시스템은 Root 파일시스템에 mount 시키는 방식으로 추가한다.


리눅스 파일 시스템의 구조는 위 그림과 같다.

  • Boot Block: 운영체제 코드가 저장되어 있다.
  • Super Block: 파일시스템 크기, 디스크의 물리적 정보, 파일 시스템 내 사용가능한 inode개수와 list, free데이터블록 개수와 리스트 등 전체 파일 시스템과 관련된 형상정보 유지
  • Inode: 모든 파일과 1:1로 대응되며, 파일의 이름(디렉토리명, 파일명)을 제외한 모든 정보(접근시간, 접근권한, 파일타입, 크기, 데이터 위치)인 메타데이터를 가지고있다. 파일의 생성 시 만들어지고 크기는 보통 256Bytes이고, 통상적으로 0번과 1번 아이노드는 사용되지 않는다.
  • Data Block: 실제 파일의 데이터가 저장되는 공간. 파일명이 이곳에 있는데, 파일명은 단순히 Inode번호를 찾기 위해 존재한다.

Inode

파일시스템 개념


각 파일시스템마다 하나의 System File Table과 Inode Table이 존재, 프로세스 생성 시마다 File Descriptor Table을 만듬.

  • File Descriptor Table : File Descriptor 번호, Flag, System File Table의 포인터
  • System File Table : reference count, 파일의 offset, 파일상태flag, inode table의 포인터
  • Inode Table(=in-core Inode, Inode list) : 디스크에 있는 Inode정보, reference count, inode번호, 파일시스템 장치 번호

각 파일 디스크립터의 0,1,2번 엔트리는 이미 사용
한 프로세스가 동일한 파일 2번 부를 때 : 같은 fd에 다른 엔트리에서 system file table 한개씩 참조, 같은 inode 가리킴.
두개의 프로세스가 같은 파일 실행 : 다른 fd에서 system file table 한개씩 참조, 같은 inode가리킴.

Virtual File System(VFS)
리눅스 커널에는 단일의 시스템 호출을 통해 어떠한 매체에 있는 파일 시스템에 접근할 수 있도록 공통 파일 모델(read, write, open, link 등 공통적인 인터페이스)를 가상시스템으로 구현해둠.



리눅스에서 디스크 구조

디스크는 디스크 블록의 집합이다.
디스크블록 : 여러 섹터의 모음, 일반적으로 1~8KB(2의 제곱수 단위)이다.
디스크 할당 방법

  1. 연속 할당(Sequential Allocation)

    • 연속적인 데이터블록을 배정하여 파일을 저장하는 방식. CD-ROM 등에서 사용
    • 연속적인 블록을 찾기는 쉽지 않음.

  2. 불연속 할당(non-Sequential Allocation)
    HDD 등에서 사용

    • 블록체인 기법(Block-Chain)
      • 할당된 블록들을 link로 연결
      • 뒷부분만 따로 읽을 수 없고, 하나라도 손상되면 파일을 읽을 수 없음
      • 디스크블록에 파일데이터와 메타데이터(다음 블록 위치 등)가 함께 저장됨
    • 인덱스블록 기법(Index block)
      • Linux에선 이 방식을 사용하고, Index block을 Inode라 부름.



리눅스 파일 종류

리눅스는 모든 것을 바이트 스트림 형태의 파일로 정의하였다. 따라서 동일한 인터페이스로 장치, 네트워크 등에 접근이 가능하다.

1. 일반 파일(Regular File) : 기호 -
      데이터를 담고있는 파일

디렉토리 파일(Directory File) : 기호 d
      경로 파일(뒤에서 자세히 설명)

링크 파일(link File) : 기호 l(심볼릭링크만)
      바로가기 파일과 같은 형태, 하드 링크와 심볼릭 링크가 있다.

파이프 파일(FIFO File) : 기호 p
      두 프로세스 간 데이터 전달을 중개함(통신에 사용). 파일시스템에 이름을 부여하고 생성한 파이프파일을 네임드 파이프라 함.

블록 디바이스 파일(Block Device File) : 기호 b
      하드디스크처럼 블록 단위의 데이터를 입출력하는 장치파일. 속도가 빠르다.

문자 디바이스 파일(Character Device File) : 기호 c
      마우스나 키보드처럼 문자 단위로 입출력하는 장치파일. 속도가 느리다.

소켓 파일(Socket): 기호 s
      컴퓨터 사이에 데이터통신을 위한 인터페이스 파일로 파일 생성 후 로컬과 원격의 주소 설정



profile
Backend Engineer

0개의 댓글