-
Oracle Linux 8 udevDB 스터디/Database Documentation 2026. 7. 9. 12:46
udev 디바이스 매니저
udev 개요
udev는 systemd 서비스로 실행되며 커널이 노출하는 시스템 디바이스에 대해 예측 가능하고 관리된 접근을 제공한다. 일반적으로 디바이스 노드의 권한을 관리하고, /dev/ 디렉토리에 심볼릭 링크를 생성하여 디바이스 이름을 예측 가능하게 하며, 네트워크 인터페이스 이름을 변경한다.
동작 방식
- 부팅 시 디바이스 노드 파일을 동적으로 생성하거나 제거한다.
- 디바이스 노드를 생성할 때 /sys 디렉토리에서 라벨, 시리얼 번호, 버스 번호 등의 속성을 읽는다.
- 재부팅 시에도 일관된 이름을 보장하기 위해 Persistent Device Names를 사용한다. 이는 외부 스토리지 장치 사용 시 특히 중요하다.
- 커널 이벤트를 감지하고 규칙에 따라 특정 동작을 수행한다. 예: USB 저장 장치 연결 시 커널이 udev에 알리고, udev는 핸들러를 호출하여 장치를 마운트한다.
설정 파일
- 기본 설정 파일: /etc/udev/udev.conf
- 로그 우선순위: err, info, debug 중 선택 가능하며 기본값은 err이다.
- 추가 규칙은 /etc/udev/rules.d/ 내 개별 규칙 파일에서 정의한다.
디바이스 파일
/dev 디렉토리
주변 장치(하드 디스크, 파티션 등)와 가상 장치(난수 발생기 등)에 접근할 수 있는 디바이스 파일을 포함한다. 하위 디렉토리는 특정 장치 유형과 관련된 파일을 포함하며, 대부분 심볼릭 링크로 구현된다.
블록 디바이스 (Block Devices)
- 데이터에 랜덤 접근 가능
- 버퍼링을 통해 읽기/쓰기 수행
- 예: 하드 디스크, CD-ROM, 플래시 메모리
문자 디바이스 (Character Devices)
- 데이터 스트리밍 방식으로 1바이트씩 읽기/쓰기
- 버퍼링이나 랜덤 접근 불가
- 예: 키보드, 마우스, 터미널, 테이프 드라이브
의사 터미널 (Pseudo-Terminal Devices)
- 실제 터미널을 에뮬레이션하여 소프트웨어와 상호작용
- /dev/pts 디렉토리에 위치
- 예: /dev/tty1 → /dev/pts/ptmx
의사 디바이스 (Pseudo Devices)
- 물리적 하드웨어가 아닌 소프트웨어로 구현된 기능 제공
- /dev/null: 데이터 싱크, 쓰기 시 데이터가 사라짐
- /dev/zero: 무한한 0값 바이트 제공
- /dev/random: 높은 엔트로피 난수 제공, 엔트로피 부족 시 블록됨
- /dev/urandom: 블록되지 않고 난수 제공, 보안 수준은 낮음
udevadm을 이용한 udev 조회
udevadm 명령을 사용하면 udev 데이터베이스를 조회할 수 있다.
udevadm info --query=all 명령은 디바이스의 모든 정보를 출력하며, 출력값은 접두어(prefix)로 구분된다.
주요 접두어와 의미
- P: /sys/ 내 디바이스 경로
- M: 디바이스 이름 (경로의 마지막 구성 요소)
- R: 디바이스 번호 (경로 마지막 구성 요소의 숫자 접미사)
- U: 커널 서브시스템
- T: 서브시스템 내 커널 디바이스 타입
- D: 커널 디바이스 노드 major/minor 번호
- I: 네트워크 인터페이스 인덱스
- N: 커널 디바이스 노드 이름
- L: 디바이스 노드 심볼릭 링크 우선순위
- S: 디바이스 노드 심볼릭 링크
- Q: 블록 디바이스 시퀀스 번호 (DISKSEQ)
- V: 연결된 드라이버
- E: 디바이스 속성
전체 정보 조회 예시
/dev/sda의 모든 정보를 조회하려면 다음을 실행한다.
udevadm info --query=all --name=/dev/sda출력 예시:
- P: /devices/.../block/sda
- M: sda
- U: block
- T: disk
- D: b 8:0
- N: sda
- S: disk/by-id/...
- E: DEVNAME=/dev/sda, ID_VENDOR=ORACLE, ID_MODEL=BlockVolume 등
특정 타입으로 제한하여 조회
디바이스 경로 조회
udevadm info --query=path --name=/dev/sda심볼릭 링크 조회
udevadm info --query=symlink --name=/dev/sda디바이스 속성 조회
udevadm info --query=property --name=/dev/sda부모 디바이스 속성까지 조회
--attribute-walk 옵션을 사용하면 해당 디바이스와 부모 디바이스의 속성을 모두 확인할 수 있다.
udevadm info --attribute-walk --name=/dev/sda출력은 /sys 경로를 따라 부모 디바이스까지 탐색하며, 각 디바이스의 KERNEL, SUBSYSTEM, DRIVER, ATTR{...} 속성을 보여준다.
udev 규칙 다루기
udev는 규칙 파일(rules)을 사용하여 디바이스를 식별하고 이름을 생성한다.
- 커널이 새로운 디바이스를 발견하거나 기존 디바이스가 오프라인이 되면 uevent 알림을 udev에 전달한다.
- udev는 메모리에 저장된 규칙을 /sys 디렉토리의 디바이스 속성과 비교하여 해당 디바이스를 식별한다.
- 규칙 파일은 여러 디렉토리에 존재하지만, 사용자가 편집할 수 있는 파일은 /etc/udev/rules.d/*.rules뿐이다.
- 규칙은 사전식(lexical) 순서로 처리되며, /etc/udev/rules.d의 규칙은 동일 이름의 다른 위치 규칙을 덮어쓴다.
규칙 문법 예시
/lib/udev/rules.d/50-udev-default.rules에서 발췌한 예시:
SUBSYSTEM=="block", SYMLINK{unique}+="block/%M:%m" KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" KERNEL=="null|zero|full|random|urandom", MODE="0666" SUBSYSTEM=="block", GROUP="disk"연산자 종류
- = : 값 할당(기존 값 덮어씀)
- += : 값 추가(리스트에 덧붙임)
- := : 값 고정(이후 규칙에서 변경 불가)
- == : 값이 동일한지 비교
- != : 값이 다른지 비교
패턴 매칭 문자
- ? : 단일 문자 매칭
- * : 0개 이상의 문자 매칭
- [] : 지정된 문자 집합 또는 범위 매칭 (예: tty[sS][0-9] → ttys7, ttyS7)
자주 쓰이는 Match Key
- ACTION : 이벤트 동작(add/remove 등)
- ENV{key} : 디바이스 속성 값 매칭 (예: ENV{DEVTYPE}=="disk")
- KERNEL : 디바이스 이름 매칭 (예: KERNEL=="dm-*")
- NAME : 디바이스 파일 또는 네트워크 인터페이스 이름 매칭
- SUBSYSTEM : 디바이스가 속한 서브시스템 매칭 (예: SUBSYSTEM=="tty")
- TEST : 특정 파일/경로 존재 여부 확인
자주 쓰이는 Assignment Key
- ENV{key} : 디바이스 속성 값 지정
- GROUP : 디바이스 파일 그룹 지정 (예: GROUP="disk")
- MODE : 권한 지정 (예: MODE="0640")
- NAME : 디바이스 파일 이름 지정
- OWNER : 소유자 지정
- RUN : 디바이스 파일 생성 후 실행할 명령 지정
- SYMLINK : 심볼릭 링크 생성
문자열 치환
- $attr{file} : /sys 속성 값
- $devpath : sysfs 내 디바이스 경로
- $env{key} : 환경 변수 값
- $kernel : 커널 디바이스 이름
- $major, $minor : 디바이스 major/minor 번호
- $name : 현재 디바이스 파일 이름
udev 규칙 커스터마이징
udev 규칙은 디바이스 이벤트 발생 시 적용되며, 규칙 평가 순서가 중요하다. udev는 규칙 파일을 사전식(lexical) 순서로 처리하므로, 커스텀 규칙을 기본 규칙보다 먼저 적용하려면 파일명을 앞쪽에 오도록 설정해야 한다.
커스텀 규칙 작성 절차 예시 (/dev/sdb → /dev/my_disk 심볼릭 링크 생성)
1. 규칙 파일 생성
/etc/udev/rules.d/10-local.rules 파일을 만든다.
KERNEL=="sdb", ACTION=="add", SYMLINK="my_disk"2. 규칙 테스트
udevadm test 명령으로 규칙 적용을 시뮬레이션한다.
udevadm test /sys/class/block/sdb출력 예시:LINK 'my_disk' /etc/udev/rules.d/10-local.rules:1 creating symlink '/dev/my_disk' to 'sdb'3. udev 서비스 재시작
sudo systemctl restart systemd-udevd4. 규칙 적용 확인
ls -F /dev/sd* /dev/my_disk출력 예시:
/dev/my_disk@ /dev/sda /dev/sda1 /dev/sda2 /dev/sdb5. 변경 사항 되돌리기 (옵션)
sudo rm /etc/udev/rules.d/10-local.rules sudo rm /dev/my_disk sudo systemctl restart systemd-udevd
(출처: Oracle Linux 8 Managing System Devices With udev)
'DB 스터디 > Database Documentation' 카테고리의 다른 글
19c RAC 설치 체크리스트 및 설치 절차 (0) 2026.07.09 Optimal Flexible Architecture Standard (최적 유연 아키텍처 표준) (0) 2026.07.08 19c Oracle Database 설치 후속 작업 (0) 2026.07.08 19c Oracle Database 설치 (0) 2026.07.08 19c Grid Infrastructure for a Standalone Server 설치 및 구성 (0) 2026.07.08