[리눅스 디스크 관리] linux disk 파티션, mount

2025. 5. 28. 17:03·linux
728x90
반응형

이번에는 리눅스 서버에 추가된 새로운 디스크 /dev/nvme0n2를 파티셔닝하고, 파일 시스템을 생성하고, 마운트하는 예제를 진행해보려 한다.
또한 예제를 진행하며 fdisk, mkfs, mount 명령어들을 체계적으로 정리해보고자 한다.

디스크 확인 및 기본 정보 조회

fdisk -l

여기서 새로운 디스크 /dev/nvme0n2 (4GB)가 추가된 것을 확인할 수 있다. 현재는 어떤 파티션도 정의되어 있지 않다.


파티셔닝 - fdisk로 진행

fdisk /dev/nvme0n2
root@ubuntu:/# fdisk /dev/nvme0n2 

Welcome to fdisk (util-linux 2.39.3).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xb6c5c166.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-8388607, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-8388607, default 8388607): +1G

Created a new partition 1 of type 'Linux' and of size 1 GiB.

예시) 1번 primary 파티션 생성

# 1번 primary 파티션 1G
Command (m for help): n → p → 1 → default → +1G

# 2번 primary 파티션 1G
Command (m for help): n → p → 2 → default → +1G

# 4번 extented 파티션 남은용량 전부
Command (m for help): n → e → 4 → default → default

# 5번 logical 파티션 1G
Command (m for help): n → default → default → +1G

# 6번 logical 파티션 남은용량 전부
Command (m for help): n → default → default → default

fdisk를 실행한 후 표시되는 프롬프트에서 사용할 수 있는 명령어들은 다음과 같다. 단순히 'n → p → 1 → +1G'처럼 쓰는 걸 넘어서, 각각의 의미를 정확히 이해하고 있으면 실수나 오류를 줄일 수 있다.

명령어 의미 사용 예시
m 명령어 도움말 보기 Command (m for help): m
n 새 파티션 생성 (Primary/Extended/Logical) n → p → 1 → +1G
p 현재 파티션 테이블 출력 (Print) Command (m for help): p
d 파티션 삭제 (Delete) d → 1 (1번 파티션 삭제)
t 파티션 ID/타입 변경 (Type) t → 1 → 82 (1번을 Linux swap으로 변경)
a 부팅 가능 플래그 설정 (Active) a → 1 (1번 파티션에 boot flag 설정)
w 파티션 테이블 저장 및 종료 (Write) w 입력 시 실제 디스크에 반영
q 저장하지 않고 종료 (Quit) q 입력 시 변경 내용 폐기
x 전문가 모드 (eXpert mode) 고급 설정: 섹터 수동 조정 등 가능
v 파티션 테이블 검사 (Verify) 설정된 구조에 논리적 오류가 있는지 확인
g GPT 파티션 테이블 생성 (GUID) 기존 MBR을 GPT로 초기화할 때 사용
o 새 MBR 디스크 초기화 기존 파티션 전부 삭제됨
l 파티션 타입 코드 목록 확인 t 사용 시 코드 모를 때 l로 확인 가능

t 명령어는 주로 Linux(83), swap(82), EFI(ef) 등으로 변경할 때 자주 쓰인다.


파일 시스템 생성 mkfs

디스크에 파티션을 나눴다고 해서 바로 데이터를 저장할 수 있는 건 아니다.
파일 시스템을 생성해야 비로소 디렉토리/파일 단위로 데이터를 기록할 수 있다.

이를 위해 사용하는 명령어가 바로 mkfs (make filesystem)이다.

기본 사용법

mkfs -t ext4 /dev/nvme0n2p1

# 위 명령어는 아래 명령어와 동일하다.
mkfs.ext4 /dev/nvme0n2p1

mkfs는 내부적으로 각 파일 시스템별 서브 커맨드(mkfs.ext4, mkfs.xfs 등)를 호출한다.

  • 🔸 -t ext4: 생성할 파일 시스템의 유형 (ext4, xfs, vfat 등)
  • 🔸 /dev/nvme0n2p1: 포맷 대상 파티션

대표 파일 시스템 종류

명령어 설명 특징
mkfs.ext4 리눅스에서 가장 일반적인 파일 시스템 저널링 지원, 안정성 높음
mkfs.xfs 고성능 파일 시스템 대용량에 유리, 속도 빠름
mkfs.vfat FAT32 계열 (USB 등에서 사용) 리눅스/윈도우 호환 목적
mkfs.btrfs 최신 CoW 방식의 파일 시스템 스냅샷, 압축 등 고급 기능

파일 시스템 예시

# 파티션 포맷
mkfs.ext4 /dev/nvme0n2p1
mkfs.ext4 /dev/nvme0n2p2
mkfs.ext4 /dev/nvme0n2p5
mkfs.ext4 /dev/nvme0n2p6

# extexted 파티션은 포맷 불가능!
root@ubuntu:/# mkfs.ext4 /dev/nvme0n2p4
mke2fs 1.47.0 (5-Feb-2023)
mkfs.ext4: inode_size (256) * inodes_count (0) too big for a
        filesystem with 0 blocks, specify higher inode_ratio (-i)
        or lower inode count (-N).

# 정상적으로 포맷된 예
root@ubuntu:/# mkfs.ext4 /dev/nvme0n2p1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: b7798c22-d107-4b3b-a967-337bff44d5fb
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

/dev/nvme0n2p4는 extended 파티션이라 파일시스템 생성 불가


마운트(Mount)란 무엇인가?

