如何从命令行自动挂载?

Gru*_*bel 32 command-line mount

如何从命令行触发自动挂载?我所说的“自动挂载”并不是指全自动挂载,而是获取可用设备列表,然后选择一个并使其最终成为/media/{user}/{diskid}. 例如,此功能由 Nautilus 或 Thunar 提供,但我似乎找不到触发这种半自动挂载的命令行工具。

pmount是我发现的最接近的,但似乎由完全不同的机制在下面工作,并使设备显示为/media/sdf或类似的东西。

Rad*_*anu 37

您可以使用:

udisksctl安装-b DEVICE_NAME

device_name存储设备的名称在哪里,应该类似于/dev/sdb1.

使用lsblksudo fdisk -l命令您可以找出连接到系统的所有存储设备。

  • 尝试过,但这会导致`/media/{disk}`,与 Thunar 或 Nautilus 给出的不同。然而,`udisks2` 提供的 `udisksctl` 命令似乎可以满足我的需求。 (2认同)

Gru*_*bel 21

gio mount

gvfs现在被列为已弃用 (2018),建议您使用“gio”,它是 Gnome In Out 和 Glib 的一部分。参见维基百科

例如,自动挂载第二个驱动器分区;使用以下命令创建一个具有可执行权限的 bash 脚本以在启动时运行:

gio mount -d /dev/sda2
Run Code Online (Sandbox Code Playgroud)

如果您是分区的所有者(请参阅chown参考资料),则不需要 sudo。

挂载位于例如的 ISO 文件~/ISOs

gio mount "archive://file%3A%2F%2F%2Fhome%2Fpablo%2FISOs%2Fubuntu-18.04-desktop-amd64.iso"
Run Code Online (Sandbox Code Playgroud)

您可以使用 Python 3 对路径进行URL 编码realpath(连接到archive://

python -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1], \"\"))" "file://$(realpath ubuntu-18.04-desktop-amd64.iso)"
Run Code Online (Sandbox Code Playgroud)

这将安装在/run/user/$(id -u)/gvfs/.

作为替代,gnome-disk-image-mounter将安装在/media/$USER/.

要卸载使用gio mount -u /run/user/$(id -u)/gvfs/archive*(或/media/$USER/,取决于您的安装方式)。

udisksctl

列出可用设备:

udisksctl status
Run Code Online (Sandbox Code Playgroud)

安装是通过以下方式完成的:

udisksctl mount -b /dev/sdf
Run Code Online (Sandbox Code Playgroud)

或者

udisksctl mount -p block_devices/sdf
Run Code Online (Sandbox Code Playgroud)

卸载是通过以下方式完成的:

udisksctl unmount -b /dev/sdf
Run Code Online (Sandbox Code Playgroud)

或者

udisksctl unmount -p block_devices/sdf
Run Code Online (Sandbox Code Playgroud)

object-path可以通过做可以看出:

udisksctl dump
Run Code Online (Sandbox Code Playgroud)

类型的对象org.freedesktop.UDisks2.Block似乎是有效的object-patch/org/freedesktop/UDisks2/前缀必须从路径中删除,以便 udisksctl 接受它们。

gvfs-mount

可以通过以下方式列出可用设备:

gvfs-mount --list
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式安装它们:

gvfs-mount -d /dev/sdf
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式卸载:

gvfs-mount --unmount /media/user/01234567890
Run Code Online (Sandbox Code Playgroud)

剩下的一个问题是我不知道如何gvfs-mount --list在 mount 命令中使用输出,因为--list不会显示块设备名称,并且尝试使用它在挂载中打印的设备名称将导致:

Error mounting location: volume doesn't implement mount
Run Code Online (Sandbox Code Playgroud)

结论

虽然两者gvfs-mountudisksctl会为执行这些任务,它们的接口是不切实际的,因为他们不提供磁盘的人类可读的状态可用,只是一个过于冗长的信息转储。


zvu*_*vuk 7

一个按要求工作的简单解决方案(挂载到 /media/{user}/{diskid}),但它不能列出设备,但需要提供准确的、区分大小写的卷标作为参数 $1

安装

DEVICE=$(findfs LABEL=$1) && udisksctl mount -b $DEVICE
Run Code Online (Sandbox Code Playgroud)

卸载

DEVICE=$(findfs LABEL=$1) && udisksctl unmount -b $DEVICE
Run Code Online (Sandbox Code Playgroud)