리눅스

#6-1 리눅스 파일 시스템

sundori 2025. 1. 9. 13:53

목차

    파일 시스템(File System)

    파일 시스템은 운영체제가 파티션이나 디스크에 데이터를 저장하고, 읽고 쓰고 찾기 위해 구성하는 일련의 체계를 말한다.

    그리고 이러한 파일 시스템은 운영체제가 사용자에게 제공하는 가장 기본적인 데이터 관리 인터페이스이다.
    사용자는 파일 시스템을 통해 데이터를 파일과 디렉토리 형태로 저장하고 접근하며, 파일의 이름, 크기, 경로, 권한 등의 메타데이터를 확인할 수 있다.
    파일 시스템은 사용자의 명령을 받아 디스크의 물리적 저장 위치와 데이터를 매핑하여 효율적으로 관리한다.
    예를 들어, 파일 생성, 삭제, 복사, 이동, 읽기, 쓰기 등의 작업은 파일 시스템을 통해 처리된다.

     

    파일 시스템의 기능

    1. 데이터 저장 및 관리

    • 파일과 디렉토리 관리: 파일과 디렉토리를 생성, 수정, 삭제하며 계층적 구조로 조직화한다.
    • 경로 탐색: 루트 디렉토리(/)를 시작으로 파일과 디렉토리를 탐색할 수 있도록 경로 체계를 지원한다.

     

    2. 읽기/쓰기 연산

    • 파일 읽기: 저장된 데이터를 불러와 사용자가 활용할 수 있도록 한다.
    • 파일 쓰기: 데이터를 디스크에 저장하거나 기존 데이터를 수정할 수 있도록 한다.

     

    3. 파일 권한 및 소유권 관리

    • 권한 설정: 파일과 디렉토리에 대해 읽기, 쓰기, 실행 권한을 사용자와 그룹별로 설정한다.
    • 소유권 관리: 파일과 디렉토리의 소유자를 지정하고, 관련 권한을 관리한다.

     

    4. 저장 공간 관리

    • 디스크 공간 할당: 파일 데이터를 효율적으로 저장하기 위해 디스크 블록을 할당.
    • 디스크 사용량 확인: df 및 du 명령어를 통해 디스크 사용량과 남은 공간을 관리.

     

    5. 파일 시스템 유형 지원

    • 다양한 파일 시스템: ext4, XFS, Btrfs, FAT32, NTFS 등 다양한 파일 시스템 형식을 지원.
    • 마운트/언마운트: mount 명령으로 파일 시스템을 특정 디렉토리에 연결하고, umount로 해제.

     

    6. 메타데이터 관리

    • 파일의 이름, 크기, 생성/수정 시간, 접근 권한 등 메타데이터를 저장하고 관리.

     

    7. 데이터 무결성 및 복구

    • 저널링: ext4, XFS 같은 파일 시스템은 변경 내역을 기록해 시스템 충돌 시 데이터 손실을 방지.
    • fsck 유틸리티: 파일 시스템 오류를 감지하고 복구하는 도구.

     

    8. 파일 링크 지원

    • 심볼릭 링크: 파일이나 디렉토리의 경로를 참조하는 링크를 생성.
    • 하드 링크: 동일한 파일 데이터에 여러 이름을 부여해 관리.

     

    9. 파일 검색 기능

    • 인덱싱: 빠른 파일 검색을 위해 파일 시스템 내에서 인덱스 유지.
    • 파일 탐색 명령어: find, locate 등을 사용해 파일 검색.

     

    10. 네트워크 파일 시스템 지원

    • NFS(Network File System): 네트워크 상에서 파일 시스템을 공유하고 접근 가능.
    • Samba, CIFS: 윈도우와의 파일 시스템 공유를 지원.

     

    11. 보안 및 암호화

    • 암호화 파일 시스템: 데이터를 암호화해 무단 접근 방지.
    • SELinux/AppArmor: 파일 수준에서 보안을 강화하는 보안 프레임워크 제공.

     

     

    12. 다중 사용자 환경 지원

    • 여러 사용자가 동시에 파일 시스템에 접근할 수 있도록 동시성 및 충돌 방지 관리.

     

    리눅스 파일 시스템의 종류와 특징

    ext (Extended File System)
    • 특징: 리눅스의 최초 파일 시스템(1992년).
    • 제한사항: 현대적인 기능이 부족하며, 대규모 데이터 관리에 비효율적.
    • 사용처: 초기 리눅스 배포판에서 사용.
    ext2 (Second Extended File System)
    • 특징: 저널링이 없는 파일 시스템으로, 성능이 뛰어나지만 데이터 복구 기능이 부족.
    • 최대 파일 크기: 2TB.
    • 사용처: 임시 스토리지 또는 플래시 메모리(저널링 오버헤드 감소 필요 시).
    ext3 (Third Extended File System)
    • 특징: 저널링 기능 추가로 안정성과 데이터 복구 능력 향상.
    • 호환성: ext2에서 업그레이드 가능.
    • 단점: 성능 및 확장성에서 한계.
    • 사용처: 안정성이 요구되는 표준 리눅스 시스템. 
    ext4 (Fourth Extended File System)
    • 특징: ext3의 확장판으로, 대용량 스토리지 및 성능 최적화.
      • 최대 파일 크기: 16TB.
      • 저널링, 디스크 조각화 방지, 빠른 파일 시스템 점검 등.
    • 사용처: 대부분의 현대 리눅스 배포판에서 기본 파일 시스템.
    XFS
    • 특징: 고성능, 저널링 파일 시스템으로 대용량 데이터를 처리하는 데 최적화.
      • 동적 inode 할당, 고속 데이터 쓰기, 디스크 조각화 방지.
    • 최대 파일 크기: 8EB.
    • 사용처: 고성능 서버 및 데이터베이스 환경(CentOS/RHEL 등에서 널리 사용).
    Btrfs (B-Tree File System)
    • 특징: 현대적 파일 시스템으로 스냅샷, 디스크 풀링, 데이터 압축, 복구 기능 제공.
      • 데이터 무결성 검사, RAID 지원.
    • 장점: 확장성과 유연성.
    • 단점: 아직 ext4/XFS에 비해 안정성이 부족한 것으로 평가됨.
    • 사용처: 데이터 무결성이 중요한 환경, 오픈수세(SUSE) 기본 파일 시스템.
    FAT32 및 exFAT
    • FAT32
      • 특징: 크로스 플랫폼 호환성 제공(Windows와 공유 가능).
      • 단점: 4GB 파일 크기 제한, 현대적 기능 부족.
      • 사용처: USB 드라이브 및 이동식 장치.
    • exFAT
      • 특징: FAT32의 확장판으로 파일 크기 및 파티션 제한이 없음.
      • 사용처: 대용량 USB 드라이브 및 외장 하드.
    NTFS
    • 특징: Windows에서 사용하는 기본 파일 시스템.
      • 리눅스에서 읽기/쓰기는 가능하지만 성능 및 기능 제한이 있을 수 있음.
    • 사용처: 리눅스와 Windows 간 데이터 공유.
    ZFS
    • 특징: 고급 파일 시스템으로 데이터 무결성, 스냅샷, RAID-Z 등을 지원.
    • 장점: 스냅샷 복구, 디스크 풀링, 대용량 데이터 관리.
    • 단점: 메모리 사용량이 많고 설정이 복잡.
    • 사용처: 고급 데이터 스토리지 시스템(FreeBSD, Ubuntu 등에서 사용 가능).
    NFS (Network File System)
    • 특징: 네트워크 상에서 파일 시스템을 공유하기 위한 분산 파일 시스템.
      • 여러 컴퓨터 간에 파일과 디렉토리를 공유 가능.
    • 사용처: 서버와 클라이언트 간 데이터 공유.
    CIFS/SMB
    • 특징: 윈도우 네트워크 파일 공유를 지원하는 파일 시스템 프로토콜.
    • 사용처: 리눅스와 Windows 간 파일 공유.
    정리
    리눅스에서 파일 시스템은 다양한 사용 환경과 요구 사항에 맞춰 선택된다.

    • ext4: 일반적인 리눅스 배포판에서 기본으로 사용.
    • XFS: 고성능 서버와 대규모 데이터 처리.
    • Btrfs: 데이터 무결성과 유연성이 중요한 환경.
    • FAT32/exFAT: 외장 드라이브와 크로스 플랫폼 데이터 공유.
    • NFS: 네트워크 상에서 파일 공유.
      목적과 환경에 따라 적합한 파일 시스템을 선택해 사용하는 것이 중요하다.

    기본 용량 단위

    기본 용량 단위
    Bytes (B)
    
    데이터의 가장 작은 단위로, 하나의 문자나 작은 데이터를 저장하는 데 사용.
    예: 1 Byte = 8 bits.
    Kilobytes (KB)
    
    1 KB = 1,024 Bytes.
    작은 텍스트 파일이나 설정 파일의 크기를 나타낼 때 사용.
    Megabytes (MB)
    
    1 MB = 1,024 KB = 1,048,576 Bytes.
    이미지, 음악 파일, 일반 소프트웨어 크기를 나타낼 때 사용.
    Gigabytes (GB)
    
    1 GB = 1,024 MB = 약 1억 바이트.
    영화 파일, 대형 애플리케이션 또는 하드 디스크 크기를 나타낼 때 사용.
    Terabytes (TB)
    
    1 TB = 1,024 GB = 약 1조 바이트.
    대용량 스토리지 디스크나 서버의 총 저장 공간을 표현.
    Petabytes (PB)
    
    1 PB = 1,024 TB.
    데이터 센터나 클라우드 스토리지의 총 데이터 용량을 표현.
    
    2진법 vs 10진법 단위 차이
    리눅스는 일반적으로 2진법 단위(1KB = 1,024B)를 사용한다.
    반면, 일부 시스템은 10진법 단위(1KB = 1,000B)를 사용해 차이가 생길 수 있다.
    이를 명확히 하기 위해 2진법 단위는 KiB, MiB, GiB와 같이 표기하기도 한다.
    1 KiB = 1,024 Bytes.
    1 MiB = 1,024 KiB.
    
    MB (Megabyte)
    기준: 10진법 기반 단위.
    크기:
    1 MB = 1,000 KB = 1,000 × 1,000 Bytes = 1,000,000 Bytes.
    사용처:
    저장 장치 제조업체, 네트워크 속도, 광고 등에서 사용.
    예: USB, 하드 디스크 크기(예: 500MB), 인터넷 속도 표기(예: 50MBps).
    MiB (Mebibyte)
    기준: 2진법 기반 단위.
    크기:
    1 MiB = 1,024 KiB = 1,024×1,024 Bytes = 1,048,576 Bytes.
    사용처:
    운영체제, 소프트웨어에서 정확한 데이터 크기를 계산할 때 사용.
    예: 리눅스에서 파일 크기, 메모리 크기 표시(예: 50MiB).
    차이점
    MB (10진법)와 MiB (2진법)는 계산 기준이 다르다.
    1 MB = 1,000,000 Bytes.
    1 MiB = 1,048,576 Bytes.
    예시:
    파일 크기 1,048,576 Bytes:
    10진법 기준: 1.048 MB로 표시.
    2진법 기준: 정확히 1 MiB로 표시.

     

    가끔 보면 외장 하드나 외장 ssd 같은 제품을 살려고 보니 제품 표기에는 1TB(1024GB)라고 나오지만 실제로 제품을 받고 컴퓨터에 장착 해보면 931GB만 사용 가능한 경우가 있다. 이는 2진법 vs 10진법 단위 차이로 인해 발생하는 오해인데 우리한테 친숙한 10진법으로 제조업체는 1GB는 1,000mb로 계산한다.

    하지만 리눅스나 윈도우의 운영체제에서는 2진법 단위를 사용한다.

    따라서 사용자는 32GB라고 적혀있는 제품을 샀다고 왜 32GB라고 표시가 안되 이거 사기 아니야 하면 안된다는 것이다...

    SanDisk 32GB 제품

    그냥 그런가보다 하자..

    파티션: 저장 장치(디스크)를 독립적인 여러 구역으로 나눈 논리적 단위로, 각각 별도의 파일 시스템을 가질 수 있다.
    디스크: 데이터를 읽고 쓰는 데 사용되는 저장 장치로, 하드 디스크(HDD)나 고속 저장 장치(SSD)가 포함된다.

    인터페이스
    • 기술적 의미: 서로 다른 시스템, 소프트웨어, 하드웨어가 정보를 주고받기 위해 사용하는 접점이나 매개체.
    • 일반적 의미: 사용자와 시스템 간, 혹은 두 장치나 프로그램 간의 상호작용을 가능하게 하는 연결 방식.
    예: 운영체제의 파일 시스템 인터페이스는 사용자가 파일을 저장하거나 읽는 명령을 쉽게 실행할 수 있도록 해준다.

    저널링 파일 시스템

    저널링 파일 시스템은 데이터 변경 사항을 바로 디스크에 적용하기 전에 저널(journal)이라는 로그에 기록하는 파일 시스템이다. 이를 통해 시스템 충돌, 전원 손실 등의 예기치 않은 오류 발생 시 데이터를 복구하거나 무결성을 유지할 수 있다.

     

    초기 리눅스 시절 ext2 파일 시스템의 경우, 시스템이 갑작스럽게 동작을 멈추면 어떤 데이터가 수정 중이었는지 추적할 방법이 없었다. 이로 인해 파일 시스템의 무결성이 손상될 가능성이 높았다.

    따라서 이를 복구하기 위해서는 관리자가 직접 fsck라는 명령어를 입력하여 슈퍼블록, 비트맵, 아이노드 등 모두 검사해야 했기에 많은 시간이 걸렸다.

     

    하지만  저널링 기술을 사용한 파일 시스템은 파일을 실제로 수정하기 전에 우선 로그에 수정된 내용을 저장해서 비정상적으로 동작이 멈추더라도 시스템 복구를 위해 단지 로그만 검사하면 되기에 간편하고 시간 절약도된다.

     

    이러한 저널링 기술이 적용된 파일 시스템은 ext3, ext4, XFS, JFS등이 있다.

    (1)Boot Block(s)

    (2)Super Block

    (3)i-list(아이노드 목록)

     

    ext 파일 시스템의 구조

    일반적으로 디스크 드라이브 이용 시에 파티션을 분할하고 포맷(Format)이라고 부르는 작업을 통해 파일 시스템을 생성한다.

    다음 표는 디스크 드라이브와 파티션 및 파일 시스템과의 관계이다.

    Disk Drive
    Partition Partition Partition
        디스크 드라이브와 파티션


    • 디스크 드라이브: 데이터를 저장할 수 있는 물리적 장치.
      • 예: 하드 디스크(HDD), SSD.
    • 파티션: 디스크를 논리적으로 나눈 부분.
      • 각 파티션은 독립적으로 파일 시스템을 가질 수 있음.
      • 디스크를 파티션으로 나누면, 각 파티션은 운영체제에서 별도의 저장 공간으로 인식된다.

     

    ...

    파일 시스템 생성(포맷 작업)

    포맷 작업 중 파일 시스템의 구조가 생성되며, ext 파일 시스템의 경우 아래와 같은 구성 요소가 만들어진다.

    Format(mkfs)    ↓

    ...

     

    Partition(Filesystem)
    Boot Block(s) Super Block i-list Directory Blocks and Data Blocks
    ext 파일 시스템의 구성
    포맷을 통해 만들어지는 파일 시스템의 주요 구성 요소는 다음과 같다:

    (1)Boot Block(s)
    • 파일 시스템의 시작 부분에 위치하며, 부팅 정보를 저장.
    • 디스크에서 운영체제가 부팅될 경우 필요한 코드가 포함됨.
    • 부팅에 필수적인 데이터로, 파일 저장과 직접적인 관계는 없음.
    (2)Super Block
    • 파일 시스템의 메타데이터를 저장하는 블록.
    • 파일 시스템에 대한 정보를 담고 있으며, 운영체제가 파일 시스템을 관리하기 위해 참조.
    • 주요 정보:
      • 파일 시스템 크기.
      • 사용 가능한 블록 수.
      • 사용 가능한 아이노드 수.
      • 블록 크기.
      • 파일 시스템의 상태(정상, 오류 발생 여부).
    (3)i-list(아이노드 목록)
    • 아이노드(i-node): 각 파일에 대한 메타데이터를 저장하는 데이터 구조.
    • i-list: 파일 시스템에서 모든 아이노드의 목록.
    • 아이노드는 파일의 이름을 제외한 대부분의 정보를 저장:
      • 파일 크기.
      • 파일 소유자와 그룹.
      • 파일 권한.
      • 파일 생성 및 수정 시간.
      • 파일이 저장된 데이터 블록의 위치 정보(포인터).

     

    i-list
    i-node i-node .....

    i-list는 아이노드 번호의 목록이며, 저장되는 정보는 Directory Blocks and Data Blocks에 저장된다.

    Directory Blocks and Data Blocks는 2개의 블록이 섞여있는데 Directory Block에는 아이노드 번호와 파일명이 저장이되며 Data Block에는 파일이 보관해야할 정보를 저장한다.

     

    Directory Blocks and Data Blocks

    (1) Directory Blocks

    (2) Data Blocks

    Directory Blocks and Data Blocks
    .... Data Block .... Directory Block ....
    Directory Blocks and Data Blocks

    이 영역은 파일 시스템에서 실제 데이터를 저장하는 공간으로, 두 가지 블록으로 나뉜다:

    (1) Directory Blocks
    • 디렉토리에 대한 정보를 저장.
    • 저장 내용: 파일 이름과 해당 파일의 아이노드 번호를 매핑.
      • 파일 이름: 사용자가 인식할 수 있는 이름.
      • 아이노드 번호: 해당 파일의 메타데이터를 찾기 위한 고유 번호.
    • 예: 디렉토리에서 "file1.txt"라는 파일은 아이노드 번호 101에 연결될 수 있음.
    (2) Data Blocks
    • 파일의 실제 내용(데이터)을 저장.
    • 디렉토리 블록에 기록된 아이노드 번호를 통해 해당 파일의 데이터 블록을 찾아 접근.
    • 예: 텍스트 파일의 경우, 텍스트 내용이 이곳에 저장됨.

     

    Directory Blocks
    i-node number filename
    i-list와 Directory Blocks의 관계

    • i-list: 파일의 메타데이터를 저장하는 아이노드 목록.
    • Directory Blocks: 아이노드 번호와 파일 이름 간의 매핑을 저장.
    • 동작 과정:
      1. 사용자가 디렉토리에서 "file1.txt"를 요청.
      2. Directory Block에서 "file1.txt"의 아이노드 번호를 확인.
      3. i-list에서 해당 아이노드 번호를 참조하여 파일의 메타데이터 확인.
      4. 데이터 블록의 주소를 통해 실제 데이터를 읽음.

     

    '리눅스' 카테고리의 다른 글

    #6-2 리눅스 파일 시스템  (0) 2025.01.09
    #5-2 리눅스 부팅과 셧다운  (0) 2025.01.09
    #5-1 리눅스 부팅과 셧다운  (1) 2024.12.15
    #4 리눅스 디렉터리  (0) 2024.12.15
    #3 리눅스의 구조  (0) 2024.12.15