Wysuń napędy USB / polecenie wysuwania

55

Wiem, że ejectpolecenia można użyć do wysunięcia niemal dowolnego podłączonego komponentu sprzętowego, ale czy można go użyć do wysuwania dysków USB?

Czy za pomocą polecenia można wysunąć dyski USB i zewnętrzne dyski twarde eject?

Joe Barr
źródło
3
Powiązane: przeciwieństwo eject /dev/sdXjest sg_start -s /dev/sdX(z sg3_utilspakietu), oba używają poleceń SCSI, aby wysłać do urządzenia.
Yeti

Odpowiedzi:

15

Nie. Nie muszą być; ejectsłuży do otwierania napędów optycznych, w których nie można bezpośrednio wyciągnąć nośnika.

Odinstalowanie jest wystarczające dla USB / eSATA / itp. urządzenia pamięci masowej.

Ignacio Vazquez-Abrams
źródło
Hmm, widziałem gdzieś wyrzucanie dysku twardego jak w / dev / sda. Myślę, że wtedy odniesienie było błędne.
Joe Barr
Możesz to zrobić, ale zazwyczaj nie robi to wiele, jeśli w ogóle coś.
Ignacio Vazquez-Abrams
1
Zakłada się, że urządzenie jest zamontowane w pierwszej kolejności i że realizuje ono kolejny duży zestaw założeń (na przykład system plików, który można odczytać). Wyobraź sobie, że wymazujesz kilka zewnętrznych dysków - prawdopodobnie nigdy nie zostaną zamontowane. wysuwanie jest właściwym rozwiązaniem.
James Moore,
1
Jeśli kiedykolwiek jestem niepewny, syncprzed
wyrwaniem
Duży, gruby OSTRZEŻENIE: To NIE jest do końca prawda. Jeśli tego nie zrobisz eject, sterownik urządzenia USB może nadal (próbować) pisać PO umountzwróceniu. Można to wyraźnie zobaczyć, jeśli dysk ma diodę LED stanu. Szarpnięcie pendrive'a zaraz po jego umountzakończeniu jest PRZEPISEM NA AWARIĘ.
ZioByte,
77

Tak. Na przykład:

sudo eject /dev/sda

Inne odpowiedzi, które wskazują, że potrzebujesz sprzętu do wyrzucania mechanicznego, są niepoprawne.

Odmontowanie to nie to samo, co wysuwanie.

  1. Jeśli odmontujesz wolumin, możesz go natychmiast zamontować z powrotem, ponieważ podstawowe urządzenie jest nadal dostępne. W niektórych sytuacjach może to stanowić zagrożenie bezpieczeństwa. Po wysunięciu urządzenia tylko reset podsystemu USB (np. Ponowne uruchomienie) spowoduje ponowne załadowanie urządzenia.
  2. Wyrzucając urządzenie, skutecznie wyłączasz jakikolwiek dalszy dostęp do urządzenia. Tylko reset podsystemu USB (np. Restart) przeładuje urządzenie. W przeciwnym razie należy fizycznie odłączyć urządzenie USB i podłączyć je ponownie, aby uzyskać do niego dostęp ponownie.
  3. Przed wysunięciem to polecenie odmontuje wszystkie woluminy na podłączonym urządzeniu.
  4. Jeśli woluminy są używane, to polecenie zakończy się niepowodzeniem, jak w przypadku odmontowania, z tym wyjątkiem, że niektóre woluminy mogą zostać odmontowane, a niektóre woluminy mogą pozostać zamontowane.
Danorton
źródło
1
Musiałem też użyć sudotej komendy do zakończenia (wystarczyło odmontować dysk, zanim powiedział, że nie można otworzyć pliku). Poza tym pomocna odpowiedź.
GDP2
Niedoceniana odpowiedź w tym wątku. Wystarczy spojrzeć na zamontowany napęd FAT32 i zauważyć, jak odmontowanie i wysunięcie ma świat różnicy tylko w samym eksploratorze plików (tj. Nautilus). Prosty klip Sansa również by to wykazał.
Chmura
Urządzenie jest nadal obecne podczas wykonywania lsusb. Nie musisz więc resetować całego podsystemu USB. Wystarczy samo urządzenie. Możesz to zrobić za pomocą usbreset github.com/jkulesza/usbreset github.com/CWempe/usbreset Pliki usbreset.c są identyczne w obu projektach,
Hannes
Skąd mam wiedzieć, że „sda” jest właściwe? Czy mogę zmapować sda, sdb itp na rzeczywiste nazwy urządzeń?
Jürgen K.
38

ejectbędzie działać, ale tak naprawdę nie „dokończy zadania” w odniesieniu do napędów obrotowych USB.

Najlepszym sposobem na odłączenie zewnętrznego dysku twardego USB po prawidłowym odmontowaniu jest:

udisks --detach /dev/sdb

Zwykle powoduje to, że dysk obraca się płynnie.

Właśnie obecne wdrożenie :

  • wysyła polecenie SCSI sync-cache,
  • wysyła polecenie zatrzymania SCSI,
  • odsuwa sterownik jądra pamięci USB,
  • zawiesza urządzenie USB (zasilanie),
  • logicznie wyłącza / usuwa go z portu USB.

