我脑子里一直有一个问题:
我有一个外部硬盘驱动器,当我想卸下它时,我只需在 Nautilus 中给出一个图标,上面写着:“安全地移除设备”(使用鹦鹉螺从侏儒 3.14在德班8),但实际上背后的流程是怎样的呢?这是一种了解到底发生了什么的方法吗?某种日志?
我想象第一个过程是umount /wherever/its/mount
,但我注意到当我使用umount
外部硬盘驱动器的 LED卸载它时在(当Windows操作系统关闭LED时),所以:命令umount
应该还切断连接硬盘的USB端口的电源?或者是另一个命令执行此操作?
谢谢
答案1
umount
命令本身不会切断驱动器的电源,安装实际上意味着将驱动器上的文件系统与目录链接起来,因此卸载只是这样做 - 取消与特定目录的安装链接;就 Nautilus 文件管理器而言,这并不是它在幕后使用的,事实上它使用G卡口来自标准 Gio API 的对象,用于所有 GNOME 相关类型的开发。
为了避免让您感到太困惑,让我用源代码和文档来解释它。对源代码的简要搜索表明,nautilus-文件操作.c文件中,nautilus_file_operations_unmount_mount_full
函数调用do_unmount
,函数调用g_mount_eject_with_operation
函数。最后一张属于API 的 GMount 部分。弹出将涉及同步需要写入安装、unmounting
卷或驱动器的剩余数据,然后关闭其电源(如果是 USB 驱动器或光盘)。
如果您期待可以关闭驱动器电源的 shell 命令就像 Nautilus 一样,有一个 viaudisks
或udisksctl
,如果我没记错的话,udisksctl
操作系统会使用它systemd
(但不要在最后一个声明中引用我,这只是一个意见)。这利用了U盘2,这实际上是另一个用于通过以下方式处理驱动器和卷的 APID总线界面;它实际上非常好,我已经用于开发我自己在 Ubuntu 上的指标。
所以长话短说:
- Nautilus 使用 Gio API 来处理挂载,但不调用任何外部或独立的命令行实用程序
- 有一个等效的命令行可以执行与 Nautilus 类似的操作
- 您始终可以使用 Gio API、UDisks API 编写自己的 API,或者调用外部
udisks
或udisksctl
命令。
也可以看看:
答案2
在 gnome 中,在 nautilus 中模拟 MYUSB 驱动器弹出的最佳方法是
$ gio mount -e /media/dzmanto/MYUSB
它不需要 root 权限。