gonnux.com



LIT-linux-disk-identification-overview

2026-02-15

topic/linux
topic/storage
topic/sysadmin

요약

Linux에서 블록 디바이스를 식별하는 방법은 10가지 이상 존재하며, 각 방법은 스토리지 스택의 서로 다른 레이어에서 동작한다. 커널 디바이스 이름(/dev/sdX)은 부팅마다 변경될 수 있으므로, 안정적인 시스템 운영을 위해 UUID, PARTUUID 등 지속적 식별자를 사용해야 한다.

핵심 포인트

1. UUID (Universally Unique Identifier) - 파일시스템 수준

  • 파일시스템 포맷 시 자동 생성되는 128비트 식별자 (8-4-4-4-12 형식)
  • 모든 Linux 파일시스템이 지원 (FAT/exFAT/NTFS는 더 짧은 형식 사용)
  • 파일시스템을 다시 포맷하면 새로 생성됨
  • 하드웨어 이동에도 유지됨 (콘텐츠 기반 식별)
  • 조회: blkid -s UUID, lsblk -o UUID, /dev/disk/by-uuid/
  • fstab에서 가장 널리 권장되는 식별 방법

2. PARTUUID (Partition UUID) - 파티션 테이블 수준

  • GPT: 파티션 엔트리에 저장된 128비트 UUID. 파일시스템 변경에도 유지됨
  • MBR: libblkid가 pseudo-PARTUUID 생성 (SSSSSSSS-PP 형식). 파티션 번호 변경 시 바뀔 수 있음
  • 파일시스템과 독립적 -- 포맷해도 변경되지 않음
  • initramfs 없이도 커널이 직접 해석 가능 (임베디드 시스템에서 유용)
  • 조회: blkid -s PARTUUID, lsblk -o PARTUUID, /dev/disk/by-partuuid/
  • 가상 블록 디바이스(md RAID, LVM LV)에는 존재하지 않음

3. LABEL (파일시스템 라벨) - 파일시스템 수준

  • 사용자가 직접 설정하는 이름. 가독성이 좋음
  • 최대 길이가 파일시스템마다 다름: ext4=16자, XFS=12자, Btrfs=256자, FAT=11자
  • 설정 도구: e2label(ext), xfs_admin -L(XFS), btrfs filesystem label(Btrfs), fatlabel(FAT)
  • 시스템 전체에서 고유해야 함. 디스크 복제 시 충돌 발생 가능
  • 조회: blkid -s LABEL, lsblk -o LABEL, /dev/disk/by-label/

4. PARTLABEL (GPT 파티션 라벨) - 파티션 테이블 수준

  • GPT 파티션 엔트리 헤더에 정의. 최대 72자
  • 파일시스템 타입과 독립적. 포맷해도 유지됨
  • MBR에는 PARTLABEL 개념 없음 (GPT 전용)
  • 설정 도구: gdisk, cgdisk
  • 조회: blkid -s PARTLABEL, lsblk -o PARTLABEL, /dev/disk/by-partlabel/

5. 디바이스 경로 (커널 네이밍) - 커널 수준

패턴대상예시
/dev/sd[a-z][1-9]SCSI/SATA/SAS/USB/dev/sda1
/dev/nvme[C]n[N]p[P]NVMe (컨트롤러C, 네임스페이스N, 파티션P)/dev/nvme0n1p1
/dev/vd[a-z][1-9]VirtIO (KVM/QEMU)/dev/vda1
/dev/hd[a-d]IDE (레거시)/dev/hda1
/dev/xvd[a-z]Xen/dev/xvda1
  • 커널이 디바이스를 발견하는 순서에 따라 할당 -> 부팅마다 변경 가능
  • NVMe의 네임스페이스: NVMe SSD를 독립적인 논리 블록 주소 범위로 분할하는 기능. 대부분의 드라이브는 단일 네임스페이스(n1) 사용
  • fstab이나 중요 설정에 사용하면 안 됨

6. by-id - 하드웨어 시리얼 수준

  • 하드웨어 시리얼 번호 기반 식별. /dev/disk/by-id/
  • 접두사로 전송 방식을 나타냄: ata-, scsi-, nvme-, usb-, wwn-
  • 형식 예시: ata-Samsung_SSD_860_EVO_250GB_S3YJNB0K123456-part1
  • 파일시스템 변경에도 유지되지만, 디바이스를 다른 컨트롤러로 이동하면 변경될 수 있음
  • 파티션은 -partN 접미사 추가
  • WWN 심볼릭 링크도 이 디렉토리에 제공됨

7. by-path - 물리 경로 수준

  • PCI 물리 경로 기반 식별. /dev/disk/by-path/
  • 형식 예시: pci-0000:03:00.0-nvme-1-part1
  • 디바이스가 같은 컨트롤러의 다른 포트로 이동하면 변경됨
  • "하드웨어 변경에 내성 있는 지속적 네이밍에 적합하지 않음"
  • 인프라 문서화 용도로만 권장

