Bagaimana cara mengetahui / dev mana yang merupakan flash drive USB?

156

Saya ingin memasang drive USB, dua di antaranya dan saya perlu dua titik pemasangan yang berbeda. Sayangnya, kernel Linux mengalami perubahan nama dan saya tidak tahu yang mana /dev lokasi adalah yang benar. Apakah ada cara untuk melihat dmesg atau /proc atau di tempat lain untuk mengetahui node perangkat mana yang merupakan drive USB.

(Saya menggunakan ArchLinux jika itu membantu ... /dev/sda adalah hard drive pertama, /dev/sr0 adalah drive dvd, dll.)

sunting: Drive USB terhubung ke hub USB. Saya melihat melalui dmesg dan dikatakan hub terhubung dan memindai 3 perangkat yang terhubung. Masih tidak dapat melihat di mana drive USB saya.

Rudolf Olah
sumber
1
Tidak bisa melihatnya? Mungkin menunggu sebentar. Atau coba port USB lain. Lihat perbedaan apa yang ada di 'lsusb'
Nick Devereaux
Mungkin ingin mengulangi pertanyaannya agak - tidak semua perangkat usb disk, setelah semua.
Arafangion
3
Itu df Perintah menunjukkan kepada Anda di mana itu dipasang
Will Sheppard

Jawaban:

80

Cara termudah: Lihatlah output dari dmesg setelah menghubungkan perangkat USB. Seharusnya menunjukkan kepada Anda apa /dev simpul ditugaskan untuk itu.

zigdon
sumber
2
dmesg bekerja dengan baik, tapi saya punya kasus di mana dmesg tidak menunjukkan /dev simpul: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcd Apa artinya ini? Bagaimana saya bisa memasang perangkat ini? Perangkat muncul di lsusb...
modulitos
1
Sebenarnya, saya sudah menemukannya. Ada pembaruan kernel sejak reboot terakhir saya yang menyebabkan masalah ini. Setelah reboot, usb saya terpasang dengan baik. Semoga ini bisa membantu seseorang!
modulitos
53

Selama Anda berlari udev , Anda dapat melakukan ini dengan mudah dengan merujuk / dev / disk / by-id / usb- nama pabrik _ nomor seri . Ini muncul sebagai tautan simbolis yang bisa Anda referensikan langsung di dalam fstab Anda, atau yang bisa Anda gunakan untuk referensi readlink -e untuk menentukan perangkat blok terkait.

Inilah contoh dunia nyata. Di komputer saya, saya memiliki 3 hard drive USB yang terhubung. Ini masing-masing muncul di / dev / disk / by-id dengan nomor seri unik (meskipun mereka berbagi string pabrikan umum). Saya telah membuat tautan simbolis ke masing-masing dari tiga entri unik ini, dan sekarang dapat dengan cepat menentukan drive mana (dan perangkat mana yang dikaitkan dengan setiap drive) dengan menjalankan readlink -e nama tautan . Misalnya berlari readlink -e / root / disk2 di komputer saya saat ini menampilkan " / dev / sde ", sementara readlink -e / root / disk3 tidak menghasilkan output apa pun.


sumber
14
Singkat dan sederhana: for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar
52

Semua ini adalah saran yang bagus, tetapi metode yang paling cepat dan paling tidak bertele-tele adalah mengetik saja yang berikut di terminal:

mount

yang akan memberikan daftar semua perangkat yang terpasang (ini mengasumsikan drive USB terpasang, yang biasanya terjadi dengan distro Linux modern).

AnotherLongUsername
sumber
4
Tidak, itu tidak secara ajaib memasang perangkat Anda. Anda harus menentukannya dengan mount /dev/id /mount/point, jadi itu tidak berhasil.
polym
9
Jawaban saya menjawab pertanyaan pengguna 'Apakah ada cara untuk melihat melalui dmesg atau / proc atau tempat lain untuk mengetahui node perangkat mana yang merupakan drive USB.', Dan tidak dimaksudkan untuk memberikan panduan tentang kepraktisan pemasangan drive di Linux. .
AnotherLongUsername
Jawaban ini memecahkan pertanyaan yang hampir identik bagi saya.
Matthew Brown aka Lord Matt
Saya pikir perilaku automount banyak tergantung pada jenis distro.
jiggunjer
1
df saya kira juga.
Alexey
24

Coba perintahnya udevinfo -q all -n /dev/sdadimana /dev/sda adalah jalur ke disk Anda. Ini memberi Anda banyak informasi tentang disk yang Anda lihat - ada entri yang memberi tahu Anda tentang bus yang terhubung dengannya.

Ini tentu saja menyelamatkan Anda dari keharusan untuk menelusuri dmesg dan / atau log.

Memperbarui

udevadm info --query=all -n /dev/sda 

Setidaknya dari Jul 2010 [ 1 ] udevinfo diganti di Debian (dan diturunkan) oleh udevadm info dengan sedikit sementara yang ada symlink segera ditinggalkan dan dihapus (Anda masih dapat menemukannya di mesin lama tidak diperbarui). Selalu dari [ 1 ] kita bisa membaca:

