Jak dowiedzieć się, który / dev jest dyskiem flash USB?

160

Chcę zamontować dysk USB, dwa z nich i potrzebuję dwóch różnych punktów montowania. Niestety, jądro Linuksa uległo zmianie nazwy i nie mogę ustalić, która /devlokalizacja jest właściwa. Czy istnieje sposób, aby przejrzeć dmesglub /procczy gdzieś indziej, aby dowiedzieć się, które urządzenie węzeł to USB.

(Używam ArchLinux, jeśli to pomaga ... /dev/sdajest pierwszym dyskiem twardym, /dev/sr0jest dyskiem DVD itp.)

edycja: Dysk USB jest podłączony do koncentratora USB. Przejrzałem dmesgi napisano, że koncentrator został podłączony i skanowano w poszukiwaniu 3 podłączonych do niego urządzeń. Nadal nie widzę, gdzie jest mój dysk USB.

Rudolf Olah
źródło
1
Nie widzisz tego? Może trochę poczekać. Lub spróbuj innego portu USB. Zobacz, jakie są różnice w 'lsusb'
Nick Devereaux
Może chciałbym nieco sformułować pytanie - w końcu nie wszystkie urządzenia USB są dyskami.
Arafangion
3
dfKomenda pokazuje, gdzie został on zamontowany
Will Sheppard

Odpowiedzi:

83

Najłatwiejszy sposób: spójrz na wyjście dmesgpo podłączeniu urządzenia USB. Powinien pokazać, który /devwęzeł został do niego przypisany.

zigdon
źródło
2
dmesgdziała świetnie, ale mam przypadek, w którym dmesgnie pokazuje /devwęzła: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdCo to znaczy? Jak mogę zamontować to urządzenie? Urządzenie pokazuje się w dniu lsusb...
modulitos,
1
Właściwie to rozgryzłem. Od czasu ostatniego restartu, który spowodował ten problem, pojawiła się aktualizacja jądra. Po ponownym uruchomieniu, mój USB montuje się dobrze. Mam nadzieję, że to komuś pomaga!
modulitos
54

Tak długo, jak korzystasz z udev , możesz to zrobić łatwo, odwołując się do / dev / disk / by-id / usb- nazwa producenta _ numer seryjny . Pojawiają się one jako dowiązania symboliczne, do których można albo bezpośrednio odwoływać się w fstab, albo które można wyrejestrować za pomocą readlink -e w celu ustalenia powiązanego urządzenia blokowego.

Oto przykład z prawdziwego świata. Na moim komputerze mam podłączone 3 dyski twarde USB. Każdy z nich pojawia się w / dev / disk / by-id z unikalnymi numerami seryjnymi (chociaż mają wspólny ciąg producenta). Utworzyłem dowiązania symboliczne do każdego z tych trzech unikalnych wpisów i mogę teraz szybko określić, który dysk jest który (i które urządzenie jest powiązane z każdym dyskiem), uruchamiając readlink -e linkname . Na przykład uruchomienie readlink -e / root / disk2 na moim komputerze wyświetla obecnie „ / dev / sde ”, podczas gdy readlink -e / root / disk3 nie generuje żadnych danych wyjściowych.


źródło
15
Krótko i prosto:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar
54

Wszystkie te są dobre sugestie, ale najszybszą i najmniej szczegółową metodą jest po prostu wpisanie w terminalu:

mount

która da listę wszystkich zamontowanych urządzeń (przy założeniu, że napęd USB jest zamontowany, co zwykle ma miejsce w przypadku nowoczesnych dystrybucji Linuksa).

AnotherLongUsername
źródło
5
Nie, to nie magicznie montuje twojego urządzenia. Musisz to określić mount /dev/id /mount/point, aby to nie działało.
polym
9
Moja odpowiedź odpowiada na pytanie użytkownika „Czy istnieje sposób na przejrzenie dmesg lub / proc, albo gdzie indziej, aby dowiedzieć się, który węzeł urządzenia jest dyskiem USB”, i nie ma na celu dostarczenia wskazówek na temat praktyczności montowania dysku w systemie Linux .
AnotherLongUsername
Ta odpowiedź rozwiązała dla mnie prawie identyczne pytanie.
Matthew Brown alias Lord Matt
1
Myślę, że zachowanie automount zależy dużo od rodzaju dystrybucji.
jiggunjer
1
dfteż chyba.
Alexey
24

