Извлечь USB-накопители / команда извлечения


55

Я знаю, что ejectкоманду можно использовать для извлечения практически любого подключенного аппаратного компонента, но можно ли ее использовать для извлечения USB-накопителей?

Можно ли извлечь USB-накопители и внешние жесткие диски с помощью ejectкоманды?


3
Связанный: противоположность eject /dev/sdXis sg_start -s /dev/sdX(из sg3_utilsпакета), обе используют команды SCSI для отправки на устройство.
Йети

Ответы:


15

Нет, они не должны быть; ejectиспользуется для открытия оптических приводов, где нельзя извлечь носитель напрямую.

Отключение достаточно для USB / eSATA / и т. Д. устройства хранения данных.


Хм, я где-то видел eject hdd, как в / dev / sda. Я думаю, что ссылка была неправильной тогда.
Джо Барр

Вы можете сделать это, но обычно это не очень много, если вообще что-то делает.
Игнасио Васкес-Абрамс

1
Это предполагает, что устройство монтируется в первую очередь, и это сопровождается еще одним большим набором предположений (у него есть файловая система, которую вы можете прочитать, например). Представьте, что вы стираете несколько внешних дисков - они, вероятно, никогда не будут подключены. выбрасывать это правильная вещь для использования.
Джеймс Мур

1
Если я когда-нибудь буду неуверен, я syncпрежде чем его
выдернуть

Большой, толстый ВНИМАНИЕ: Это не совсем так. Если вы этого не сделаете, ejectлежащий в основе драйвер устройства USB может (попытаться) написать сообщение ПОСЛЕ umountвозврата. Это хорошо видно, если на диске есть индикатор состояния. Дрожание USB-накопителя сразу после umountзавершения - РЕЦЕПТ АВАРИИ.
ZioByte

77

Да. Например:

sudo eject /dev/sda

Другие ответы здесь, которые указывают на то, что вам требуется механический аппарат для выброса, неверны.

Размонтирование - это не то же самое, что извлечение.

  1. Если вы отключите том, вы можете сразу подключить его обратно, так как базовое устройство все еще доступно. В некоторых ситуациях это может представлять угрозу безопасности. При извлечении устройства только перезагрузка подсистемы USB (например, перезагрузка) перезагрузит устройство.
  2. Извлекая устройство, вы фактически отключаете любой дальнейший доступ к устройству. Только перезагрузка USB-подсистемы (например, перезагрузка) перезагрузит устройство. В противном случае необходимо физически отключить USB-устройство и повторно подключить его, чтобы получить доступ к нему снова.
  3. Перед извлечением эта команда отключит все тома на подключенном устройстве.
  4. Если тома используются, эта команда завершится ошибкой, как и при отключении, за исключением того, что некоторые тома могут быть отключены, а некоторые тома могут оставаться подключенными.

1
Я также должен был использовать sudoэту команду для завершения (все, что нужно сделать, это размонтировать диск, прежде чем сказать, что он не может открыть файл). Кроме этого, полезный ответ.
GDP2

Недооцененный ответ в этой теме. Достаточно взглянуть на установленный FAT32 флэш-накопитель и заметить, что размонтирование и извлечение имеют огромную разницу только в файловом проводнике (например, nautilus). Простой клип Sansa также поможет продемонстрировать это.
Облако

Устройство все еще присутствует при выполнении lsusb. Таким образом, вам не нужно переустанавливать всю USB-подсистему. Просто устройства достаточно. Для этого вы можете использовать usbreset github.com/jkulesza/usbreset github.com/CWempe/usbreset Файлы usbreset.c идентичны в обоих проектах,
Ханнес

Откуда я знаю, что "sda" является правильным? Могу ли я сопоставить sda, sdb и т. Д. С реальными именами устройств?
Юрген К.

38

ejectбудет работать, но на самом деле не "завершит работу" относительно USB вращающихся дисков.

Лучший способ отсоединить внешний жесткий диск USB после правильного отсоединения :

udisks --detach /dev/sdb

Это обычно заставляет двигатель вращаться изящно.

