Linux에서 하나의 디스크는 여러 ID로 식별될 수 있다. 식별하는 방식에 따라 여러 ID로 붙여질 수 있다. DM, WWID, UUID 에 대한 포스팅은 1편 (Linux가 디스크를 식별하는 방식(1): DM, WWID, UUID) 를 참고하기 바란다. 이번 포스팅에서는 /dev/sdX, udev 식별 방식에 대해 알아보자.
주로 IDE, SCSI, SATA, USB 인터페이스로 연결된 블록 디바이스에 부여하는 식별자이다.
예를 들어 /dev/sda, /dev/vda 와 같은 이름으로 부여될 수 있는데, sdx 는 SCSI 디스크에 부여되고, vdx는 가상 디스크에 부여되는 규칙이 있다.
부팅 시에 리눅스 커널이 저장 장치를 감지한 순서에 따라 이름을 부여한다.
/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
udev는 모든 유형의 디바이스에 이름을 부여할 수 있다. /dev/disk/by-* 경로 아래에서 디스크와 관련된 다양한 식별자를 기반으로 장치별 이름을 매핑하는데 이 경로를 udev가 동적으로 생성한다. udev에 디바이스가 인식되면 rule에 의해 link device를 생성하게 되는 것이다.
그럼 udev의 필요성은 무엇일까? 첫째로 udev 사용자가 디바이스의 이름을 직접 부여할 수 있다는 특징이 있다. 둘째, 디바이스에 영구적인 이름을 할당하여 /dev/sdX 와 같이 디바이스 이름이 변동될 수 있는 문제를 해결할 수 있다.
아래 내용은 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