Wypróbuj polecenie udevinfo -q all -n /dev/sda, gdzie /dev/sdajest ścieżka do dysku. Daje to mnóstwo informacji o dysku, na który patrzysz - jest wpis mówiący o autobusie, do którego jest podłączony.

To oczywiście oszczędza ci konieczności przeglądania gremi przez dmesg i / lub logi.

Aktualizacja

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

Od co najmniej lipca 2010 r. [ 1 ] udevinfo został zastąpiony w Debianie (i wyprowadzony) przez udevadm infoniewielki stan przejściowy, z którym były dowiązania symboliczne wkrótce przestarzałe i usunięte (nadal można je znaleźć na starej, nieaktualnej maszynie). Zawsze z [ 1 ] możemy przeczytać:

W udev 117 udevadmzostał wprowadzony, udevinfoa inne programy zamieniły się w dowiązania symboliczne zgodności. Dowiązania symboliczne były przestarzałe w udev 128 i usunięte na dobre w udev 147 .

Eltariel
źródło
8
W Debianie udevinfozmieniono nazwę udevadm.
Steve Pomeroy
8
W systemie Ubuntu polecenie wydaje się być „udevadm info --query = all -n / dev / sda”
machineghost
Podejrzewam, że w pewnym momencie zmienili nazwę polecenia - kiedy napisałem odpowiedź (wieki temu) polecenie działało na systemie ubuntu, z którego je
wysłałem
Komenda działa nadal w Ubuntu,udevadm info --query=all -n /dev/ttyUSB1
Siddharth
1
udevadm info --query=all -n /dev/ttyUSBtakże w Fedorze.
slm
22

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

blkid -c /dev/null

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

toh
źródło
Nie wszystkie dystrybucje mają to. Z którego korzystałeś?
Nowa Aleksandria,
Nie wyświetla to nic w mojej dystrybucji Raspbian.
IgorGanapolsky
Nie znaleziono polecenia: blkid
IgorGanapolsky 28.09.16
Brak danych wyjściowych z tego polecenia w 64-bitowym systemie Ubuntu 14.04.
gbmhunter
11

/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 wyświetlić listę wszystkich używanych urządzeń:

hal-device

Aby uzyskać konkretną właściwość, której używasz (zostanie ona zwrócona /dev/sd*na urządzenie pamięci USB):

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

Jest również:

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

Jeśli chcesz uczynić to jeszcze bardziej skomplikowanym, możesz stosunkowo łatwo napisać samemu auto-montera opartego na HAL , co może być bardzo przydatne, jeśli chcesz całkowicie zautomatyzować wszystko.

I dla kompletności są też:

lsusb -v
lshw

Zawiera ogólne informacje na temat USB i ogólnie sprzętu.

Grumbel
źródło
2
/ dev / disk / by-id / * usb * jest bardzo pomocny.
Rob
/ dev / disk / by-label ftw. Dzięki :)
Tryptyk
10
sudo fdisk -l

I po prostu przeanalizuj wynik.

Felipe
źródło
1
strona podręcznika fdisk „Jeśli nie podano żadnych urządzeń, używane są urządzenia wymienione w / proc / partitions (jeśli istnieją).” Uruchomienie fdisk może nie być opcją ... W oparciu o jeden system Debian, o którym wiem, że go nie ma, domyślam się, że niektóre systemy GPT mogą nie instalować niepotrzebnego oprogramowania. Jednak sprawdzanie / proc / partitions powinno być opcją.
TOOGAM,
To była jedyna opcja, która działała dla mnie dobrze. Przepraszam, jeśli to nie zadziałało!
Felipe,
8

Posługiwać się

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

Zgodnie z domyślnymi regułami udev, które pokażą większość urządzeń USB i pokażą dowiązanie symboliczne do ich nazwy urządzenia blokowego w systemie.

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

DJ Capelis
źródło
6

W przypadku urządzeń USB możesz to zrobić po prostu

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
źródło
1
+1. Prosty i zwięzły skrypt do automatycznego wykonania zadania.
leesei
2

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

Ted Percival
źródło
2

/ var / log / message, jeśli dmesg nie ma już informacji.


źródło
0

Jeśli odłączysz napęd USB i ponownie go włączysz, powinieneś zobaczyć, jak inicjuje się z jądra (dmesg)

Wyjec
źródło
0

W oparciu o doskonałą odpowiedź od stormlash i zależność od udev w celu zapeł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żyj 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
użytkownik30747
źródło