Ten proces jest zbliżony do procedury ręcznej, która jest tutaj sugerowana . Początkowa odpowiedź była na askubuntu .

EDYCJA: Ponadto, jak wskazuje g.rocket , to polecenie może być równoważne:

udisksctl power-off -b /dev/sdb
Totor
źródło
Na moim ubuntu onyl, udisksctlktóry nie ma jeszcze okazji, --detachjest dostępny. Co robić w tym przypadku? Dziękuję Ci.
Wakan Tanka
@ WakanTanka instalujesz udisks.
Totor
Jak mogę zainstalować udisks? Nie ma go w moim systemie. Znalazłem paczkę udisks2, ale ta nie została udostępniona udisksani udisks2 udostępniona.
Martin Thoma
5
@WakanTanka udisksctl power-off -b /dev/sdwhateverwydaje się robić to samo.
g.rocket 30.09.16
Odpowiedź @ g.rocket została odpowiednio zaktualizowana. Dziękuję Ci.
Totor 30.09.16
8

Kroki ręczne odmontowywania dysku / dev / sdb (wymaga sudo):

echo 'offline' > /sys/block/sdb/device/state
echo '1' > /sys/block/sdb/device/delete

Spowoduje to całkowite wyłączenie urządzenia i odłączenie go od systemu. Nie zostanie wykryty ponownie, dopóki nie zostanie odłączony i ponownie podłączony.

Tony George
źródło
2
FWIW to jedyna rzecz, która działa dla mnie w Xen dom0 z zewnętrzną bazą USB - polecenia wysuwania i udisks dawały błędy.
GS - Przeproś Monikę
1
Szukałem tego, jestem w trybie awaryjnym Dracut i nie mam dostępu do żadnej z innych funkcji. Dzięki!
Nassiel,
hdparm -Yjest również przydatny w przypadku napędów SATA / IDE.
Walf
6

Jeśli dokładnie przeczytasz stronę podręcznika eject (1) , zobaczysz, że istnieją 4 metody wysuwania:

   -r   This  option specifies that the drive should be ejected using a CDROM
        eject command.

   -s   This option specifies that the drive should  be  ejected  using  SCSI
        commands.

   -f   This option specifies that the drive should be ejected using a remov‐
        able floppy disk eject command.

   -q   This option specifies that the drive should be ejected using  a  tape
        drive offline command.

Po wywołaniu eject na HDD / SCSI wydaje ioctl(fd, SG_IO, (void *)&io_hdr);polecenie (kopiowanie ze eject.cźródeł).

Jest to równoważne, gdy bezpiecznie usuwasz urządzenie w MS Windows lub MaxOSX.

W przypadku niektórych urządzeń ma to szczególne znaczenie. Na przykład Kindle 3 po przeniesieniu polecenia wysuwania do trybu ładowania i umożliwia przeglądanie na urządzeniu, zanim ekran był zablokowany.

Inne narzędzia robią to samo, jak to

scsi-spin --force --down /dev/sda
gavenkoa
źródło
3

„Wyrzucanie” nie ma znaczenia dla sprzętu bez tacy lub innego mechanizmu ładowania (zakładam, że działa również z napędami taśmowymi).

Jednak testy z zewnętrznym dyskiem flash USB wskazują, że ejectdziała podobnie umount- z efektem ubocznym powodującym zniknięcie węzłów urządzenia, np.

% ls  /dev/sdc*
/dev/sdc  /dev/sdc1
% sudo eject /dev/sdc
% ls  /dev/sdc*
/dev/sdc

Zauważ, że /dev/sdc1zniknął.

Renan
źródło
1
Nigdy nie próbował go wstążkami ( mt rewoffljest to bardziej wygodne, ponieważ również przewija), ale to nie działa z napędem dyskietek, takich jak te znajdujące się na starych komputerach Mac i Sun stacjach roboczych.
Alexios
@Alexios ciekawe.
Renan,
3

W wierszu polecenia systemu osx należy użyć diskutil, gdzie LABEL jest etykietą dysku USB.

diskutil eject /Volumes/<LABEL>
efesaid
źródło
2

udisks --detach /dev/sdXgdzie (X) to ostatnia litera urządzenia USB. Działa dobrze na każdym systemie Linux.

victorx66
źródło
Twoja odpowiedź jest w porządku, chociaż może jest trochę krótka. Sugerowałbym rozwinąć więcej: co robi to polecenie, jak, dlaczego to sugerujesz itp.
user259412
0

OK postaram się wyjaśnić to lepiej:

Polecenie udisks całkowicie usuwa i wyłącza każde urządzenie USB zamontowane lub podłączone w systemie. polecenie odmontowania wystarczy odmontować partycję, tj .: dev / sdb1 lub cokolwiek innego niż usb jest nadal obecny w systemie.

Więc nie jest to samo odmontowanie, wysunięcie i odłączenie

udisks = wyłącz USB

umount = po prostu odmontuj partycję, a nie cały pendrive

eject = to samo lub bardzo blisko polecenia umount

victorx66
źródło