Точно, текущая реализация :

  • отправляет команду SCSI sync-cache,
  • отправляет команду останова SCSI,
  • отвязывает драйвер ядра usb-хранилища,
  • приостанавливает USB-устройство (питание),
  • логически отключает / удаляет его из своего USB-порта.

Этот процесс близок к ручной процедуре, которая предлагается здесь . Первоначальный ответ был на аскубунту .

РЕДАКТИРОВАТЬ: Кроме того, как указывает g.rocket , эта команда может быть эквивалентна:

udisksctl power-off -b /dev/sdb

На моей Ubuntu имеется onyl, udisksctlкоторый не имеет --detachotion. Что делать в этом случае? благодарю вас.
Вакан Танка

@WakanTanka вы устанавливаете udisks.
Тотор

Как я могу установить udisks? Это не в моей системе. Я нашел пакет udisks2, но тот не сделал udisksили не udisks2 доступен.
Мартин Тома

5
@WakanTanka, udisksctl power-off -b /dev/sdwhateverкажется, делает то же самое.
g.rocket

Ответ @ g.rocket обновлен соответственно. Спасибо.
Тотор

8

Ручные шаги для размонтирования диска / dev / sdb (требуется sudo):

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

Это полностью отключит устройство и отсоединит его от системы. Он не будет обнаружен снова, пока не будет отключен и снова подключен.


2
ПОЭТОМУ это единственное, что у меня работает в Xen dom0 с внешней USB-подставкой - команды eject и udisks давали ошибки.
GS - Приносим свои извинения Монике

1
Я искал это, я нахожусь в аварийном режиме Dracut, и у меня нет доступа к любой из других функций. Спасибо!
Насиэль

hdparm -Yтакже удобно для дисков SATA / IDE.
Уолф

6

Если вы внимательно прочитали справочную страницу eject (1), вы можете увидеть, что существует 4 метода извлечения:

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

Когда вы вызываете eject на HDD / SCSI, он выдает ioctl(fd, SG_IO, (void *)&io_hdr);команду (копирование из eject.cисточников).

Это эквивалентно безопасному удалению устройства в MS Windows или MaxOSX.

Для некоторых устройств это имеет особое значение. Например, Kindle 3 после команды извлечения перешел в режим зарядки и позволяет просматривать на устройстве, пока экран не был заблокирован.

Другие утилиты делают то же самое, как это

scsi-spin --force --down /dev/sda

3

«Извлечение» не имеет значения для оборудования без лотка или другого загрузочного механизма (я полагаю, что оно работает и с ленточными накопителями).

Тем не менее, тестирование с помощью внешнего USB-накопителя показывает, что это ejectработает примерно так же umount- с побочным эффектом исчезновения узлов устройства, например

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

Обратите внимание, что /dev/sdc1исчез.


1
Никогда не пробовали с лентами ( mt rewofflболее удобно , потому что он также перематывает), но это делает работу с моторизованными гибкими дисками , как те , что на старых компьютерах Mac и Sun рабочих станциях.
Алексиос

@Alexios интересно.
Ренан

3

В командной строке osx вы должны использовать diskutil, где LABEL - это метка вашего usb-диска.

diskutil eject /Volumes/<LABEL>

2

udisks --detach /dev/sdXгде (X) - последняя буква вашего USB-устройства. Он отлично работает на любой системе Linux.


Ваш ответ в порядке, хотя, возможно, он немного короток. Я бы предложил уточнить подробнее: что делает эта команда, как, почему это то, что вы предлагаете и т. Д.
user259412

0

Хорошо, я постараюсь объяснить это лучше:

Команда udisks полностью удаляет и отключает питание любого USB-устройства, подключенного или подключенного к системе. Команда unmount просто демонтирует раздел, то есть: dev / sdb1 или что-то еще, но usb все еще присутствует в системе.

Так не то же самое размонтировать, извлечь и отсоединить

udisks = выключить USB

umount = просто размонтировать раздел не весь pendrive

eject = то же самое или очень близко к команде umount

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.