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.


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.


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.


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).


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 .


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


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.


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.


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.


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"

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.


2

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


0

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.