[Linux] File System

조성열·2025년 9월 29일

Toss - Linux

목록 보기
6/15
post-thumbnail

디스크를 연결한다고 해서 사용할 수 있는 것이 아닌 파일시스템을 생성해야 사용 가능하다. 파일 시스템 생성 이후에는 해당 시스템이 디스크에 접근할 수 있도록 경로를 생성 해줘야 하는데, 이를 Mount라고 한다.


Linux File System

위 그림은 리눅스 파일 시스템으로 sda1 파티션 장치는 root 파일 시스템에 마운트된다. 파일 시스템의 유형은 다음과 같이 크게 세 가지로 나눈다.

  • 디스크 기반
    DVD, 하드 디스크와 같은 것들을 기반으로 하는 파일 시스템

  • 분산 파일 시스템
    네트워크를 통해 파일 시스템의 자원에 접근할 수 있도록 지원하는 파일 시스템

    • NFS(Network File System)
      네트워크 기반 파일 시스템으로 unix/linux에서 사용할 수 있고, 공유 자원을 로컬 시스템 자원처럼 사용 가능하다.
    • SMB(Server Message Block)
      window와 unix/linux 간 디렉토리 및 파일 공유 기능을 제공한다.
  • Pseudo 파일 시스템
    메모리 기반 파일 시스템으로 커널 정보에 접근할 수 있도록 지원한다.

    • swapfs: Swap File System은 물리 메모리 보조를 위한 디스크 내 스왑영역에서 사용하는 파일 시스템
    • tmpfs: Temporary File System은 /dev/fd 디렉토리의 파일 설명자를 사용할 수 있는 이름 제공
    • procfs: Process File System은 현재 동작중인 프로세스와 목록을 관리하는 파일 시스템. PID를 이용해서 관리한다.
    • devfs: Device File System은 모든 디바이스의 이름 공간 관리를 위해 사용

주요 파일 시스템 구조

데이터 저장을 위해 ext4 파일 시스템과 xfs 파일 시스템을 주로 사용한다.

ext4

unix ufs 파일 시스템의 구조와 유사하여 POSIX(Protable Operating System Interface) 표준을 지원한다.
ext3부터 저널링 기능을 제공하여 데이터 기록 중 오류 발생시 복구가 가능하다. ext4 파일 시스템의 주요 특징은 다음과 같다.

  • 파일 시스템 전체에 대한 주요 정보는 슈퍼 블록에 저장
  • 여러 블록 그룹으로 구성되어 있음
  • 슈퍼 블록의 백업은 일부 블록 그룹에 저장
  • inode를 사용해 파일 메타 정보와 데이터를 분리 저장

위 그림에 ext4 블록 그룹을 구성하는 요소들의 주요 특징은 다음과 같다.

  • Padding: 부트섹터와 같은 용도로 사용하기 위해 첫 1,024byte는 padding으로 비워져 있다. 이를 제외한 다음 위치부터 첫 번째 블록이 시작된다.
  • SuperBlock: 파일 시스템 전체에 대한 정보들을 담고 있다.
  • Group Descriptor: 블록 그룹에 대한 정보를 가지고 있다.
  • Data/inode Bitmap: Data or inode 용도로 지정된 블록 중 사용중인 것과 사용하고 있지 않은 것을 체크하는 영역이다.
  • inode table: 파일 정보를 가지고 있는 inode가 모여 있는 테이블이다. 여기서 파일 정보는 권한, 소유자, 최종 수정일시 등과 같은 정보를 말한다.
  • Data Block: 실제 데이터가 들어있는 블록이다. inode 포인터가 파일의 데이터를 가지고 있는 데이터 블록의 주소를 가지고 있다.

xfs

최신 버전 linux에서 기본 파일 시스템으로 사용되고 있고, POSIX 표준을 지원한다. 또 64bit를 지원하여 대용량 파일 시스템을 사용할 수 있다. 주요 특징은 다음과 같다.

  • inode를 사용한다. 단, 내부 구조는 efs와 다르다.
  • Block Group 대신 Allocation Group을 사용하고 8개가 기본, 8개 이상으로도 분할 가능하다.
  • 파일 탐색을 위해 B+ Tree를 사용한다.

위 그림에 xfs AG구조의 구성 요소의 주요 특징은 다음과 같다.

  • Super Block
    전체 AG들에 대한 정보를 저장하는 용도
  • AG free block info
    AG의 미할당 영역에 대한 정보를 저장
  • AG inode B+tree info
    AG의 할당 영역에 대한 정보를 저장
  • AG free list
    B+tree 영역 확장을 위해 예약된 공간
  • inodes
    할당 그룹 내 파일에 대한 inode 집합. 고유 id값이 있음
  • Data block
    실질적 데이터 저장 공간

