Извлечь 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.