A.3. udev 장치 관리자에 대해 장치 매퍼(Device Mapper) 지원

udev 장치 관리자의 주요 역할은 /dev 디렉토리에 있는 노드의 동적 설정 방식을 제공하는 것입니다. 이러한 노드를 생성하여 사용자 공간에 있는 udev 규칙 응용 프로그램을 지시합니다. 이러한 규칙은 특정 장치의 추가, 제거, 변경의 결과로 커널에서 직접 전송된 udev 이벤트에서 실행됩니다. 이는 핫플러그 지원에 대한 편리한 중앙 메커니즘을 제공합니다.
실제 노드를 생성하는 것 외에, udev 장치 관리자는 자신의 이름으로된 심볼릭 링크를 생성할 수 있으며, 필요할 경우 사용자는 사용자 정의된 이름과 /dev 디렉토리에 디렉토리 구조를 선택할 수 있습니다.
각각의 udev 이벤트에는 이름, 하부 시스템, 장치 유형, 사용되는 주/부 번호, 이벤트 유형과 같은 실행되고 있는 장치에 대한 기본 정보가 들어있습니다. udev 규칙에서 액세스할 수 있는 /sys 디렉토리에 있는 모든 정보에 액세스할 수 있으며, 사용자는 이 정보를 기반으로 간단한 필터를 사용하여 정보에 따라 조건부로 규칙을 실행할 수 있습니다.
udev 장치 관리자는 중앙 관리 방식의 노드 권한 설정을 제공합니다. 사용자는 이벤트를 처리하는 동안 사용 가능한 정보로 지정한 장치의 권한을 정의하기 위해 사용자 정의된 규칙을 쉽게 추가할 수 있습니다.
udev 규칙에 직접 hook 프로그램을 추가할 수 도 있습니다. udev 장치 관리자는 이벤트를 처리하기 위해 필요한 프로세스를 제공하기 위해 이러한 프로그램을 호출할 수 있습니다. 또한 프로그램은 이러한 처리의 결과로 환경 변수를 내보낼 수 있습니다. 어떤 처리 결과든지 정보의 추가 소스로 규칙에 사용될 수 있습니다.
udev 라이브러리를 사용하는 소프트웨어는 사용 가능한 모든 정보와 함께 udev 이벤트를 받아 처리할 수 있으므로 처리 사항은 udev 데몬에 바인딩되지 않습니다.

A.3.1. 장치 맵퍼 (Device Mapper)로 udev 통합

RHEL 6에서 장치 맵퍼(Device Mapper)는 udev 통합에 대해 직접적인 지원을 제공합니다. 이는 장치 맵퍼를 LVM 장치를 포함하여 장치 맵퍼 장치와 연관된 모든 udev 처리와 동기화합니다. udev 데몬에 있는 규칙 어플리 케이션은 장치 변경의 소스인 (dmsetup 및 LVM 등) 프로그램과 병령 처리 형태이기 때문에 동기화가 필요합니다. 이러한 지원 없이 이전 변경 이벤트의 결과로 udev 규칙에 의해 처리되는 아직 열려있는 상태의 장치를 제거하기 위한 문제가 사용자에게 자주 발생했었습니다. 특히 장치의 변경 간격이 매우 짧은 경우에 자주 발생했었습니다.
RHEL 6 릴리즈에서는 일반적으로 장치 맵퍼 (Device Mapper) 장치 및 LVM에 대해 공식적으로 지원되는 udev 규칙을 제공합니다. 표 A.1. “장치 맵퍼 (Device-Mapper) 장치에 대한 udev 규칙 ”에는 /lib/udev/rules.d에 설치된 이러한 규칙에 대해 요약되어 있습니다.

표 A.1. 장치 맵퍼 (Device-Mapper) 장치에 대한 udev 규칙

