Как получить серийный номер диска по соответствующему файлу в Linux?

Я знаю, что для диска в linux мы можем используйте такие команды, как hdparm или smartctl , чтобы получить его основную информацию. Но для реализации этих команд, я думаю, все они реализованы путем чтения соответствующего файла диска в Linux. Например, чтобы получить размер устройства / dev / sda , мы можем использовать cat / sys / block / sda / size вместо такой команды hdparm или smartctl . Итак, вопрос в том, как получить серийный номер диска, напрямую прочитав соответствующий ему файл.

0
30.11.2015, 04:41
2 ответа

Во-первых, для этого можно использовать команду lsblk. Первый шаг — получить только все устройства SCSI. Также игнорируются все разделы, ведомые устройства и держатели.

~$ lsblk -S  
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN  
sdb  1:0:1:0    disk Msft     Virtual Disk     1.0  
sr0  5:0:0:0    rom  Msft     Virtual CD/ROM   1.0  ata  
sdc  3:0:0:10   disk Msft     Virtual Disk     1.0  
sda  0:0:0:0    disk Msft     Virtual Disk     1.0  

Затем вы получаете серийный номер для каждого диска

~$ lsblk --nodeps -no serial /dev/sda  
600224807cc344ea899e344614ead465  

И используйте команду strace , чтобы глубже понять, как lsblk получает серийный номер? Я сделал это, но не уверен, что то, что я вижу, было правильным. Вы можете попробовать это для вас.

lsblk должен иметь возможность искать sysfs-файловую систему для экспорта объектов ядра-путь по основному :второстепенному, что делается с помощью /sys/dev/block.

Также вы можете обратиться к справочной странице sysfs по адресу здесь .

0
28.01.2020, 04:53

в Linux для диска sda:

egrep '^E:ID_SERIAL' /run/udev/data/b$(basename $(readlink --canonicalize /sys/block/sda/bdi))
E:ID_SERIAL=Samsung_SSD_850_EVO_500GB_S3R3NF0JA99600T
E:ID_SERIAL_SHORT=S3R3NF0JA99600T
date && uname --kernel-release
Tue Nov  2 11:50:37 AM PDT 2021
5.13.0-20-generic
0
02.11.2021, 17:52

Теги

Похожие вопросы