답변:
대부분의 현재 배포에서 HDD 일련 번호는 udev 데이터베이스에 저장되며 루트 권한없이 쿼리 할 수 있습니다.
/sbin/udevadm info --query=property --name=sda
(보기를 위해 ID_SERIAL
, ID_SERIAL_SHORT
;도있다 /dev/disk/by-id/ata-*
그 값을 기준으로 ATA 드라이브에 대한 심볼릭 링크).
udisks
이러한 데이터에 대한보다 높은 수준의 인터페이스를 제공합니다 (예 : smartctl
직접 호출하는 데 필요한 루트 권한없이 SMART 속성에 액세스 할 수도 있음).
일반적으로 작동하는 다른 방법은 다음과 같습니다.
ls -l /dev/disk/by-id/
다음은 드라이브 및 모델 / 일련 번호의 빠른 열거를 제공하는 하나의 라이너입니다.
ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'
또는 원격 시스템의 경우 :
ssh $host "ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print \$NF \" \" \$(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'"
그런 다음이 출력을 추가로 처리 할 수 있습니다. 대부분의 드라이브 유형에서 줄당 두 번째 문자열은 MODEL_SERIAL입니다.
/ dev / disk / by-id 아래의 링크는 udev에 의해 작성됩니다. /etc/udev/rules.d/50-udev.rules에서 다음 줄을 찾을 수 있습니다.
KERNEL=="sd*[!0-9]|sr*", SYSFS{ieee1394_id}=="*", ENV{ID_SERIAL}="$sysfs{ieee1394_id}", ENV{ID_BUS}="ieee1394"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/usb_id -x"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -s %p -d $tempnode"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -a -s %p -d $tempnode"
KERNEL=="nst[0-9]*|st*|sd*[!0-9]|sr*|dasd*[!0-9]|cciss?c", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
불행히도 by-id
장치 이름 에서이 심볼릭 링크 를 찾는 것은 쉽지 않습니다 . 그러나 최소한 하나의 직접적인 방법이 있습니다.
$ udevinfo -q path -n /dev/sda
/block/sda
$ udevinfo -q symlink -p /block/sda
disk/by-id/scsi-SATA_KINGSTON_SVP100_31JY100MY5SK disk/by-path/pci-0000:00:11.0-scsi-0:0:0:0
공백으로 구분 된 목록이 반환됩니다. 그래서 by-id
경로를 찾을 수 있습니다.
또는 "복합"일련 번호를 직접 얻을 수 있습니다.
$ udevinfo -q env -p /block/sda
ID_VENDOR=ATA
ID_MODEL=KINGSTON_SVP100S
ID_REVISION=CJR1
ID_SERIAL=SATA_KINGSTON_SVP100_31JY100MY5SK
ID_TYPE=disk
ID_BUS=scsi
ID_PATH=pci-0000:00:11.0-scsi-0:0:0:0
에서 ID_SERIAL
후 마지막 밑줄 당신은 일련 번호를 얻을 수 있습니다.
보시다시피 일련 번호에는 영숫자 문자와 '-'가 포함될 수 있습니다 (이러한 SCSI HDD가 있습니다). 누구든지 일련 번호에 대한 제한을 알고 있습니까? '_'를 포함 할 수 있으면이 방법은 방탄이 아닙니다.
이 ID_MODEL
키는 일련 번호의 시작 부분을보다 정확하게 지역화하는 데 사용할 수 있습니다. 첫 15 문자가 ID_SERIAL
(_로 대체 된 공백)에 추가 되었기 때문 입니다.
udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'
물론 -q property
생략 할 수는 있지만 항상 udevadm
필요없는 추가 라인을 출력하는 것은 리소스 낭비라고 생각합니다 .
udisks --show-info
.__ But__ 시도했습니다. 배치 모드 또는 일반적으로 스크립트에서 사용될udisks
때보 다 느립니다udevadm
.