루트가 아닌 Linux 하드 드라이브 일련 번호 모든 Linux

우선, 하드웨어 세부 사항을 포함하지 않은 것에 대해 사과드립니다. 모든 Linux 배포판에서 작동하는 명령을 찾고 있기 때문입니다.

질문:

나는 리눅스를 처음 접했고 많이 모르지만 루트가 아닌 것으로 실행되는 하드 드라이브 일련 번호를 검색하는 것이 가능합니까? sudo를 사용 하여이 정보를 검색하는 데 사용할 수있는 명령이 있음을 알고 있습니다. 그러나 sudo로 실행하지 않고이 정보를 검색하는 방법이 필요합니다.

어떤 제안이라도 높이 평가할 것입니다.

감사합니다.

무스타파



답변

대부분의 현재 배포에서 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입니다.


답변

womble이 말했듯이 루트 액세스 권한이 없거나 일부 프로세스에 루트 권한을 부여하지 않으면이를 달성 할 수 없습니다. 그러나 당신이 초보자라고 말했기 때문에이라는 편리한 명령에 대해 알려 드리겠습니다 lshw.


답변

일부 프로세스에 루트 권한을 부여하지 않으면이를 달성 할 수 없습니다. 루트로도 일부 하드웨어 구성에서는 할 수 없습니다.


답변

/ 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(_로 대체 된 공백)에 추가 되었기 때문 입니다.