Root olmayan Linux sabit disk seri numarası


15

Her şeyden önce, donanım ayrıntılarını içermediği için başlık için özür dilerim. Bunun nedeni, tüm Linux dağıtımında çalışacak bir komut arıyorum.

Soru:

Linux için çok yeniyim ve fazla bir şey bilmiyorum, ancak kök olmayan olarak çalışan sabit sürücü seri numarasını almak mümkün mü. Sudo kullanarak çalışan bu bilgileri almak için kullanılabilir komutlar olduğunu biliyorum. Ancak, sudo olarak çalıştırmadan bu bilgileri almak için bir yol gerekir.

Herhangi bir öneriniz çok takdir edilecektir.

Saygılarımla,

Mustafa

Yanıtlar:


19

Geçerli dağıtımların çoğunda HDD seri numaraları kök izinleri olmadan sorgulanabilen udev veritabanında saklanır:

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

(görünüm için ID_SERIAL, ID_SERIAL_SHORTaynı zamanda var olan /dev/disk/by-id/ata-*bu değerlere dayalı ATA için sembolik).

udisksbu verilere ve daha fazlasına daha üst düzey bir arayüz sağlar (aynı zamanda kök ayrıcalıklarına gerek kalmadan SMART özniteliklerine erişim sağlar, örneğin smartctldoğrudan arama için gerekli olacaktır ).


Sadece çalıştı, haklısın udisks --show-info.__ But__ o toplu modunda veya genel olarak komut kullanıldığında, belirtmek gerekir udisksYOL daha yavaş olduğunu udevadm.
sentaksör

6

Genellikle işe yarayan başka bir yol:

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

İşte size sürücü ve model / seri numarasını hızlı bir şekilde numaralandıran bir astar:

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

Veya uzak makineler için:

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

Daha sonra bu çıktıyı daha fazla işleyebilirsiniz. Çoğu sürücü türü için, satır başına ikinci dize MODEL_SERIAL şeklindedir.


2

Womble'ın dediği gibi, kök erişimi veya bazı işlemlere kök benzeri izinler vermeden, bunu başaramazsınız. Bununla birlikte, bir acemi olduğunuzu söylediğiniz için, size adı verilen kullanışlı bir komutu not edeyim lshw.


Hem Womble'a hem de kendinize çok teşekkür ederim. Bahsettiğiniz emri araştıracağım.

1

Bazı işlemlere kök benzeri izinler vermeden, bunu başaramazsınız. Kök olarak bile bazı donanım yapılandırmalarında yapamazsınız.


Hızlı cevabınız için teşekkürler Womble. Bir deneyeceğim.
mustafa

0

/ Dev / disk / by-id altındaki bağlantılar udev tarafından oluşturulur. /Etc/udev/rules.d/50-udev.rules içinde bu tür hatlar bulunabilir:

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

Ne yazık ki bu by-idsymlink'i cihazın adından bulmak önemsiz değildir . Ancak en az bir doğrudan yol var:

$ 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

Bir boşlukla ayrılmış liste döndürülür. Böylece by-idyol bulunabilir.

Veya doğrudan "kompozit" seri numarasını alabilirsiniz:

$ 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

In ID_SERIALsonra geçen çizgi Sen seri numarası alabilirsiniz.

Gördüğüm gibi bir seri numarası alfasayısal karakterler ve '-' içerebilir (bu tür SCSI HDD'lerim var). Seri numarasıyla ilgili herhangi bir sınırlama bilen var mı? Eğer '_' içerebilirse, bu yöntem kurşun geçirmez değildir.

ID_MODELİlk 15 karakter eklenir (bana öyle geliyor) gibi anahtar, seri numarası daha doğrusu başlangıcını lokalize için kullanılabilir ID_SERIAL( '_' ile değiştirilir boşluklar).


"udevinfo" burada Ubuntu'da benim için çalışmadı. Ancak, aşağıdaki tek astar tam olarak istediğimi yaptı: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'Tabii ki, -q propertydışarıda bırakılabilir, ancak her zaman udevadmihtiyacımız olmayan ek hatların çıkışına izin vermek için bir kaynak kaybı olduğunu düşünüyorum .
sentaksör
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.