8. WWN (World Wide Name) - 하드웨어 고유 식별자

  • 디바이스 제조사가 하드코딩한 전세계 고유 식별자
  • 8바이트(64비트) 또는 16바이트(128비트). 16진수로 표현
  • /dev/disk/by-id/wwn-0x... 형식으로 심볼릭 링크 제공
  • Fibre Channel, SATA, SAS, SCSI, NVMe 등에서 사용
  • 하드웨어 변경(포트, 컨트롤러 이동)에도 완전히 유지 -- 가장 안정적인 하드웨어 식별자
  • 조회: ls -l /dev/disk/by-id/ | grep wwn, scsi_id

9. Device Mapper 이름 - 가상화 레이어

  • /dev/mapper/<VG>-<LV> 형식 (LVM)
  • /dev/mapper/<이름> (LUKS/dm-crypt)
  • 커널 내부 이름: /dev/dm-N (마이너 번호 순, 사용 지양)
  • LVM 경로(/dev/VG/LV)는 이미 지속적 네이밍 제공
  • lvm(8)은 fstab에 /dev/VG/LV 형식 사용을 권장 (/dev/mapper/VG-LV는 내부 사용)

10. MD 디바이스 네이밍 - RAID 레이어

  • /dev/md0, /dev/md1, /dev/md127
  • mdadm.conf에 등록된 어레이는 안정적인 이름, 미등록 어레이는 부팅마다 변경 가능
  • md 어레이 자체 UUID를 슈퍼블록에 저장 (파일시스템 UUID와는 별개)
  • /dev/disk/by-id/md-uuid-* 심볼릭 링크 제공

MD RAID 디바이스에 PARTUUID가 없는 이유

  1. PARTUUID는 파티션 테이블에서 유래: GPT의 각 파티션 엔트리, 또는 MBR의 디스크 시그니처+파티션 번호에서 생성
  2. MD 디바이스는 가상 블록 디바이스: 커널의 md 드라이버가 생성하며, 어떤 물리적 파티션 테이블에도 엔트리로 존재하지 않음
  3. 파티션 레이어 위에 위치: 스토리지 스택에서 MD는 파티션 위에 존재:
    물리 디스크 → 파티션 (PARTUUID 존재) → MD RAID (PARTUUID 없음) → 파일시스템 (UUID 존재)
    
  4. 구성 파티션은 PARTUUID를 가짐: /dev/sda1, /dev/sdb1은 각각 PARTUUID가 있지만, 이들로 조립된 /dev/md0는 파티션 테이블에 없으므로 PARTUUID 없음
  5. mdadm은 자체 메타데이터를 사용: PARTUUID를 신경 쓰지 않고, 슈퍼블록의 어레이 UUID로 식별
  6. 예외: md 디바이스 자체에 파티션 테이블을 만들면(md 위에 GPT 작성) 그 파티션들은 PARTUUID를 가지게 됨

지속성 종합 비교

식별 방법스택 레이어리포맷 시하드웨어 이동 시디스크 복제 시파티셔닝 변경 시
UUID파일시스템변경됨유지충돌유지
PARTUUID파티션 테이블유지유지충돌(GPT)/변경가능(MBR)변경됨
LABEL파일시스템변경됨유지충돌유지
PARTLABEL파티션 테이블유지유지충돌변경됨
by-id하드웨어유지컨트롤러 변경 시 변경고유유지
by-pathPCI 경로유지변경됨N/A유지
WWN하드웨어유지유지고유유지
/dev/sdX커널유지변경 가능N/A유지
/dev/mapper/VG-LVLVM유지유지충돌N/A
/dev/mdNmd RAID유지유지설정 의존N/A

fstab 모범 사례 요약

  • 일반적인 경우: UUID 사용 (가장 안전)
  • 자주 포맷하는 파티션: PARTUUID 사용
  • initramfs 없는 시스템: PARTUUID 사용 (커널 직접 해석)
  • LVM 볼륨: /dev/VG/LV 사용 (이미 지속적)
  • MD RAID: UUID 또는 LABEL 사용 (PARTUUID 불가)
  • 절대 사용 금지: /dev/sdX 등 커널 디바이스 이름

나의 생각

디스크 식별 방법은 스토리지 스택의 계층적 구조를 그대로 반영한다. 물리 하드웨어(WWN, by-id) -> PCI 경로(by-path) -> 파티션 테이블(PARTUUID, PARTLABEL) -> 파일시스템(UUID, LABEL) -> 가상화 레이어(LVM, md RAID) 순으로 각 계층마다 고유한 식별 체계가 존재한다. MD RAID에 PARTUUID가 없는 것은 이 계층 구조에서 자연스러운 결과이며, 가상 블록 디바이스는 자체 메타데이터(md 슈퍼블록, LVM 메타데이터)로 식별한다는 원칙을 보여준다.

Links

  • 원본: REF-archwiki-persistent-block-device-naming
  • 원본: REF-linux-device-path-naming-conventions
  • 원본: REF-linux-wwn-world-wide-name
  • 원본: REF-linux-device-mapper-lvm-naming
  • 원본: REF-linux-md-raid-device-naming
  • 원본: REF-linux-fstab-identification-best-practices
  • 관련 Permanent Note: [[]]
  • 관련 Reference Note: REF-lvm
  • 관련 Reference Note: REF-luks