Linux가 디스크를 식별하는 방식(1): DM, WWID, UUID

Kaite.Kang·2025년 1월 5일

Linux에서 하나의 디스크는 여러 ID로 식별될 수 있다. 식별하는 방식에 따라 DM(Device Mapper), WWID (World Wide Identifier), UUID (Universally Unique Identifier)라는 이름으로 ID가 붙여진다. DM, WWID, UUID는 각각 다른 방식으로 디스크나 논리 장치를 식별할 뿐만 아니라 시스템에 따라 다른 용도로 사용된다. 이 ID 값들이 어떻게 매핑되는지와 이를 확인하는 방법을 알아보자.

1. WWID (World Wide Identifier)

WWID는 주로 SAN(Storage Area Network)에서 사용되는 디스크나 LUN(Logical Unit Number)을 식별하는 데 사용된다. WWID는 스토리지 하드웨어에 따라 할당되며, 보통 스토리지 시스템에서 직접 할당하기 때문에 동일한 디스크를 다른 시스템에 연결해도 동일한 WWID를 유지한다.

(생성/소멸 시기) 스토리지에서 각 LUN에 WWID를 부여한다.

  • 동일한 디스크라도 LUN을 재생성하면 기존의 WWID와 다르게 새로운 WWID가 부여될 수 있다.
    • 처음에 LUN 1에 대해 WWID scsi-3600508b1001c3f56a7b67d63de96ec9b가 할당되었다면, 이 LUN을 삭제하고 새로 LUN 1을 생성하면 새로운 WWID가 할당됩니다.
    • 즉 LUN을 재생성하면 기존 WWID가 사라지고 새로운 WWID가 부여되거나, 기존 WWID가 변경될 수 있다는 뜻이다.
  • 스토리지 -> 하이퍼바이저 -> VM 구조에서, LUN의 할당 방식에 따라 같은 LUN이여도 하이퍼바이저에서 보는 값과 VM에서 보는 값이 다를 수 있다.
    • VM이 직접 LUN을 할당받는 경우, 하이퍼바이저에서 식별하는 LUN과 VM에서 식별하는 LUN은 동일한 WWID를 갖는다.
    • 반면, VM에 Virtual I/O로 생성된 LUN(예: virt_scsi)에서는 WWID가 다를 수 있으며, 이 경우 두 번의 매핑이 필요하다.

WWID 확인 방법

/dev/sdb의 wwid를 확인해보자.
OS 밴더사나 버전마다 다르겠지만 RHEL7,8 의 경우 다음과 같이 확인 할 수 있다.

# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
3600508b1001cdb68f0cef5b2633d3cf6

더 쉬운 방법은 /dev/disk/by-id/ 디렉토리에서 확인하는 방법이다. 주로 scsi-로 시작하는 이름이 WWID이다.

# ls -l /dev/disk/by-id/ |grep sda2 |grep scsi
lrwxrwxrwx 1 root root 10 Aug 21 18:08 scsi-0HP_LOGICAL_VOLUME_00000000-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Aug 21 18:08 scsi-3600508b1001c3f56a7b67d63de96ec9b-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Aug 21 18:08 scsi-SHP_LOGICAL_VOLUME_5001438009F3EB10-part2 -> ../../sda2

2. UUID (Universally Unique Identifier)

UUID는 각 파티션이나 파일 시스템, LVM에 대해 고유한 식별자를 부여하는 방식이다. 파일시스템의 UUID는 fstab 파일에서 파일 시스템을 마운트할 때 사용된다.

(생성 시기) UUID는 스토리지 디바이스가 물리적으로 연결될 때 자동으로 생성되며, 커널은 해당 스토리지 디바이스에서 이 식별자를 추출한다.

