Answers:
我不知道执行此操作的单命令方式。GUI程序正在对磁盘进行相当多的询问,以采取“正确”的方法,您需要自己完成一些工作。不过,您不需要sudo,而且我认为所产生的事件序列相对而言不会感到痛苦。
udisksctl
从udisks2
包装中使用:
udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device
您的用户帐户将需要得到适当的授权,才能使上述操作正常进行。在Debian和Ubuntu上,这意味着将您的帐户添加到plugdev
组中。
处理完磁盘后:
udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition
您可以通过以下方法(通过命令行)进行设置,以使使用磁盘的过程尽可能轻松。我假设您要将整个USB驱动器用作单个文件系统。其他配置将需要修改说明。关于变化的警告:我尚未找到在加密容器中使用LVM的方法,该方法将允许无特权的帐户断开所有连接。(我看不到通过禁用卷组的方法udisksctl
。)
为了便于说明,我们将磁盘称为/dev/sda
。您将需要文件系统的名称,以便以后参考。我将使用“ example
”。
运行sudo parted /dev/sda
并运行以下命令:
mklabel gpt
mkpart example-part 1MiB -1s
quit
该mkpart
命令可能会提示您稍微调整参数。您应该可以接受它的建议号码。
现在可以通过访问该分区/dev/disk/by-partlabel/example-part
。
sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part
浏览提示。
sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked
加密的设备现在可以在上找到/dev/mapper/example-unlocked
。这将不是永久的事情;仅用于设置过程。
假设您使用的文件系统是XFS。几乎所有其他传统文件系统都将以相同的方式工作。重要的是添加一个标签,以便以后使用:
sudo mkfs -t xfs -L example /dev/mapper/example-unlocked
现在可以通过访问文件系统的块设备/dev/disk/by-label/example
。
默认情况下,文件系统只能由root用户访问。在大多数情况下,您可能希望用户帐户可以访问这些文件。假设您的帐户名称为“ user
”:
udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example
udisksctl unmount -b /dev/disks/by-label/example
sudo cryptsetup luksClose example-unlocked
这是您定期执行的操作。插入USB驱动器后,
udisksctl unlock -b /dev/disks/by-partlabel/example-part
udisksctl mount -b /dev/disks/by-label/example
如果您的用户帐户是“ user
”,则文件系统现在将安装在/media/user/example
。
卸载文件系统:
udisksctl unmount -b /dev/disks/by-label/example
udisksctl lock -b /dev/disks/by-partlabel/example-part
udisksctl power-off -b /dev/disks/by-partlabel/example-part
现在您可以断开USB驱动器的连接了。
首先,“我不知道单命令执行此操作的方式。” 我也没有,并且已经打开了相应的功能请求。作为一种解决方法,可以创建包装器脚本,以提供一种单命令方式来解锁和安装分区。
假设您使用Bash,请将下面的脚本另存为,例如unlock-and-mount
,使其可执行,然后将其放置在的目录中PATH
。然后,您可以使用一步来解锁和安装设备unlock-and-mount /dev/disk/by-id/my-device-part-X
。
警告:这依赖于解析udisksctl
发送到stdout 的消息以及udisksctl
命令行界面的稳定性。根据udisksctl
手册页,这很脆弱,它说:
[此]程序不适合脚本或其他程序使用-将来,即使在维护版本中,选项/命令也可能以不兼容的方式更改。
同时,这是目前可以使用的脚本:
#!/usr/bin/env bash
# A convenience wrapper around `udisksctl`.
# Trace execution
set -x
# Abort on errors. (I find this helpful, despite the cautions given in
# http://mywiki.wooledge.org/BashFAQ/105 and
# http://mywiki.wooledge.org/BashFAQ/112 .)
set -e
set -u
# Define functions
die () {
echo >&2 "$@"
exit 1
}
# Validate input argument(s)
[[ "$#" -eq 1 ]] || die "Exactly 1 argument required: path to partition ID. $# given"
[[ -b "$1" ]] || die "$1 is not a block device"
[[ "$1" == /dev/disk/by-id/* ]] || die "$1 does not begin '/dev/disk/by-id/'"
# Unlock partition
unlockedpart="$(udisksctl unlock -b "$1" |\
tail -n1 |\
sed -e 's/^Unlocked \/dev\/[[:print:]]\+ as \([[:print:]]\+\).$/\1/' \
)"
# Mount unlocked partition
udisksctl mount -b "$unlockedpart"
udisks
(或udisks2
)完成此操作。研究其CLI实用程序中的选项可能会提供进一步的答案。