B+tree

같은 레벨의 모든 키 값들이 정렬되어 이고, 같은 레벨의 노드는 연결 리스트 형태로 이어져 있는 구조.


Disk Partitioning & File System Practice

Linux 환경에서 새로운 디스크를 추가, 파티션 생성 및 관리 과정과 생성된 파티션을 마운트하여 스왑 공간을 설정하는 과정이다. 해당 실습은 새로 할당한 sdb 디스크를 이용하겠다.

  • fdisk
    1. 먼저 Primary 파티션으로 1번 파티션을 생성합니다. 생성 시 시작 섹터를 10000으로 지정하고 마지막 섹터를 50000000 로 지정해서 만들고 크기를 확인해보세요.
    2. 두번째 파티션을 동일하게 Primary 파티션으로 해서 시작/마지막 섹터를 기본값으로 생성하고 크기를 확인해보세요.
# history
su root
lsblk
fdisk /dev/sdb
n
p
1
10000
5000000
n
p
2
[Enter]
[Enter]

3. a단계는 크기 설정이 어려우며 중간에 공간이 떠있어서 b단계에서 생성 시 크기가 어중간한 공간을 활용하기 어려울 수 있으므로 잘못 만들었습니다. 둘 다 삭제하세요.
4. 다시 1번 파티션을 Primary로 만드세요. 시작섹터는 기본값으로 1G 크기로 만들어봅니다.
5. 2번 파티션도 Primary로 만들고 1G 크기로 만드세요.
6. 3번도 Primary로 만들고 크기는 2G로 만드세요.

# history
#1. 생성한 1,2번 파티션 삭제
fdisk /dev/sdb
d
1
d
#2. 1번, 2번 다시 생성
n
p
1
[Enter]
+1G
n
p
[Enter]
[Enter]
+1G
#3. 3번 primary로 생성 및 크기 2G
n
p
[Enter]
[Enter]
+2G
p 

7. 4번을 Primary로 1G 크기로 만든 후 5번 파티션을 만들려고 시도해보세요. (MBR은 Primary만 만들경우 4개만 가능) 남은 공간 활용을 위해 4번 파티션은 삭제합니다.
8. 4번을 Extended로 생성하는데 크기를 1G로 설정해서 만들고 5번파티션을 2G 크기로 만들려고 해보세요. 안되면 500M로 만들어보세요. (Extended 크기 안에서 Logical 파티션이 생성가능) 역시 남은 공간 활용이 어려우므로 4,5번 파티션을 삭제합니다.
9. 4번은 Extended로 생성하면서 크기는 남은공간 전체로 할당하세요.
10. 5번 파티션은 500M 크기로 만들면서 종류를 swap으로 설정하세요.
11. 파티셔닝을 종료하고 확인해보세요.

# history
n
p
[Enter]
+1G
n # Error
d
[Enter] # 4번 파티션 삭제
n
e
[Enter]
+1G # 4번 Extended로 생성
n
e
[Enter]
+500M
d
5
d
4
n
e
4
[Enter]
[Enter]
n
[Enter]
[Enter]
t
5
82

  • 파티션 포멧, 마운트
    1. /mnt 디렉토리에 각각 part-xfs 와 part-ext4 라는 디렉토리를 만드세요.
    2. 1번 파티션은 xfs로 , 2번 파티션은 ext4로 포멧하고 확인해보세요.
    3. 1번 파티션은 /mnt/part-xfs 디렉토리에 임시 마운트하세요. (명령어 사용 시 임시이며 /etc/fstab 설정 시 영구)
    4. 2번 파티션은 /mnt/part-ext4 디렉토리에 영구마운트 하세요. 설정 후 꼭 mount -a 명령어로 확인하세요.
# history
cd /mnt
mkdir part-ext4
mkdir part-xfs
mkfs.xfs /dev/sdb1
mkfs.ext4 /dev/sdb2
mount /dev/sdb1 /mnt/part-xfs
echo "/dev/sdb2   /mnt/part-ext4  ext4    defaults    0 0" >> /etc/fstab
mount -a
df -hT

  • 스왑 파티션 활성화
    1. 3번 파티션을 스왑영역으로 포멧
    2. /etc/fstab에 영구 설정 및 활성화
# history
mkswap /dev/sdb3
swapon /dev/sdb3
swapon --show
echo "/dev/sdb3   swap    swap    defaults    0 0" | tee -a /etc/fstab
swapon -a
free -h

profile
Blue Team

0개의 댓글