(변경 시점) 기본적으로는 스토리지를 재연결한다고 해서 UUID가 변경되지는 않지만, 특정 작업(파티션 생성, 파일 시스템 변경 등)을 수행하면 UUID가 변경될 수 있다. 예를 들어 UUID가 변경 되는 경우는 다음과 같다.

  • 새로운 파티션을 만들거나 파일 시스템을 새로 생성하는 경우, 이때 새로운 UUID가 생성된다.
  • LVM을 사용하여 새로운 물리 볼륨(PV)을 생성할 때 UUID를 수동으로 지정하거나, 다른 메타데이터가 존재하면 UUID가 변경될 수 있다.
  • 디스크의 물리적인 변경이나 디스크 포맷도 UUID를 새로 생성할 수 있다.

(LVM의 UUID)

  • LVM도 UUID를 사용한다.
    예를 들어 pv를 새로 생성할때 시스템은 UUID를 자동으로 생성하거나 사용자가 직접 UUID를 설정할 수 있다. 만약 동일한 UUID를 가진 메타데이터가 이미 존재한다면, 시스템은 해당 UUID에 해당하는 기존 메타데이터를 읽어들여 사용하게 된다. 이 과정은 PV가 이전에 설정된 상태와 일관되게 연결될 수 있도록 도와준다.

UUID 확인 방법

UUID는 blkid 명령어를 사용하여 확인할 수 있다.
/dev/mapper/vg_data-lv_data 의 UUID를 확인하려면 다음과 같이 확인 할 수 있다.

# blkid /dev/mapper/vg_data-lv_data
/dev/mapper/vg_data-lv_data: UUID="e07ef351-2c65-4a84-8332-e122c52f7f42" BLOCK_SIZE="4096" TYPE="xfs"

아래 결과값을 보면 파일시스템뿐만 아니라 파티션에도 UUID가 할당되는 것을 확인 할 수 있다.

# blkid
/dev/sda1: UUID="8fb50f79-1d6d-4c33-b750-4d6254b59220" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="eb01f4cb-01"
/dev/sda2: UUID="ldrG6X-EhMA-n7Bk-IAxl-VOVz-ipaG-8EaRgK" TYPE="LVM2_member" PARTUUID="eb01f4cb-02"
/dev/sdb: UUID="BGxPjX-tPoH-FtbU-tASm-x1FA-B19F-Sb0Wez" TYPE="LVM2_member"
/dev/mapper/vgos-root: UUID="ebf26d0f-cc01-47b4-ab0d-bef276af7ec3" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/vgos-swap: UUID="560f6624-d9e0-44b7-a9eb-3bd28f0b548f" TYPE="swap"
/dev/mapper/vg_data-lv_data: UUID="e07ef351-2c65-4a84-8332-e122c52f7f42" BLOCK_SIZE="4096" TYPE="xfs"

각 LVM의 UUID는 pvdisplay, vgdisplay, lvdisplay 로 확인 할 수 있다.

# pvdisplay /dev/sda2
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vgos
  PV Size               204.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              52224
  Free PE               22528
  Allocated PE          29696
  PV UUID               ldrG6X-EhMA-n7Bk-IAxl-VOVz-ipaG-8EaRgK

3. DM (Device Mapper)

dm-X로 이름을 붙이는 주체는 Device Mapper 라는 커널 구성 요소이다.
Device Mapper는 물리 또는 논리 디바이스를 매핑하여 virtual device를 생성할 수 있는 커널 수준의 프레임워크이다.

블록 디바이스는 저장장치의 종류나 제공 방식에 따라 다양한 형태의 이름이 붙을 수 있다. 커널의 Device Mapper는 블록 디바이스를 논리적으로 관리하기 위해 식별된 블록 디바이스에 dm-X 형태의 이름을 할당하며, 사용자에게는 /dev/mapper/과 같은 별칭으로 제공한다. 즉, dm-X로 이름 붙여진 저장공간은 항상 블록 디바이스이며, 이는 Device Mapper를 통해 생성된 논리적인 블록 디바이스임을 알 수 있다.


그림 출처 - https://www.informit.com/articles/article.aspx?p=2995360

