Skąd mam wiedzieć, czy jest to lokalny dysk twardy lub klucz USB? Wolę sposób na zrobienie tego bez uprawnień roota./dev/sdX
OK, bardzo udevadm
pomogłem:
W przypadku lokalnego dysku twardego:
udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata
W przypadku klucza USB:
udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb
bash
hardware
hard-disk
administration
stokrotka
źródło
źródło
Odpowiedzi:
Istnieje kilka sposobów, aby powiedzieć bez uprawnień roota, wiele z nich jest trudnych / zhackowanych:
Używanie
/dev/disk/by-id
:Jeśli to odpowiada czymś takim
/dev/disk/by-id/usb-blah-blah-blah
, to jest to dysk USB. Inne prefiksy obejmująata
,dm
,memstick
,scsi
, itd.Używanie
/dev/disk/by-path
nie różni się znacząco:Dostaniesz coś takiego
/dev/disk/by-path/pci-0000:00:1d.7-usb-0:1:1.0-scsi-0:0:0:0
. Pokazuje ścieżkę urządzenia prowadzącą do dysku. W tym przypadku szorstką ścieżką jest PCI → USB → dysk. (zwróć uwagę na-usb-
).Korzystanie udev (uruchomić Debiana My.
udevadm
W/sbin
których nie ma na moich$PATH
- twój może być gdzie indziej, lub wyłączyć$PATH
):Otrzymasz typ magistrali, na której urządzenie jest włączone. Usuń, aby
| grep ID_BUS
uzyskać pełną listę informacji (może być konieczne dodanie|less
).Jeśli masz
lshw
zainstalowany, odpowiedź Huygensa może również działać:I przejrzyj dane wyjściowe swojego dysku. W
less
wypróbuj /sdX i spójrz na poprzedniebus info
wiersze - pierwszy powie tylkoscsi@…
, ale jeden kilka wierszy przed nim będzie bardziej pouczający. Jednak naprawdę powinieneś uruchomić to jako superużytkownik, więc może nie być odpowiednie. (objawy: na laptopie próbowałem, wymieniono dysk SATA, ale nie dysk USB - działający zsudo
wymienionymi obydwoma)Są też inne, mniej lub bardziej bezpośrednie niż te.
źródło
esatap
?Znam rozwiązanie, ale niestety wymaga ono uprawnień administratora. W każdym razie nadal może się przydać:
Dla każdego urządzenia wypisze nazwę logiczną (np.
/dev/sda
) I informacje o magistrali, co w przypadku urządzenia USB byłoby czymś w rodzaju „usb @ 1: 2”.Przykładowe dane wyjściowe:
źródło
Możesz użyć
lsblk
:gdzie
-d
lub--nodeps
oznacza, że nie drukuje urządzeń podrzędnych i-o name,tran
lub--output name,tran
oznacza tylko nazwę urządzenia i typ transportu urządzenia. Dodajrm
do listy kolumn wyjściowych, aby zobaczyć, które urządzenia można usunąć (1
jeślitrue
):źródło
Nie wymaga to uprawnień roota (ale wiele z tych poleceń używa i zależy od bashism, więc nie będą działać we wszystkich powłokach zgodnych z POSIX):
Istnieje szybki sposób, aby zapytać o :
sdX
Naprawdę interesujący plik jest
capability
. Na moim Debianie mamgenhd.h
plik, więc:W ogóle, tylko dla wiedzy, czy flaga
removable
jest ustawiona:więc
działa poprzez sprawdzenie, czy
capability
wartość (w moimsda
przykładzie powyżej 52 ) ma1
ustawiony bit (tj. czy jest to liczba nieparzysta).Ale Linux renderuje wszystkie flagi
/sys
, więc proszenie/sys/block/sdX/removable
jest o wiele prostsze! ;-)Tak więc kluczem USB może być
removable
, ale ponieważ istnieje wiele urządzeń wymiennych , wolałbym upewnić się, że rozmiar nośnika jest większy niż 0 (jak na przykład niezaładowana taca CD-ROM) i że urządzenie nie jest w użyj: Podczas oglądaniasdX/trace/enable
nie jest to związane:Nota: Wszystko to zostało dobrze przetestowane na bash v4.2 +.
W ramach bash możesz użyć tego bardzo szybkiego i wydajnego sposobu:
W moim systemie są 4 klucze USB, ale jeden z nich (
sde
) jest już zamontowany, więc wynik poprzedniego polecenia:Mój skrypt:
Jest trochę funkcji bash, którą napisałem, aby zainstalować uaktualniony Debian Live.
# Pierwsza część renderuje tylko rozmiar czytelny dla człowieka. Funkcja zaczyna się tam.
To przypisuje odpowiedź, jako tablicę , do zmiennej podanej jako pierwszy argument lub do zmiennej
$REPLY
:(Ostatnie pole może zawierać spacje.)
źródło
…,device/{model,type,vendor,uevent}
? (2) Czy możesz wyjaśnić swoje polecenia GENHD i polecenia „śledzenie / włączanie”? (3) Twój[ $(( $(< $file ) & 1 )) -ne 0 ]
test można uprościć (skrócić) do(( $(< $file ) & 1 ))
./usr/src/*/include/linux
. Spróbowaćsed -ne 's/#define.*GENHD_FL_\([A-Z0-9_]*\)[ \t]*\([0-9]*\) \?.*$/GENHD_FLAGS[\2]="\1"/p;' /usr/src/*/include/linux/genhd.h
. (3) Tak.Sugeruję po prostu użycie
hdparm
lublshw
(które może być konieczne do zainstalowania) i użycie gosudo
do wykonania jako root.wszyscy powinni dać ci informacje.
źródło
hdparm -i /dev/sda /dev/sda: HDIO_DRIVE_CMD(identify) failed: Invalid exchange HDIO_GET_IDENTITY failed: Invalid argument
Po prostu przeczytaj wartość
/sys/block/sdX/removable
.Na przykład:
/dev/sdc
to klucz USB (może to być karta SD lub inny nośnik wymienny).źródło
dmesg
jest najłatwiejszą metodą:( będący nazwą Twojego urządzenia, np. )
sdX
sda
Z powyższego polecenia zobaczysz:
źródło
dmesg
odczytuje okrągły bufor komunikatów jądra, więc to rozwiązanie będzie działać stosunkowo niedawno po ponownym uruchomieniuMożesz użyć poniższych poleceń, aby uzyskać węzły urządzeń SD, USB i SATA.
źródło
/dev/sdX
, skąd mam wiedzieć, czy jest to lokalny dysk twardy czy klucz USB?” Proszę wyjaśnić, w jaki sposób OP może użyć twoich poleceń, aby to zrobić determinacja. (2) Wolimy odpowiedzi, które wydają polecenia i wyjaśniają je, niż odpowiedzi, które zawierają tylko polecenia. Wyjaśnij, co robisz. Proszę nie odpowiadać w komentarzach; edytuj swoją odpowiedź, aby była jaśniejsza i bardziej kompletna. … (Ciąg dalszy)awk
to bardzo potężne narzędzie. Wielu początkujących zamieszcza odpowiedzi, które wykonują agrep
i potokują swoje wynikiawk
. Jest to rzadko konieczne;awk
Potrafi dopasować wzór i może wybrać żądane dane wejściowe bez pomocygrep
. Masz potok dwóchgrep
poleceń, potokowany doawk
, a następnie drugieawk
polecenie. Można to znacznie uprościć; proszę spróbować. (4) Dla jasności możesz chcieć zmienić`…`
na$(…)
- zobacz to , to i to .Jestem leniwy, inxi mówi mi to łatwo:
Wierzę, że mówi mi to również, czy to firewire i może jeden inny typ, ale musiałbym dwukrotnie sprawdzić, czy od jakiegoś czasu nie używałem tego typu.
Mówi mi również o użyciu -p, jeśli partycje są zdalne, takie jak samba lub nfs.
źródło
Po podłączeniu urządzenia USB uruchom
dmesg
w oknie konsoli. Otrzymasz kilka wskazówek.Na przykład powie coś w stylu „Urządzenie podłączone, pamięć masowa / dev / sdd”.
źródło