Jika saya menghubungkan perangkat fisik, bagaimana saya bisa tahu mana file perangkat miliknya?


13

Katakanlah saya mencolokkan beberapa drive USB yang tidak dipasang secara otomatis. Bagaimana saya bisa mengetahui file perangkat mana yang milik perangkat fisik itu, jadi saya bisa memasangnya misalnya?

Saya menjalankan Mac OS X tetapi saya lebih suka jawaban yang bekerja pada semua (atau setidaknya yang paling populer) sistem Unix. Saya punya masalah dengan Linux di masa lalu.


Di Linux, jawabannya cenderung melibatkan udev. Jadi Anda mencoba mencari yang setara dengan udev di OSX ; ini mengarah khususnya ke fungsi Alternatif ke udev pada OSX dan OSX USB Device Interface Guide .
Gilles 'SO- stop being evil'

Pada MacOSX yang paling sederhana adalah mengidentifikasi volume menurut labelnya. Tapi Gilles benar tentang solusi sempurna.
peterh

Jawaban:


14

Menggunakan udev:

Anda bisa mendapatkan informasi yang berguna udev(pada sistem yang menggunakannya - hampir semua Linux tipe desktop pasti). Misalnya, jika Anda ingin tahu drive mana yang dikaitkan /dev/sdb, Anda dapat menggunakan:

udevadm info --query=property --name=sdb

Ini akan menampilkan daftar properti perangkat itu, termasuk serial (ID_SERIAL_SHORT). Memiliki informasi itu, Anda dapat melihat output lsusb -vdan mencari tahu hal-hal seperti produsen dan nama produk.

Jalan yang lebih pendek untuk melakukan ini adalah

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

dan lihat baris yang cocok dengan $ID_VENDOR_ID:$ID_MODEL_IDoutput yang jauh lebih pendek lsusb.

Opsi lain yang bermanfaat adalah udevadm monitor. Gunakan jika Anda ingin tahu simpul perangkat mana yang dibuat pada saat memasang perangkat . Jadi jalankan dulu

 udevadm monitor --udev --subsystem-match=block

Dan kemudian hubungkan perangkat. Anda akan melihat nama perangkat dari perangkat blok yang terdeteksi (disk / partisi) yang dicetak di akhir setiap baris output.

Contoh fungsi shell yang praktis:

Inilah fungsi yang dapat Anda tempatkan di .bashrc(atau .zshrc):

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && VERBOSE lokal = -v
    untuk dsk dalam $ {@ - / dev / sd?}
    melakukan
        / sbin / udevadm info --query = path --name = "$ dsk" | grep --colour = auto -q usb || terus
        echo "===== perangkat $ dsk adalah:"
        (eval $ (info / sbin / udevadm --query = properti --name = "$ dsk" | grep "\ (MODEL \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && echo "Tidak Diketahui" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "----- PERANGKAT DIUNTUNGKAN ----"
        gema
    selesai
}

Gunakan seperti ini:

  • listusbdisks- untuk mengenali semua /dev/sdxperangkat;
  • listusbdisks sdbatau listusbdisks /dev/sdbatau listusbdisks sdb sdc- untuk mendapatkan info tentang perangkat tertentu saja;
  • listusbdisks -v [optional devices as above] - untuk menampilkan keluaran verbose dari lsusb

[Sunting]: Menambahkan beberapa fungsi seperti menanyakan banyak perangkat, memeriksa tunggangan dan mengontrol verbositas dari lsusb.


Cukup benar sejauh ini berjalan, tetapi tidak semua sistem menggunakan udev.
Caleb

@ Caleb Benar ... Sebenarnya, lsusbjuga merupakan program opsional. Tetapi keduanya sangat umum.
rozcietrzewiacz

@rozcietrzewiacz Pertanyaannya terutama tentang OSX, tetapi udev secara intrinsik spesifik untuk Linux.
Gilles 'SANGAT berhenti menjadi jahat'

@ Ya, benar. Saya tidak punya pengalaman dengan OSX, jadi saya baru saja memperbarui jawaban saya agar tidak menyesatkan.
rozcietrzewiacz

Apa yang biasanya saya lakukan dalam hal ini adalah, saya pasang perangkat dan segera jalankan dmesg. Tetapi ini tidak akan membantu jika perangkat sudah terhubung dan jika ada lebih banyak perangkat yang terhubung setelah yang pertama. :)
Abhishek A

3

Tidak ada jawaban universal. Di Linux, cara paling sederhana adalah dengan menjalankan utilitas disk gnome dan akan menampilkan semua disk yang terdeteksi, apakah sudah terpasang atau tidak. Dari baris perintah, Anda dapat berkonsultasi dengan output blkidatau udevadm info --export-db.


3

Di Mac OS X Anda dapat mencoba menggunakannya diskutil list.


1

Sehubungan dengan semua Unix, saya tidak berpikir ini layak.

Bus eksternal yang biasa saat ini tidak menggunakan skema penomoran tetap untuk porta mereka, seperti yang dilakukan IDE. Jadi, satu-satunya sumber data yang tersisa untuk pemetaan yang Anda butuhkan adalah nama pabrikan drive, nomor seri atau UID partisi.

Nama produsen tidak harus unik pada mesin yang diberikan (misalkan Anda menghubungkan dua drive eksternal dari seri yang sama - mereka akan mengidentifikasi secara identik). Nomor seri tidak "terlihat dari luar", seperti halnya UID partisi.

Jadi, satu-satunya solusi universal yang dapat saya pikirkan adalah memberi label drive fisik dengan nomor seri dan menggunakan perintah udevadm yang diberikan dalam jawaban rozcietrzewiacz, jika UDEV tersedia.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.