我想/drivename
通过单击 nautilus 侧窗格中的驱动器图标来安装其他驱动器(主要是 ntfs 和 fat),其中“驱动器名称”是指驱动器的标签。默认情况下,nautilus 会安装名称为驱动器名在/media/drivename
文件夹中。
我的问题是:我怎样才能让鹦鹉螺做到这一点?
我不想使用 fstab:请不要建议通过编辑/etc/fstab
文件来执行此操作。我希望在 nautilus 中使用此功能,单击驱动器后也应在侧窗格中看到。(不应隐藏)。
编辑:这个问题似乎有些误解。我不想安装在驱动器中/
,即 中驱动器的所有内容/
。我想要的是,当我安装驱动器名为“Main”的驱动器时,该驱动器将安装在/Main
而不是/media/Main
。
答案1
你需要为此编写一个 udev 规则:你可以在目录中创建一个/etc/udev/rules.d/
文件
# Start at sdb to avoid system harddrive.
KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="defaults,relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"
并在本例中用你的路径更改 ADD 和 REMOVE 操作/
ACTION=="add", RUN+="/bin/mkdir -p /%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /%E{dir_name}"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /%E{dir_name}", RUN+="/bin/rmdir /%E{dir_name}"
答案2
您可以根据需要扩展这些规则来实现这一点 -
# Start at sdb to avoid system harddrive.
KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="defaults,relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"
仔细查看规则。它不适用于硬盘驱动器。KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"
表示如果设备名称是 sda*(如果不是 sdb* 或 sdc*),则转到标签,media_by_label_auto_mount_end
即规则的末尾。因此,根据需要编辑行。但不要忘记系统驱动器。为其添加一个例外。
如果你的系统驱动器是 /dev/sda7,那么前几行应该是
KERNEL=="sda7" GOTO="media_by_label_auto_mount_end" #sda7 is system drive, so go to end.
#KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"
如果您需要运行其他命令,请用 将它们连接起来RUN
。
有关 udev 规则的更多信息,请点击这里
答案3
您希望动态挂载的卷直接出现在 中/
。到目前为止,这个问题的研究主要集中在改变将其从/media
改为/
。我怀疑有办法做到这一点。但一个简单、快速而粗略的解决方案是使其如此/media
并且/
是同一个文件夹。
我不强烈推荐这种做法,因为系统不是设计成这样工作的,而且可能存在错误,因为开发人员没有考虑到这种可能性。(有些人甚至可能没有考虑到这/
不是/media
错误的假设。)
但你应该能够建立/media
一个符号链接/
,这样当某物被安装进去时,它实际上就被安装进去了。/media/mount-point
/mount-point
- 它也可以通过、等方式访问,但如果您实际上通过这些名称访问它,可能会相当令人困惑。
/media/media/mount-point
/media/media/media/mount-point
请注意,虽然我还没有做必要的研究来确保这可以绝不造成安全问题,它不会以最初可能的方式造成安全问题似乎到:
非用户可以通过破解获得系统访问权限的 中的目录
/
(如/usr
和)无法通过这种方式访问。如果您安装卷名为 的分区,它不会覆盖或授予 访问权限,而是使用备用名称(通常为)安装。/dev
root
/usr
/usr
/usr_
这不会授予 中的不受限制的访问权限
/
,并且您不需要(实际上也不应该)更改 (或任何其他文件或文件夹)的所有权或权限。和/
的所有权和权限已经相同(、):/
/media
0755
root:root
ek@Apok:~$ ls -ld / /media drwxr-xr-x 25 root root 4096 2012-07-15 19:17 / drwxr-xr-x 14 root root 4096 2012-07-23 15:16 /media
仅
root
当设备安装在特定的挂载点上时,非用户才可以获得他们之前所没有的访问权限。
要使 /media 成为指向/
, 按着这些次序:
卸载所有已安装的分区,
/media
使其/media
为空。删除
/media
:sudo rmdir /media
重新创建
/media
为 的符号链接/
,位于/
:sudo ln -s / /media
请注意,
/
在/media
命令中ln
,因为在创建符号链接时,我们将目标首先,然后来源。
如果你需要或想要撤销此操作,只需反向执行以下步骤:
卸载所有动态安装的分区。
- 它们被安装在 中
/
,但是通过/media
符号链接,因此您可能无法在它们被安装时删除该符号链接,如果您这样做了,您可能无法访问它们,将数据刷新到它们,或者干净地卸载它们。
- 它们被安装在 中
删除符号链接:
sudo rm /media
重新创建真实目录:
sudo mkdir /media
您不必指定位掩码,因为当您以 创建文件夹时
root
,默认权限是正确的/media
。
此方法与之前的建议类似手动创建单独的符号链接/
到 的特定子目录中/media
。不同之处在于符号链接/media
本身,这应该会导致 OP 请求的确切行为,而无需为每个挂载点手动创建链接。
答案4
据我所知,现在还不可能(至少不可行)。可能需要编译一些软件包,包括 nautilus