📁 File and File System

개요

파일은 데이터를 저장하고 관리하는 기본 단위입니다. 이는 컴퓨터 시스템에서 중요한 역할을 하며, 파일 시스템은 이러한 파일들을 체계적으로 관리하는 시스템입니다. 이 문서에서는 파일과 파일 시스템의 개념, 디렉토리 엔트리, 링크, 권한, 마운트, 파일 할당, 그리고 EXT 파일 시스템에 대해 자세히 설명합니다.

파일(File) 🗃️

파일은 데이터를 담는 그릇입니다. 이는 연속적인 데이터를 유의미한 구분으로 나누기 위해 존재하며, 텍스트 파일, 이미지 파일, 비디오 파일 등 다양한 형태로 존재할 수 있습니다. 각 파일은 이름, 크기, 수정 날짜 등 여러 메타데이터를 포함합니다.

파일 시스템(File System) 🗄️

파일 시스템은 파일을 저장하고 관리하는 시스템입니다. 이는 파일의 메타데이터(이름, 확장자, 권한 등)를 이용해 파일을 관리하며, 이러한 메타데이터는 디렉토리에 저장됩니다. 디렉토리는 파일과 파일의 메타데이터를 담고 있는 파일로서, 트리 구조로 구성됩니다. 🌳

디렉토리 엔트리(Directory Entry) 📑

디렉토리 엔트리는 디렉토리를 표현하는 자료구조입니다. 각 디렉토리 엔트리는 파일의 이름과 inode를 가리키는 포인터로 구성됩니다. inode는 파일 이름을 제외한 파일 메타데이터를 포함하며, 파일의 실제 데이터를 가리킵니다.

  • Directory Entry = 파일 이름 + inode를 가리키는 포인터
  • inode는 파일의 크기, 소유자, 권한, 데이터 블록 위치 등의 정보를 포함합니다.

링크는 파일 시스템에서 파일이나 디렉토리에 대한 참조를 만드는 방법입니다. 링크에는 소프트 링크(심볼릭 링크)와 하드 링크 두 가지가 있습니다.

소프트 링크(심볼릭 링크) 🧷

소프트 링크는 파일의 포인터(경로)만 링크합니다. 이는 파일의 경로를 참조하며, 원본 파일이 삭제되면 소프트 링크는 깨집니다. 소프트 링크는 디렉토리를 링크할 수 있습니다.

하드 링크 🔩

하드 링크는 파일의 원본 내용을 다른 이름(경로)로 만듭니다. 이는 파일의 inode 번호를 공유하므로 원본 파일이 삭제되더라도 하드 링크는 계속 존재합니다. 하드 링크는 디렉토리를 링크할 수 없습니다.

링크와 트리 구조 🔍

디렉토리는 트리 구조로 구성됩니다. 링크를 사용하면 서로 다른 말단 노드에서 파일을 참조할 수 있지만, 트리 구조는 깨지지 않습니다. 소프트 링크는 파일의 경로를 참조하기 때문에 트리 구조를 변경하지 않습니다. 하드 링크는 디렉토리를 링크할 수 없으므로 순환 참조 문제를 방지합니다.

권한(Permission) 🛡️

파일 시스템에서 파일과 디렉토리의 접근 권한은 중요합니다. 각 파일과 디렉토리는 소유자(user), 그룹(group), 그리고 기타 사용자(others)에게 서로 다른 권한을 설정할 수 있습니다.

  • user: 파일의 소유자
  • group: 소유자가 속한 그룹
  • others: 소유자가 속한 그룹에 속하지 않은 사용자

권한은 r(읽기), w(쓰기), x(실행)로 나타내며, chmod 명령어를 통해 수정할 수 있습니다.

chmod u+rwx,g+rx,o+r file.txt

위 명령어는 파일 소유자에게 읽기, 쓰기, 실행 권한을, 그룹 사용자에게 읽기, 실행 권한을, 기타 사용자에게 읽기 권한을 부여합니다.

마운트(Mount) 💾

마운트는 HDD, USB 등의 2차 저장장치를 로컬 파일 시스템에 연결하는 과정입니다. 각각의 장치는 자체 루트를 가진 파일 시스템이지만, 마운트를 통해 하나의 파일 시스템 안에 있는 것처럼 관리할 수 있습니다. 예를 들어, 외장 하드를 /mnt/external 디렉토리에 마운트할 수 있습니다.

mount /dev/sdb1 /mnt/external

위 명령어는 /dev/sdb1 장치를 /mnt/external 디렉토리에 마운트합니다.

파일 할당(File Allocation) 🗂️

디스크에 파일을 저장하기 위해 공간을 관리하는 방법에는 연속 할당, 연결 할당, 색인 할당 등이 있습니다. 리눅스에서는 주로 색인 할당 방식을 사용합니다.

  • 연속 할당(Contiguous Allocation)
    연속 할당은 파일의 모든 블록이 디스크 상에서 연속된 위치에 저장되는 방식입니다. 이는 빠른 접근 속도를 제공하지만, 파일 크기가 변경될 때 조각화(fragmentation)가 발생할 수 있습니다.

  • 연결 할당(Linked Allocation)
    연결 할당은 파일의 각 블록이 다음 블록을 가리키는 포인터를 포함하는 방식입니다. 이는 파일 크기 변경에 유연하지만, 블록을 순차적으로 읽어야 하기 때문에 접근 속도가 느릴 수 있습니다.

  • 색인 할당(Index Allocation)
    색인 할당은 파일의 모든 블록 주소를 색인 블록에 저장하는 방식입니다. 이는 연속 할당의 조각화 문제와 연결 할당의 느린 접근 속도를 해결할 수 있습니다.

EXT 파일 시스템 🛠️

EXT3와 EXT4 파일 시스템은 저널링 기능을 제공합니다.

저널링(Journaling) 📝

저널링은 파일 시스템의 메타데이터를 기록하여 시스템 충돌이나 비정상적인 종료 후 데이터를 복구할 수 있게 합니다. 저널링은 데이터를 캐시에 넣은 뒤, 원본과 캐시의 상태가 달라질 수 있기 때문에 업데이트 상태를 관리합니다.

EXT4의 특징 🌟

EXT4는 EXT3보다 향상된 기능을 제공합니다. 이는 더 큰 파일과 볼륨을 지원하며, 효율적인 공간 할당과 빠른 파일 시스템 검사를 제공합니다.

참고

https://www.youtube.com/watch?v=oeuVjeeoLSQ

profile
혼자 하는 개발은 없다고 생각하는 개발자

0개의 댓글