마운트(Mount)란 새로 연결된 디스크(파티션)를 리눅스의 디렉토리 트리 어딘가에 붙여주는 작업이다.
리눅스에서는 디스크가 연결만 되어 있다고 자동으로 쓸 수 있는 게 아니다. 반드시 “디렉토리 경로”에 연결해줘야 한다.

즉, mount는 단순한 "연결"이 아니라 "해당 디스크의 파일시스템을 특정 경로에서 접근 가능하게 만드는 작업"이다.

마운트 예시

# 파티션에 연결할 디렉터리 생성
mkdir /nvme0n2p1-data /nvme0n2p2-data /nvme0n2p5-data /nvme0n2p6-data

# 각 디렉터리와 파티션 연결
mount /dev/nvme0n2p1 /nvme0n2p1-data
mount /dev/nvme0n2p2 /nvme0n2p2-data
mount /dev/nvme0n2p5 /nvme0n2p5-data
mount /dev/nvme0n2p6 /nvme0n2p6-data

mount [디바이스] [디렉토리]: 해당 디바이스(파티션)를 경로에 붙임
이후 /nvme0n2p1-data 안에 접근하면 실제 /dev/nvme0n2p1의 내용이 보이게 된다.

마운트 확인

# 마운트 확인
mount | grep nvme0n2

# 마운트 전체 확인
findmnt

마운트 주요 옵션 설명

옵션 풀네임 설명
-t --type 파일 시스템 종류 지정 (예: -t ext4)
-o --options 마운트 시 설정할 추가 옵션들 (예: ro, rw, noexec, nosuid 등)

예시:

mount -t ext4 -o ro /dev/nvme0n2p1 /mnt/read_only_disk
  • -t ext4: ext4 타입으로 마운트
  • -o ro: 읽기 전용 마운트

마운트 시 주의할 점

  • 🔸 이미 마운트된 디렉토리에 다시 마운트하면 기존 내용은 가려진다.
  • 🔸 실제로는 덮어쓰기처럼 동작하기 때문에 실수로 중요한 디렉토리에 마운트하면 데이터가 보이지 않을 수 있음.
  • 🔸 시스템 재시작 시 마운트가 자동 해제된다.
  • 🔸 디렉토리가 비어 있어야 한다.
  • 🔸 기존 디렉토리에 파일이 있을 경우, 마운트하면 해당 내용은 일시적으로 숨겨짐.
  • 🔸 파일시스템 타입이 맞아야 한다.
  • 🔸 mount: wrong fs type 오류가 나면 mkfs에서 지정한 타입(ext4 등)을 확인해야 함.
  • 🔸 파일시스템이 손상되었거나 마운트되지 않으면 dmesg 확인 필요.

마운트 해제 (Unmount)

umount /nvme0n2p1-data

# 아래 명령어도 가능
umount /dev/nvme0n2p1

마운트된 디스크를 안전하게 제거하거나 재마운트하기 전에 반드시 umount로 해제해줘야 함
디스크 사용 중일 경우 "target is busy" 오류가 날 수 있음 → lsof, fuser로 어떤 프로세스가 점유 중인지 확인


/etc/fstab 등록으로 부팅 시 자동 마운트

vi /etc/fstab

다음 내용을 추가:

/dev/nvme0n2p1 /nvme0n2p1-data ext4 defaults 0 1
/dev/nvme0n2p2 /nvme0n2p2-data ext4 defaults 0 1
/dev/nvme0n2p5 /nvme0n2p5-data ext4 defaults 0 1
/dev/nvme0n2p6 /nvme0n2p6-data ext4 defaults 0 1

시스템 재시작 후 해당 파티션에 접근가능


내용 정리

항목 명령어 의미
디스크 목록 확인 fdisk -l 현재 연결된 디스크 구조 확인
파티션 편집 fdisk /dev/xxx 디스크의 파티션 구조 생성/삭제
파일 시스템 생성 mkfs.ext4 ext4로 포맷 후 사용 가능
마운트 mount 특정 경로에 디스크 연결
자동 마운트 /etc/fstab 시스템 부팅 시 자동 연결 설정

마운트는 왜 중요한가?

단순한 파일 접근 이상의 의미: 리눅스에서 디스크는 마운트를 통해서만 의미가 있다
실무에서는 디스크 추가 → 파티션 설정 → 파일시스템 생성 → 마운트까지가 하나의 세트
실수로 마운트 안 하면 아무리 디스크를 붙여도 df -h에 안 나옴

728x90
반응형

'linux' 카테고리의 다른 글

[리눅스 패키지 관리] apt? apt-get?  (0) 2025.05.29
[리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크  (0) 2025.05.29
[리눅스 프로세스 관리] ps와 kill 명령어 + 시그널까지 한 번에 정리하기  (0) 2025.05.28
[리눅스 명령어] linux tar 명령어 – 압축 및 해제  (0) 2025.05.28
[리눅스 권한 명령어 정리] chmod, chown, umask  (0) 2025.05.27
'linux' 카테고리의 다른 글
  • [리눅스 패키지 관리] apt? apt-get?
  • [리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크
  • [리눅스 프로세스 관리] ps와 kill 명령어 + 시그널까지 한 번에 정리하기
  • [리눅스 명령어] linux tar 명령어 – 압축 및 해제
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    githib action
    vercel
    Chat GPT
    네트워크
    nestjs
    springboot
    IP
    E2E
    Java
    Linux
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[리눅스 디스크 관리] linux disk 파티션, mount
상단으로

티스토리툴바