Linux가 디스크를 식별하는 방식(2): /dev/sdx, udev

Kaite.Kang·2025년 1월 19일

Linux에서 하나의 디스크는 여러 ID로 식별될 수 있다. 식별하는 방식에 따라 여러 ID로 붙여질 수 있다. DM, WWID, UUID 에 대한 포스팅은 1편 (Linux가 디스크를 식별하는 방식(1): DM, WWID, UUID) 를 참고하기 바란다. 이번 포스팅에서는 /dev/sdX, udev 식별 방식에 대해 알아보자.

1. /dev/sdX

주로 IDE, SCSI, SATA, USB 인터페이스로 연결된 블록 디바이스에 부여하는 식별자이다.
예를 들어 /dev/sda, /dev/vda 와 같은 이름으로 부여될 수 있는데, sdx 는 SCSI 디스크에 부여되고, vdx는 가상 디스크에 부여되는 규칙이 있다.

생성/소멸 시기

부팅 시에 리눅스 커널이 저장 장치를 감지한 순서에 따라 이름을 부여한다.

  • 이 식별자는와 같은 디스크 이름이 서버 재부팅 후에 변경될 수 있다.
  • 만약 /dev/sdb 디스크가 제거되면 /dev/sdc 디스크가 /dev/sdb로 변경될 수 있다.
  • 따라서 저장 장치마다 영구적으로 지정되는 이름이 아니기 때문에 /etc/fstab 파일에 사용하는 것을 권고하지 않는다.

이름 할당 방법

/dev/sd(major number)(minor number) 로 이름이 할당된다.
예를 들어 /dev/sda 디스크에서 파티션을 나누면 첫번째 파티션이 /dev/sda1, 두번째 파티션이 /dev/sda2 로 이름이 할당된다.

확인 방법

lsblk 명령으로 블록 디스크를 트리구조로 확인 해볼 수 있다.

# lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                         8:0    0 279.4G  0 disk
├─sda1                      8:1    0     1G  0 part  /boot
└─sda2                      8:2    0 278.4G  0 part
  ├─centos-root           253:4    0 262.6G  0 lvm   /
  └─centos-swap           253:5    0  15.8G  0 lvm   [SWAP]
sdb                         8:16   0 931.5G  0 disk
└─vdo_vg-vdo_backend_lv   253:7    0 931.5G  0 lvm
  └─vdo1                  253:9    0    10T  0 vdo   /isos_vdo
sdc                         8:32   0   1.4T  0 disk
├─sdc1                      8:33   0   1.4T  0 part
└─mpatha                  253:1    0   1.4T  0 mpath
  └─mpatha1               253:2    0   1.4T  0 part
    └─vg_images-lv_images 253:8    0   1.4T  0 lvm   /vm_images

2. udev

udev는 모든 유형의 디바이스에 이름을 부여할 수 있다. /dev/disk/by-* 경로 아래에서 디스크와 관련된 다양한 식별자를 기반으로 장치별 이름을 매핑하는데 이 경로를 udev가 동적으로 생성한다. udev에 디바이스가 인식되면 rule에 의해 link device를 생성하게 되는 것이다.
그럼 udev의 필요성은 무엇일까? 첫째로 udev 사용자가 디바이스의 이름을 직접 부여할 수 있다는 특징이 있다. 둘째, 디바이스에 영구적인 이름을 할당하여 /dev/sdX 와 같이 디바이스 이름이 변동될 수 있는 문제를 해결할 수 있다.

생성/소멸 시기

  • udev 데몬이 디바이스가 감지될 때, 사전에 정의된 규칙 파일(/etc/udev/rules.d/)에 따라 영구적인 이름을 생성한다.
  • 일반적으로 udev가 부여한 이름은 변경되지 않는다. 단, udev 규칙 파일이 수정되거나 삭제된 경우 이름이 변경될 수 있다.

이름 할당 방법

아래 내용은 Udev rule 을 이용하여 Ethernet Interface 이름을 변경하는 방법이다.

# vi /etc/udev/rules.d/70-persistent-network.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="11:22:33:44:55:66", KERNEL=="ens*", NAME="eth0"

Mac Address 가 11:22:33:44:55:66 이고 장치의 Kernel name 이 ens* 인 장치를 add 하는 ACTION 이 발생될 때, NAME 을 eth0 로 변경하는 Rule 이다.

위와 같은 예제는 기본적으로 udevadm 으로 확인한 정보 기반으로 작성하는 것을 권고한다.

시스템을 재부팅하지 않고 udev 규칙을 로드하려면 다음 명령을 수행하면된다.(RHEL7 이상 버전 기준)

//Udev Rule 를 Reload
# /sbin/udevadm control --reload-rules

//Udev Rule 를 적용
# /sbin/udevadm trigger --action=add 
OR
# /sbin/udevadm trigger --action=change

0개의 댓글