Nomor seri hard drive Linux sebagai non-root

15

Pertama-tama, saya ingin meminta maaf untuk judul karena tidak termasuk detail perangkat keras. Ini karena saya mencari perintah yang akan berfungsi di semua distribusi Linux.

Pertanyaan:

Saya sangat baru di Linux dan tidak tahu banyak, apakah mungkin untuk mengambil nomor seri hard drive yang berjalan sebagai non-root. Saya sadar ada perintah yang tersedia untuk mengambil informasi ini berjalan menggunakan sudo. Namun, saya perlu cara untuk mengambil informasi ini tanpa berjalan sebagai sudo.

Setiap saran akan sangat dihargai.

Salam,

Mustafa

mustafa
sumber

Jawaban:

19

Pada sebagian besar distribusi saat ini, nomor seri HDD disimpan dalam database udev, yang dapat ditanyakan tanpa izin root:

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

(mencari ID_SERIAL, ID_SERIAL_SHORT; ada juga /dev/disk/by-id/ata-*symlink untuk drive ATA berdasarkan nilai-nilai).

udisksmenyediakan antarmuka tingkat yang lebih tinggi untuk data tersebut dan lebih banyak lagi (ini juga memberikan akses ke atribut SMART tanpa memerlukan hak akses root, yang akan diperlukan untuk memanggil, misalnya, smartctlsecara langsung).

Sergey Vlasov
sumber
Anda benar, baru saja mencoba udisks --show-info.__ Tapi__ harus dicatat bahwa ketika digunakan dalam mode batch atau umumnya dalam skrip, udisksadalah WAY lebih lambat daripada udevadm.
syntaxerror
6

Cara lain yang biasanya bekerja adalah:

ls -l /dev/disk/by-id/

Berikut adalah satu liner yang memberi Anda enumerasi cepat drive dan model / nomor seri:

ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'  

Atau untuk mesin jarak jauh:

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'"

Anda kemudian dapat memproses output ini lebih lanjut. Untuk sebagian besar jenis drive, string kedua per baris adalah MODEL_SERIAL.

Chriswall
sumber
2

Seperti kata womble, tanpa akses root atau pemberian izin seperti root untuk beberapa proses, Anda tidak dapat mencapai ini. Namun, karena Anda mengatakan Anda seorang pemula, izinkan saya mencatat Anda tentang perintah praktis yang disebut lshw.

Janne Pikkarainen
sumber
Terima kasih untuk Womble dan diri Anda sendiri, sangat kami hargai. Saya akan menyelidiki perintah yang Anda sebutkan.
1

Tanpa memberikan izin seperti root untuk beberapa proses, Anda tidak dapat mencapainya. Bahkan sebagai root Anda tidak dapat melakukannya pada beberapa konfigurasi perangkat keras.

womble
sumber
Terima kasih atas tanggapan cepat Anda, Womble. Aku akan mencobanya.
mustafa
0

Tautan di bawah / dev / disk / by-id dibuat oleh udev. Dalam /etc/udev/rules.d/50-udev.rules, baris seperti itu dapat ditemukan:

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}"

Sayangnya tidak sepele untuk mengetahui by-idsymlink ini dari nama perangkat. Tetapi setidaknya ada satu cara langsung:

$ 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

Daftar yang dipisahkan ruang dikembalikan. Jadi by-idjalan itu bisa ditemukan.

Atau Anda dapat langsung mendapatkan nomor seri "komposit":

$ 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

Di ID_SERIALgaris bawah terakhir setelah Anda bisa mendapatkan nomor seri.

Seperti yang saya lihat nomor seri dapat berisi karakter alfanumerik dan '-' (Saya punya HDD SCSI). Adakah yang tahu batasan nomor seri? Kalau bisa mengandung '_' maka metode ini bukan bukti peluru.

The ID_MODELkey dapat digunakan untuk melokalisasi lebih tepatnya awal nomor seri, karena (menurut saya) 15 karakter pertama ditambahkan ke ID_SERIAL(tempat digantikan oleh '_').

Benar
sumber
"udevinfo" tidak berfungsi untuk saya di sini di Ubuntu. Namun, one-liner berikut ini melakukan persis apa yang saya inginkan: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'Tentu saja, -q propertybisa ditinggalkan, tetapi saya selalu berpikir itu adalah pemborosan sumber daya untuk membiarkan udevadmmenghasilkan garis tambahan yang tidak kita butuhkan sama sekali.
syntaxerror