2008-09-16 03:51:40 +0000 2008-09-16 03:51:40 +0000
161
161

Jak mogę się dowiedzieć, który /dev jest pendrive'em USB?

Chcę zamontować pendrive'a USB, dwa z nich i potrzebuję dwóch różnych punktów mocowania. Niestety, jądro Linuksa zmieniło nazwę i nie mogę się dowiedzieć, która lokalizacja /dev jest właściwa. Czy jest jakiś sposób, aby przejrzeć dmesg lub /proc lub gdzieś indziej i dowiedzieć się, który węzeł urządzenia jest dyskiem USB.

(używam ArchLinux'a, jeśli to pomoże…/dev/sda jest pierwszym dyskiem twardym, /dev/sr0 jest dyskiem dvd, itd.)

edit: Dysk USB jest podłączony do koncentratora USB. Przejrzałem dmesg i powiedziałem, że hub został podłączony i zeskanowałem 3 podłączone do niego urządzenia. Wciąż nie widzę gdzie jest mój dysk USB.

Odpowiedzi (11)

83
83
83
2008-09-16 03:53:52 +0000

Najłatwiejszy sposób: Spójrz na wyjście dmesg po podłączeniu urządzenia USB. Powinien on pokazywać jaki węzeł /dev został do niego przypisany.

54
54
54
2012-09-04 18:51:43 +0000

Wszystko to są dobre sugestie, ale najszybszą i najmniej gadatliwą metodą jest po prostu wpisanie do terminala:

mount

co da listę wszystkich zamontowanych urządzeń (zakłada się, że zamontowany jest dysk USB, co zwykle ma miejsce w nowoczesnych dystrybutorach Linux).

25
25
25
2008-09-16 03:59:28 +0000

Wypróbuj komendę udevinfo -q all -n /dev/sda, gdzie /dev/sda jest ścieżką do Twojego dysku. To daje Ci mnóstwo informacji o dysku, na który patrzysz - jest tam wpis, który mówi Ci o magistrali, do której jest podłączony.

To oczywiście oszczędza Ci chrapania przez dmesg i/lub logi.

Update

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

Od co najmniej Juliana 2010 [1 ] udevinfo został zastąpiony w Debianie (i wywodzący się) przez udevadm info z odrobiną transjentów, z którymi wkrótce przestarzałe i usunięte zostały symulacje (wciąż można je znaleźć w starej, nieaktualnej maszynie). Zawsze od [ 1 ] możemy przeczytać:

W udev 117, udevadm został wprowadzony, a udevinfo i inne programy zamieniły się w symulatory kompatybilności. Symbole zostały zdeprecjonowane w udev 128 i usunięte na dobre w udev 147.

23
23
23
2013-01-02 08:37:01 +0000

najprostszą metodą sprawdzenia, co się dzieje jest po prostu pisanie (oczywiście jako root):

blkid -c /dev/null

daje to pełny przegląd wszystkich urządzeń blokowych, nawet jeśli nie są zamontowane

11
11
11
2009-09-24 22:36:40 +0000

/dev/disk/by-* jest najprostszym sposobem w tym przypadku, jeśli z jakiegoś powodu chcesz uczynić życie bardziej interesującym, możesz użyć HAL.

Aby wymienić wszystkie urządzenia, których używasz:

hal-device

Aby uzyskać konkretną właściwość, której używasz (zwróci to /dev/sd* na nośniku USB):

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

Jeśli chcesz uczynić to jeszcze bardziej skomplikowanym, możesz stosunkowo łatwo napisać sobie HAL based auto mounter , który może być całkiem przydatny, jeśli chcesz całkowicie zautomatyzować rzeczy.

I tylko dla kompletności są też:

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

, który dostarcza pewnych ogólnych informacji o USB i ogólnie o twoim sprzęcie.

10
10
10
2015-11-10 02:47:28 +0000
sudo fdisk -l

I po prostu przeanalizuj wynik.

8
8
8
2008-09-16 04:18:39 +0000

Użyj

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

Pod domyślnymi regułami udev, które pokażą Ci większość urządzeń usb oraz symlink do ich nazwy urządzenia blokowego w systemie.

Jeśli to nie działa, spójrz bezpośrednio na /dev/disk/by-id/.

7
7
7
2012-08-24 17:37:56 +0000

Dla urządzeń USB można po prostu zrobić

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"
2
2
2
2008-09-16 03:55:24 +0000

Spójrzcie na drzewo pod /dev/disk. Zawiera ono listę dysków i ich partycji (systemów plików) według różnych schematów.

0
0
0
2008-09-16 03:53:27 +0000

Jeśli odłączysz dysk USB i podłączysz go z powrotem, powinieneś zobaczyć jego inicjalizację z jądra (dmesg)

0
0
0
2018-11-29 19:02:45 +0000

Na podstawie doskonałej odpowiedzi z burzy i w zależności od udev do wypełnienia drzewa urządzeń “/dev/disk/by-id/usb”, można zdefiniować predykat (Bash) w następujący sposób:

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
}

A następnie użyć go:

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