예를 들어, LVM(Logical Volume Manager)을 사용해 논리 볼륨을 생성하면 /dev/dm-0과 같은 이름이 할당되며, 암호화된 디스크를 설정한 경우에도 /dev/dm-1과 같은 이름으로 식별된다. 또한, RAID로 구성된 논리 디바이스 역시 Device Mapper를 통해 /dev/dm-2와 같은 이름이 부여된다.

DM 디바이스 확인 방법

이제 명령어를 통해 dm-2가 어떤 디바이스인지 확인해보자.
우선 dm-X 형태의 이름을 갖고 있기 떄문에 어떤 논리 디바이스와 어떤 물리 디바이스를 매핑할 것이다.
Device Mapper 디바이스는 /dev/mapper 디렉토리에 생성된다.

# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Aug 21 18:08 control
lrwxrwxrwx 1 root root       7 Aug 21 18:08 vg_data-lv_data -> ../dm-2
lrwxrwxrwx 1 root root       7 Aug 21 18:08 vgos-root -> ../dm-0
lrwxrwxrwx 1 root root       7 Aug 21 18:08 vgos-swap -> ../dm-1

위 결과값에서는 vg_data-lv_data 라는 논리 디바이스가 dm-2 에 링크가 되어 있는 것을 확인할 수 있다.

dmsetup 결과값에서 vg_data-lv_data 는 253:2 물리적인 블록 디바이스에 매핑이 되어 있다. (참고로 블록 디바이스는 major-number:minor-number 로 식별된다.)

# dmsetup ls
vg_data-lv_data	(253:2)
vgos-root	(253:0)
vgos-swap	(253:1)
  
# dmsetup info
Name:              vg_data-lv_data
State:             ACTIVE
Read Ahead:        8192
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 2
Number of targets: 1
UUID: LVM-ikZaz8XjwamujeQIp8MaRtE2o4GilC9c2HSdunfHKhAG8FeIjjCk9t8JK8lig6qe
(...생략...)
  
# lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   205G  0 disk
├─sda1              8:1    0     1G  0 part /boot
└─sda2              8:2    0   204G  0 part
  ├─vgos-root     253:0    0   100G  0 lvm  /
  └─vgos-swap     253:1    0    16G  0 lvm  [SWAP]
sdb                 8:16   0   1.8T  0 disk
└─vg_data-lv_data 253:2    0 931.5G  0 lvm  /vm_images

종합해보자면, dm-2는 /dev/mapper/vg_data-lv_data라는 논리 디바이스와 253:2 물리 디바이스를 매핑하고 있으며, 이 물리 디바이스는 /dev/sdb에 해당하는 LVM 파티션에서 생성된 것임을 알 수 있다.

정리

  • WWID: 물리 스토리지에 할당되는 유일한 식별자로, SAN 환경에서 주로 사용된다.
  • UUID: 디스크, 파티션, 파일 시스템, LVM 등을 고유하게 식별하기 위해 사용하는 식별자이다.
  • DM: Device Mapper는 물리 디바이스 이름과 논리 디바이스 이름을 매핑하여 가상 스토리지를 제공하는데, 그 가상 스토리지에 붙여지는 식별자이다.

하나의 디스크는 여러 방식으로 식별될 수 있으며, 예를 들어 /dev/sda라는 디바이스는 아래와 같은 ID를 가질 수 있다.

  • Device Mapper (DM): /dev/mapper/my_vg-my_lv
  • WWID: /dev/disk/by-id/scsi-3600508b1001c3144f000000000000000
  • UUID: e2e1f2b5-1b9c-42d2-8a57-2f023e55cbf8

이와 같이 Linux에서는 각 디스크와 파티션에 대해 다양한 ID를 사용하여, 디바이스들을 효율적으로 관리하고 식별할 수 있도록 돕는다. 이러한 ID들을 확인하는 방법을 익혀두면 시스템 관리와 디스크 문제 해결에 유용하게 활용할 수 있다.
다음 포스팅에서는 이번에 다 다루지 못한 스토리지 식별자에 대해 더 알아보자.

0개의 댓글