我知道eject
該命令可用於彈出幾乎所有連接的硬體組件,但它可以用於彈出 USB 驅動器嗎?
是否可以使用 USB 隨身碟和外部 HDD 彈出eject
命令?
答案1
是的。例如:
sudo eject /dev/sda
這裡表明您需要機械彈出硬體的其他答案是不正確的。
卸載與彈出不同。
- 如果卸載卷,您可以立即將其重新安裝,因為底層設備仍然可用。在某些情況下,這可能會帶來安全風險。透過彈出設備,只有 USB 子系統的重置(例如重新啟動)才會重新載入設備。
- 透過彈出設備,您可以有效地停用對該設備的任何進一步存取。只有重置 USB 子系統(例如重新啟動)才會重新載入裝置。否則,您必須物理斷開 USB 裝置並重新連接才能再次存取它。
- 在彈出之前,此命令將卸載裝置上已安裝的所有磁碟區。
- 如果磁碟區正在使用中,則此指令將與卸載一樣失敗,只不過某些磁碟區可能會被卸載而某些磁碟區可能仍處於裝載狀態。
答案2
在Linux,eject
可以工作,但不會真正「完成工作」關於 USB旋轉驅動器。
首先,你eject /dev/sdb
(或umount
一切)。
和然後,正確卸載後拔掉 USB 外接硬碟的最佳方法是:
udisksctl power-off -b /dev/sdb
或者
udisks --detach /dev/sdb
這通常會導致驅動器正常減速。
注意:與(前者已經安裝在我的 Debian 上,後者還沒有並且已經安裝)udisksctl
相比,可能是一個更“主流”的工具udisks
批評的用於不必要的向上/向下旋轉)。
一些細節
烏迪斯克斯克特爾
這文件狀態(關於關閉電源選項):
安排安全移除驅動器並關閉電源。在作業系統方面,這包括確保沒有進程正在使用驅動器,然後請求將運行中的緩衝區和快取提交到穩定的儲存。關閉驅動器電源的確切步驟取決於驅動器本身和所使用的互連。對於透過 USB 連接的驅動器,效果是 USB 裝置將被取消配置,然後停用它所連接的上游集線器連接埠。
請注意,由於某些實體裝置包含多個磁碟機(例如四合一快閃記憶體卡讀卡機 USB 裝置),因此關閉一個磁碟機可能會影響其他磁碟機。因此,與執行此操作相關的保證並不多。通常,效果是驅動器消失,就像拔掉插頭一樣。
udisk(已棄用?)
準確地說,目前的實施(截至 2014 年):
- 發送 SCSI 同步快取命令,
- 發送 SCSI 停止指令,
- 解除USB儲存核心驅動程式的綁定,
- 暫停USB設備(電源),
- 從邏輯上停用/從 USB 連接埠刪除它。
答案3
卸載磁碟 /dev/sdb 的手動步驟(需要 sudo):
echo 'offline' > /sys/block/sdb/device/state
echo '1' > /sys/block/sdb/device/delete
這將完全關閉設備電源並將其與系統分開。在斷開連接並重新連接之前,不會再次檢測到它。
答案4
如果你仔細閱讀彈出(1)man page 可以看到有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.
你打電話時噴射在 HDD/SCSI 上,它發出ioctl(fd, SG_IO, (void *)&io_hdr);
命令(從eject.c
來源複製)。
這相當於您在 MS Windows 或 MaxOSX 中安全刪除裝置。
對於某些設備來說,這有特殊的含義。例如Kindle 3之後噴射命令已移至充電模式並允許在螢幕鎖定之前在裝置上瀏覽。
另一個實用程式做同樣的事情,就像這樣
scsi-spin --force --down /dev/sda