sda1
과 같은 '디바이스 파일'은 1)디바이스 파일 이며 2)block device에서 3)디스크 장치이다./dev/sd*
: SCSI 디스크 디바이스 파일sysfs
에서 제공하는 장치 경로를 나타내는 유틸리티를 사용해야한다.lsscsi
유틸리티fstab
에서 직접 /dev/sdb
와 같이 명시했을 경우, /dev/sdb
가 깨지면 마운트 안됨sg*
Generic Dev file
을 둔다./dev/tty*
, /dev/pts/*
: 가상 콘솔, 의사 터미널/dev/tty*
: 가상 콘솔/dev/tty*
: 현재 프로세스의 제어 터미널. 프로그램이 현재 터미널에서 읽고 쓰고 있는중이라면 이 디바이스는 그 터미널과 같은 것이며 터미널에 연결될 필요가 없다./dev/pts/*
: 의사 터미널/dev/ttyS*
: 직렬 포트/dev/ttys0
/dev/ttyUSB0
, /dev/ttyACM0
..../dev/lp0,1
: 병렬 포트LPT1:
, LPT2:
에 해당LPT1:
, LPT2:
= /dev/lp0
, /dev/lp1
cat
명령을 통해 파일들을 병렬 포트로 전송할 수 있다.CUPS
같은 프린터 서버는 프린터와 상호작용을 훨씬 더 잘 조절한다./dev/parport0,1
: 양방향 병렬 포트/dev/snd/*
, /dev/dsp
, /dev/audio
/dev/snd
디렉터리에 위치$ mknod
: 디바이스 생성/dev/sda1
디바이스 파일을 b
블록 디바이스로 Major: 8
Minor: 2
로 만느는 명령은 아래와같이 한다.$ sudo mknod /dev/sda1 b 8 2
b
(블록 디바이스) 대신, c
또는 p
를 사용하며, Major와 Minor를 생략한다.sysfs
: 장치 경로/dev
는 사용자 프로세스가 커널에서 지원하는 장치들을 참조하고 접속하기에 아주 편리하다./dev/sda
의 예/dev/sda
/dev/sda, 8:0
/dev/sda1, 8:1
/dev/sda2, 8:2
/sys
/sys/block
/sys/block/
/dev/sda
의 sysfs
: /sys/devices/platform/214000.ahci/ata1/host0/target0:0:0/0:0:0:0/block/sda
/sys/block/sda
$ cat dev
를 해보면 major:minor 번호 나온다./dev/sda
를 사용할 때, 이 곳을 사용한다.$ udevadm
: 디바이스장치의 sysfs를 알려줌udevadm
이라는 명령을 통해 쉽게 device file의 sysfs를 찾을 수 있다.$ udevadm info --query=all --name=/dev/sda
udevadm
은 udevd
의 관리자 툴이다.udevd
rules를 리-로드 하고 이벤트가 동작하도록 할 수 있다./dev
파일에 주어지는 이름)udevd
가 그 rule에 따라 /dev
에 생성한 장치 노드로 이어지는 심볼릭 링크udevd
가 rules에서 발췌한 장치의 추가 정보$ udevadm monitor
$ sudo udevadm monitor [Options]
Options | Description | e.g. |
---|---|---|
--kernel | 오직 커널 이벤트만 봄 | |
--udev | 외부로 나가는 이벤트만 봄 | |
--property | 유입되는 전체 uevent 봄 | |
--subsystem-match='type' | 매치되는 서브시스템만 봄 | --subsystem-match=scsi |
udevadm monitor
내용devtmpfs
devtmpfs
파일 시스템은 부팅 시에 장치 활용에 관한 문제에 대응하면서 발전된 시스템이다.udevd
에게 통지한다.udevd
는 디바이스 파일을 생성하지는 않지만, 장치 초기 설정을 수행하고 프로세스에 통지한다.udevd
는 장치를 식별하도록 /dev
에 많은 심볼릭 링크들을 생성한다./dev/disk/by-id
디렉토리에 이런 예를 발견할 수 있다.udevd
는 인터페이스 타입, 제조사와 모델정보, 시리얼번호, 파티션으로 링크의 이름을 만들고 디바이스 파일과 연결한다./dev/disk/
/dev/disk/by-id
udevd
udevd
데몬은 다음과 같이 동작한다.udevd
로 내부 네트워크 링크를 통해 uevent
라는 알림 이벤트 전송udevd
는 uevent
내 모든 속성 로딩udevd
는 그 규칙들을 분석하고 조치를 취하거나 그 규칙들을 기반으로 더 많은 속성들을 설정한다.udevd
가 커널로부터 받아서 유입되는 uevent
는 다음과 같다.ACTION=change
DEVNAME=sde
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host4/target4:0:0/4:0:0:3/block/sde
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
MAJOR=8
MINOR=64
SEQNUM=2752
SUBSYSTEM=block
UDEV_LOG=3
uevent
를 받은 다음, udevd
는 sysfs
장치 경로를 알게 된 상태이고, 그 속성들과 연관있는 다른 많은 attributes도 인지한다./lib/udev/rules.d
와 /etc/udev/rules.d
디렉터리에 있다. /lib
내 rule은 디폴트다./etc
내 rule은 디폴트 규칙을 무시할 수 있다.udevd
는 아래 rule
을 참고한다.
/lib/udev/rules.d/60-persistent-storage.rules
udevd
는 (KERNEL=="sd*[!0-9]|sr*"...
로 인해 'sd*+숫자'(/dev/sdb1 같은 파티션)가 포함되지 않고 SUBSYSTEMS=="scsi"
를 만족하는 장치를 찾도록할 것이다. IMPORT{program}="ata_id --export $devnode
/lib/udev/ata_id
명령으로부터 변수를 불러오는 import
지시어를 사용한다.$ sudo /lib/udev/ata_id --export /dev/sda
ID_ATA=1
ID_TYPE=disk
ID_BUS=ata
ID_MODEL=TAMMUZ_SSD
ID_MODEL_ENC=TAMMUZ\x20SSD\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
ID_REVISION=S0130B0
ID_SERIAL=TAMMUZ_SSD_TM550X19335120331N
ID_SERIAL_SHORT=TM550X19335120331N
ID_ATA_WRITE_CACHE=1
ID_ATA_WRITE_CACHE_ENABLED=1
ID_ATA_FEATURE_SET_HPA=1
ID_ATA_FEATURE_SET_HPA_ENABLED=1
ID_ATA_FEATURE_SET_PM=1
ID_ATA_FEATURE_SET_PM_ENABLED=1
ID_ATA_FEATURE_SET_SECURITY=1
ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=2
ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=2
ID_ATA_FEATURE_SET_SECURITY_FROZEN=1
ID_ATA_FEATURE_SET_SMART=1
ID_ATA_FEATURE_SET_SMART_ENABLED=1
ID_ATA_FEATURE_SET_APM=1
ID_ATA_FEATURE_SET_APM_ENABLED=1
ID_ATA_FEATURE_SET_APM_CURRENT_VALUE=254
ID_ATA_DOWNLOAD_MICROCODE=1
ID_ATA_SATA=1
ID_ATA_SATA_SIGNAL_RATE_GEN2=1
ID_ATA_SATA_SIGNAL_RATE_GEN1=1
ID_ATA_ROTATION_RATE_RPM=0
import
는 출력에 있는 모든 변수 이름이 위와 같은 값들로 설정되도록 환경을 설정한다.ENV{ID_BUS}
는 ata
로 인식할 것이다.ENV{ID_SERIAL}!="?*"
는 ID_SERIAL이 설정이 되어 있지 않으면 참이란 말이다.ENV{ID_SERIAL}
이 설정되도록 요구한다.SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
을 적용한다.udev
가 만나면, 유입(incoming)되는 장치를 심볼릭 링크로 추가한다.