파일 이름 설명
10-dm.rules
기본적/일반적 장치 맵퍼 (Device Mapper) 규칙이 들어 있으며 /dev/dm-N 대상과 함께 /dev/mapper에 심볼릭 링크를 생성합니다. 여기서 N은 커널에 의해 장치에 동적으로 할당된 번호입니다. (/dev/dm-N은 노드입니다)
알림: /dev/dm-N 노드는 장치에 액세스하기 위해 절대로 스크립트에서 사용해서는 안됩니다. 이는 N 번호가 동적으로 할당되어 장치를 활성화하는 순서에 의해 변경되기 때문입니다. 따라서, /dev/mapper 디렉토리에 있는 실제적인 이름을 사용해야 합니다. 이러한 레이아웃은 노드/심볼릭 링크가 생성되어야 방법에 대한 udev 요구 사항을 지원하는 것입니다.
11-dm-lvm.rules
LVM 장치에 적용할 규칙이 포함되어 있으며 볼륩 그룹의 논리 볼륨에 대해 심볼릭 링크를 생성합니다. 심볼릭 링크는 /dev/dm-N 대상과 함께 /dev/vgname 디렉토리에 생성됩니다.
알림: 장치 맵퍼 하부시스템의 향후 모든 규칙의 이름을 지정하기 위한 기준과 알관성을 유지하기 위해, udev 규칙은 11-dm-subsystem_name.rules 형식을 따라야 합니다. udev 규칙을 제공하는 libdevmapper 사용자는 이러한 기준을 따라야 합니다.
13-dm-disk.rules 일반적으로 모든 장치 맵퍼 (Device Mapper) 장치에 대해 적용되는 규칙이 포함되어 있으며 /dev/disk/by-id, /dev/disk/by-uuid, /dev/disk/by-uuid 디렉토리에 심볼릭 링크를 생성합니다.
95-dm-notify.rules libdevmapper (LVM 및 dmsetup과 같이)를 사용하여 대기중 프로세스를 통지하기 위한 규칙이 포함되어 있습니다. 이전의 모든 규칙이 적용된 후 통지가 완료되며, udev 프로세스가 완됴되었는지를 확인합니다. 그 후 통지된 프로세스는 다시 시작됩니다.
12-dm-permissions.rules 파일을 사용하여 사용자 설정 권한 규칙을 추가할 수 있습니다. 이 파일은 /lib/udev/rules 디렉토리에 설치되지 않고 /usr/share/doc/device-mapper-version 디렉토리에서 찾을 수 있습니다. 12-dm-permissions.rules 파일은 예에서 처럼 일부 일치되는 규칙에 기반한 권한 설정 방법에 대한 설명이 들어있는 템플릿으로 이 파일에는 일반적인 상황의 예가 들어 있습니다. 이 파일을 편집하여 /etc/udev/rules.d 디렉토리에 수동으로 배치하면 여기에 업데이트가 위치하게 되어 설정이 그대로 유지됩니다.
이러한 규칙은 이벤트를 처리하는 동안 다른 규칙에 의해 사용될 수 있는 모든 기본적인 변수를 설정합니다.
다음과 같은 매개 변수는 10-dm.rules에 설정되어 있습니다:
  • DM_NAME: 장치 매퍼 장치 이름
  • DM_UUID: 장치 매퍼 장치 UUID
  • DM_SUSPENDED: 장치 맵퍼 (Device Mapper) 장치의 일시 정지 상태
  • DM_UDEV_RULES_VSN: udev 규칙 버전 (이는 이전에 언급된 매개 변수가 공식적인 장치 맵퍼 규칙에 의해 직접 설정되어 있는지를 다른 모든 규칙이 확인하는 것입니다)
다음의 매개 변수는 11-dm-lvm.rules에 설정되어 있습니다:
  • DM_LV_NAME: 논리 볼륨 이름
  • DM_VG_NAME: 볼륨 그룹 이름
  • DM_LV_LAYER: LVM 레이어 이름
이러한 모든 매개 변수는 12-dm-permissions.rules 파일에서 설명하고 있듯이 12-dm-permissions.rules 파일에서 사용하여 특정 장치 매퍼 (Device Mapper) 장치에 대한 권한을 정의할 수 있습니다.