Linux(Ubuntu):通过命令行安全地拔出USB闪存盘

50

如果您的shell脚本在完成任务后能够帮助您安全地拔出闪存盘,那将非常棒。预期解决方案应满足以下需求:

  1. 假设闪存驱动器挂载为 /media/A,与许多其他闪存驱动器一起,并且代码可以有选择地仅移除 /media/A 而不干扰其他驱动器。例如,我可以将 /media/A 作为参数传递。
  2. 轻量化的解决方案。安装另一个大小为 100MB 的软件包来完成任务会让人发疯。
  3. 我知道一些命令,例如 hdparm,但它们的文档很难阅读。如果有人能够提供解决方案,我希望他/她也能提供参数等的解释。
  4. 最好的情况是该代码可以处理各种类型的闪存盘(例如,我2003年购买的旧款32MB驱动器)(选项为便携式驱动器)。
  5. 它应该实现与右键单击磁盘→单击“安全移除驱动器”相同的效果。安全问题至关重要,否则可能会直接拔掉闪存盘,这通常不会造成损害。

5
umount 命令有问题吗?比如, umount /media/A。这个命令可能会被放到一个不太显眼的地方(比如 /sbin 而不是 /bin),但它是一个基本命令,很可能在这两个目录之一(或者可能在 /usr/sbin)。 - Jonathan Leffler
2
卸载后,闪存盘仍未准备好拔出。这个链接是我见过的最好的解释:http://askubuntu.com/questions/5845/what-is-the-difference-between-unmount-eject-safely-remove-drive-and-the。我觉得这是由于USB电源供应的原因。因此,磁盘从nautilus中消失了,但拔出它并不是“安全”的。 - user1539634
卸载后,您可以拔下它。唯一仍然通过电线传输的应该是电源。如果不是这样,那么您的计算机可能出现了严重问题。 - Cole Tobin
1
Cole,请问你能给我一些参考资料吗?一份全面的参考文献列表会是一个很好的答案。 - user1539634
使用随 usbmount 一起提供的 pumount 命令。 - beldaz
1个回答

50

你可以使用udisks来完成这个操作。它不是默认安装的,但安装起来很容易(一旦安装,该软件包的大小约为1兆字节)...

sudo apt-get install udisks

安装完成后,您可以使用以下命令拆卸USB驱动器...

sudo udisks --unmount /dev/sdb1
sudo udisks --detach /dev/sdb

第一行是卸载它。就像任何其他分区一样,此时仍然可以重新挂载它。第二行是分离它。在此之后,它将被关闭电源,您必须将其移除/重新插入以重新挂载。

为了澄清,sdb 是设备,而 sdb1sdb2sdb3 等是设备上的分区。另外,在尝试分离设备之前,您需要卸载所有挂载点。通常情况下,USB 存储器中只有一个挂载点,但这是您应该了解的警告。

从挂载点获取设备名称需要从挂载中提取它或其他操作。


1
我发现它仍然可以在没有 sudo 的情况下工作。另一个问题是,我是否可以安全地假设第二个位置 /dev/sdb 总是可以通过从第一个位置 /dev/sdb1 中去掉最后一个数字来获得? - user1539634
是的,sdb是设备,sdb1是设备上的分区。但需要注意的是,如果您在同一设备上挂载了多个分区,则第二步可能会失败。 - Omnikrys
3
你也可以使用命令eject。它会提示错误信息,但似乎正好按照要求工作(卸载并且不会自动重新挂载)。 - dshepherd
“eject” 命令可以正常工作,而 “udisks” 命令则出现了奇怪的 “STOP UNIT: FAILED: No such file” 错误。我使用的是 Debian 7 Wheezy 版本。 - deed02392
2
当使用last命令时,它会关闭我的设备,但立即将其重新启动,有什么建议吗? - CrackSmoker9000
会导致一些内置笔记本电脑SD卡读卡器在启动时挂载,即使没有插入卡片也会断开连接,因此您必须重新启动才能再次挂载它们(或者如果可能的话找到并挂载设备)。不过还是有效的,谢谢! - Wilf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接