Серійний номер жорсткого диска Linux як некореневий


15

Перш за все, я хотів би попросити вибачення за назву за те, що не включають деталі апаратних засобів. Це тому, що я шукаю команду, яка буде працювати у всіх дистрибутивах Linux.

Питання:

Я дуже новачок у Linux і не знаю багато, однак, чи можна отримати серійний номер жорсткого диска, який працює як некореневий. Мені відомо, що для отримання цієї інформації працює за допомогою sudo. Однак мені потрібен спосіб отримати цю інформацію, не працюючи як sudo.

Будь-які пропозиції будуть дуже вдячні.

З повагою,

Мустафа

Відповіді:


19

У більшості поточних дистрибутивів серійні номери жорсткого диска зберігаються в базі даних udev, яку можна запитувати без кореневих дозволів:

/sbin/udevadm info --query=property --name=sda

(Шукати ID_SERIAL, ID_SERIAL_SHORT, є також /dev/disk/by-id/ata-*символічні посилання для дисків ATA на основі цих значень).

udisksнадає інтерфейс більш високого рівня до цих даних і більше (він також надає доступ до атрибутів SMART, не вимагаючи привілеїв root, які потрібні для виклику, наприклад, smartctlбезпосередньо).


Ви маєте рацію, тільки що спробували udisks --show-info.__ Але__ потрібно зауважити, що при використанні в пакетному режимі або загалом у сценаріях udisksШЛЯШЕ повільніше, ніж udevadm.
синтаксичний помилок

6

Ще один спосіб, який зазвичай працює:

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.


2

Як сказано в Умбелі, без кореневого доступу або надання коренеподібних дозволів на якийсь процес ви не можете цього досягти. Однак, оскільки ви кажете, що ви новачок, дозвольте відзначити вас про зручну команду під назвою lshw.


Дякую і Womble, і собі, дуже вдячний. Я досліджую згадану вами команду.

1

Окрім надання дозволів, що нагадують корінь для певного процесу, цього досягти не виходить. Навіть як root ви не можете це зробити в деяких апаратних конфігураціях.


Дякуємо за вашу швидку відповідь Womble. Я віддам.
мустафа

0

Посилання під / 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). Хтось знає якесь обмеження щодо серійного номера? Це, якщо може містити "_", цей метод не є кулезахисним.

ID_MODELКлюч може бути використаний для локалізації більш точно початок серійного номера, так як (як мені здається) його перші 15 символів додаються до ID_SERIAL(прогалини замінені на «_»).


"udevinfo" не працював для мене тут, на Ubuntu. Однак наступний однолінійний виконав саме те, що я хотів: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'Звичайно, це -q propertyможна залишити, але я завжди думаю, що марно витрачати ресурси, щоб udevadmвивести додаткові рядки, які нам взагалі не потрібні.
синтаксеррор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.