Відповіді:
Ще одне рішення, яке не вимагає привілеїв root:
udevadm info --query=all --name=/dev/sda | grep ID_SERIAL
Це фактично бібліотека, яка lsblk
, згадана don_crissti, використовує, але моя версія lsblk не включає опцію для послідовного використання.
grep ID_SCSI_SERIAL
може бути те, що насправді дає серійний номер накопичувача, на відміну від всесвітнього імені (wwn), про яке повідомляється у ID_SERIAL
.
ID_SCSI_SERIAL
ні нічого аналогічного (ні ID_ATA_SERIAL
): E: ID_SERIAL=TOSHIBA-TR150_23SC51E8J2BI ... E: ID_SERIAL_SHORT=23SC51E8J2BI ... E: ID_WWN=0x5e83a97200463ff3 ... E: ID_WWN_WITH_EXTENSION=0x5e83a97200463ff3
У термінальному типі:
# hdparm -I /dev/sd? | grep 'Serial\ Number'
EDIT: Ви також можете використовувати lshw
абоsmartctl
lshw
# lshw -class disk
smartctl
# smartctl -i /dev/sda
Якщо вам не вистачає цих інструментів, просто встановіть наступні пакети
# apt-get install hdparm
# apt-get install smartmontools
# apt-get install lshw
hdparm -I /dev/sd?
hdparm
пакет (доречно названий) на ARM (Raspbian на Raspberry Pi).
hdparm -I /dev/sd? | grep --before-context=4 'Serial\ Number'
для співвіднесення серійного номера з пристроєм. Схоже, оригінальний запит вимагає цього результату.
Ім'я пристрою 1 та відповідний серійний номер:
lsblk --nodeps -o name,serial
вихід:
NAME SERIAL
sda 0000000012400917BA30
sdb 0000000012400917BA96
додайте, -n
якщо ви не хочете друкувати рядок заголовка:
lsblk --nodeps -no name,serial
вихід:
sda 0000000012400917BA30
sdb 0000000012400917BA96
Передайте device
як аргумент, щоб отримати лише серійний номер конкретного пристрою:
lsblk --nodeps -no serial /dev/sda
вихід:
0000000012400917BA30
Майте на увазі lsblk
списки інформації про всі доступні (або зазначені) блокові пристрої . Тепер для тих, хто не знає, що означає цей останній термін:
загалом, блокові пристрої - це пристрої, які зберігають або зберігають дані. Дисководні накопичувачі, жорсткі диски та компакт-диски - це все блокові пристрої. Але це не проблема, коли lsblk
ви можете просто додати більше стовпців, наприклад type
(тип пристрою) та / або tran
(тип транспорту пристрою) тощо:
lsblk --nodeps -не ім’я, серійний, тип, транш
sda 0000000012400917BA30 disk sata
sdb 0000000012400917BA96 disk sata
sr0 4B583242334C453233353320 rom usb
lsblk
від util-linux версії 2.24 або новішої: github.com/karelzak/util-linux/commit/…
Використовуючи hdparm
ви можете бачити свій серійний номер жорсткого диска з терміналу.
Відкрийте свій термінал і введіть як
hdparm -I /dev/sd?|grep -E "Number|/dev"
-I
варіант в hdparm
. Я не хотів би цього і вважати за краще читати сер # без дозволів root. Ось чому я підтримав лише рішення don_crissti. - syntaxerror 57 секунд тому
$ ls -al /dev/disk/by-id/*sda*
Це покаже вам серійний номер щодо знайомого імені диска.
by-id
режисера - це просто посилання, тому ls -al /dev/disk/by-id/
все одно покаже, що потрібно.
Найпростіший спосіб мене знати (не вимагає кореня):
inxi -Dplxx
Це видає всі диски, їх серіали та будь-яку додаткову інформацію. -p додає розділи. -ла додає мітки. -u додає UUID для розділів.
Плюс це запам'ятати набагато простіше, хе.
Зразок:
inxi -Dxx
Drives: HDD Total Size: 810.2GB (42.9% used)
ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX
Зауважте, що це фільтрує оптичні приводи. Щоб переглянути оптичні дані:
inxi -Dxxd
Drives: HDD Total Size: 810.2GB (42.9% used)
ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX
Optical-1: /dev/sr0 model: LITE-ON DVDRW SOHW-1693S
rev: KS09 dev-links: dvd,dvdrw
Features: speed: 48x multisession: yes
audio: yes dvd: yes rw: cd-r,cd-rw,dvd-r state: running
Optical-2: /dev/sr1 model: LITE-ON LTR-52327S rev: QS0C dev-links: cdrom,cdrw
Features: speed: 52x multisession: yes
audio: yes dvd: no rw: cd-r,cd-rw state: running
Зауважте, що в моїй системі Debian lsblk нічого не показує для серіалів, як root або користувач. Ось чому inxi використовує набагато більш надійний метод отримання цих даних.
lsblk --nodeps -o name,serial
NAME SERIAL
fd0
sda
sdb
sdc
sdd
sr0
sr1
lsblk --version
lsblk from util-linux 2.25.2
Як бачите, lsblk вважає, що оптичний привід і дискета також є дисками, які в певному сенсі є, хоча і не дуже, оскільки вони не стають дисками, поки диск не вставлений. І він не показує нічого для серійного, а також, до речі, нічого не показує для інших значень, як label. Безумовно, помилка, оскільки ці дані доступні системі, саме там Inxi отримує їх, прямі.
lsblk
не вважає, що вони є дисками, вона просто перераховує всі блокові пристрої . Дивіться мій оновлений пост для уточнення. Щодо того, щоб не показувати інформацію - це тому, що ви використовуєте debian, який не є норіусом для їх lsblk
поведінки. Він працює прекрасно на archlinux, так що, безумовно, не помилка . Крім того, inxi
це лише сценарій bash, який використовує інші команди для отримання цієї інформації; він нічого не отримує "безпосередньо".
lsblk --nodeps -o name,serial
відображає серійні номери, я не можу відтворити помилку.
Мені також подобається використовувати, ls -l /dev/disk/by-id
тому що він буде показувати WWN диска, якщо він є. WWN зазвичай друкується на етикетці диска, тому його легко ідентифікувати.
root@server (16:27:58):~# ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root 9 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N -> ../../sda
lrwxrwxrwx 1 root root 10 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N-part2 -> ../../sda2
...
lrwxrwxrwx 1 root root 9 Dec 20 01:51 wwn-0x50014ee25ffd0a5c -> ../../sdc
lrwxrwxrwx 1 root root 9 Dec 20 01:51 wwn-0x50014ee2b554c0b4 -> ../../sdb
lrwxrwxrwx 1 root root 9 Dec 20 01:51 wwn-0x5002538d427700f0 -> ../../sda
ls -al /dev/disk/by-id/ | grep sdX | grep wwn | awk '{print $9'}
Це покаже wwn-id
диск для диска. awk
Фільтр може знадобитися коригування в залежності від дистрибутива операційної системи і версії. Мені було потрібно сценарій рішення, щоб прочитати те wwn-id
, що потрібно для огородження дисків Pacemaker. Якщо розділи ( /dev/sdX1
наприклад) вже створені grep
, потрібен інший для фільтрації виводу:
ls -al /dev/disk/by-id/ | grep sdX | grep wwn | grep -v sdX1 | awk '{print $9'}