Dalam udev 117, udevadm diperkenalkan dan udevinfo dan program lain berubah menjadi symlink kompatibilitas. Symlink sudah tidak digunakan lagi di udev 128 dan dihapus untuk selamanya udev 147 .

Eltariel
sumber
8
Dalam Debian, udevinfo diganti namanya udevadm.
Steve Pomeroy
8
Di Ubuntu, perintahnya tampaknya "info udevadm --query = all -n / dev / sda"
machineghost
Saya kira mereka mengganti nama perintah di beberapa titik - ketika saya menulis jawaban (berabad-abad yang lalu) perintah bekerja pada sistem ubuntu tempat saya mempostingnya;)
Eltariel
Perintah masih bekerja di ubuntu, udevadm info --query=all -n /dev/ttyUSB1
Siddharth
1
udevadm info --query=all -n /dev/ttyUSB di Fedora juga.
slm
23

metode paling sederhana untuk melihat apa yang terjadi hanyalah mengetik (sebagai root tentu saja):

blkid -c /dev/null

ini memberi Anda gambaran lengkap tentang semua perangkat blok bahkan jika tidak dipasang

toh
sumber
Tidak semua distro memiliki ini. Yang mana yang Anda gunakan?
New Alexandria
Ini tidak menghasilkan apa-apa di distro Raspbian saya.
IgorGanapolsky
Perintah tidak ditemukan: blkid
IgorGanapolsky
Tidak ada output dari perintah ini di Ubuntu 14.04 64-bit.
gbmhunter
11

/dev/disk/by-* adalah cara termudah dalam hal ini, jika karena alasan tertentu Anda ingin membuat hidup lebih menarik, Anda dapat menggunakan HAL.

Untuk membuat daftar semua perangkat yang Anda gunakan:

hal-device

Untuk mendapatkan properti tertentu yang Anda gunakan (ini akan kembali /dev/sd* pada perangkat penyimpanan USB):

hal-get-property --udi $UDI --key block.device

Ada juga:

hal-find-by-capability
hal-find-by-property

Jika Anda ingin membuatnya lebih rumit, Anda bisa relatif mudah menulis sendiri Auto mounter berbasis HAL , Yang bisa sangat berguna jika Anda ingin mengotomatisasi semuanya.

Dan hanya untuk kelengkapan ada juga:

lsusb -v
lshw

Yang memberikan beberapa informasi umum tentang USB dan perangkat keras Anda secara umum.

Grumbel
sumber
2
/ dev / disk / by-id / * usb * sangat membantu.
Rob
/ dev / disk / by-label ftw. Terima kasih :)
Triptych
9
sudo fdisk -l

Dan hanya menganalisis hasilnya.

Felipe
sumber
1
halaman manual fdisk "Jika tidak ada perangkat yang diberikan, yang disebutkan dalam / proc / partisi (jika ada) digunakan." Menjalankan fdisk mungkin bukan opsi ... Berdasarkan pada satu sistem Debian yang saya tahu belum diinstal, dugaan saya adalah bahwa beberapa sistem GPT mungkin tidak menginstal perangkat lunak yang tidak diperlukan. Namun, memeriksa / proc / partisi harus menjadi pilihan.
TOOGAM
Ini adalah satu-satunya pilihan yang berfungsi dengan baik untuk saya. Saya minta maaf jika itu tidak berhasil untuk Anda!
Felipe
8

Menggunakan

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

Di bawah aturan udev default, itu akan menunjukkan kepada Anda sebagian besar perangkat usb dan itu akan menunjukkan Anda symlink ke nama perangkat blok mereka pada sistem.

Jika itu tidak berhasil, lihat /dev/disk/by-id/ langsung.

DJ Capelis
sumber
6

Untuk perangkat USB, Anda cukup melakukannya

REMOVABLE_DRIVES=""
for _device in /sys/block/*/device; do
    if echo $(readlink -f "$_device")|egrep -q "usb"; then
        _disk=$(echo "$_device" | cut -f4 -d/)
        REMOVABLE_DRIVES="$REMOVABLE_DRIVES $_disk"
    fi
done
echo Removable drives found: "$REMOVABLE_DRIVES"
lemsx1
sumber
1
+1. Script sederhana dan ringkas untuk melakukan tugas secara otomatis.
leesei
2

Lihatlah pohon di bawah /dev/disk. Ini daftar disk dan partisinya (sistem file) oleh berbagai skema.

Ted Percival
sumber
2

/ var / log / message jika dmesg tidak lagi memiliki informasi.


sumber
0

Jika Anda mencabut USB drive dan menancapkannya kembali, Anda akan melihatnya menginisialisasi dari kernel (dmesg)

Howler
sumber
0

Berdasarkan jawaban yang sangat baik dari stormlash dan dengan ketergantungan pada udev untuk mengisi pohon perangkat "/ dev / disk / by-id / usb", Anda dapat menentukan predikat (Bash) sebagai berikut:

is_usb_device() {
    local device_path=$1        # such as /dev/sdc
    for devlink in /dev/disk/by-id/usb*; do
        if [ "$(readlink -f "$devlink")" = "$device_path" ]; then
            return 0
        fi
    done
    return 1
}

Dan kemudian menggunakannya:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
user30747
sumber