我只是被啪的一声弄湿了。我已经安装了 vlc 并想尝试使用它。我所有的媒体都安装在/store
NFS 挂载下。快照不允许访问该目录。
谷歌搜索后,我了解到我可以访问接口和接口下/home/peter
的文件。:home
/media
:removable-media
但我实际上喜欢/store
并且不想将其更改为/media/store
or/home/peter/store
或除/store
.
有没有办法让 snap 允许我的 snap(或者可能只是 vlc)访问/store
,所以 snap 符合我的命名约定,或者我是否被迫转换为 snap 的首选项?
这似乎很不灵活,我希望我错过了一些东西。
令我惊讶的是,它看起来真的
/home
是硬编码的。 mount-support.c包含:哇。这让我很吃惊。但是你现在有了。
编辑:另见启动板问题 1643706
只需运行应用程序,就好像它不是一个快照 \o/
例如铬
Chromium Unsnapped
/snap/chromium/current/usr/lib/chromium-browser/chrome --user-data-dir=~/ChrUnsnapped --class="ChrUnsnapped" %U
<rant>
我对 snap 感到非常沮丧,以至于我无法像 15 年来那样配置我的个人 /stf 目录。谢天谢地,这个黑客,似乎我将不得不为每个 freeken snap 应用程序这样做:'(。
是的,我知道这很糟糕,但是在配置白名单之前,这似乎是让事情恢复正常的唯一方法。我真的不想把我的东西放在 /home、/mnt、/media 请不要讨厌你的用户。
</rant>
所以,有两件事。
首先:Linux 和 Unix 有一个 Ubuntu 和 Snaps 遵循的文件系统层次结构标准。 https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
第二:如果选择偏离自 1979 年以来一直存在的全球标准,那很好,但是然后绑定挂载您的非标准目录,以便 snap 可以找到它。
或者
那么您可以继续使用您的非标准挂载点,同时您的所有快照都可以找到您的 nonstandard_mountpoint 数据。
甚至可以通过将其添加到您的 FSTab 来使此挂载永久化
追加行
保存并退出
这是一个示例: 存储在 /srv/dsmusic 的音乐文件
首先在 /home/$USER/Music/dsmusic 创建一个目录
然后将 mount /srv/ds 音乐绑定到该目录
然后你所有的快照音乐程序都会自动神奇地找到音乐文件。
继续音乐示例:
追加行
** 卸载 **
如果要卸载,可以使用常规的 umount 命令,如常规挂载点
有关更多信息,请参阅: https ://unix.stackexchange.com/questions/198590/what-is-a-bind-mount
系统D
** 请注意,在 SystemD 中有一种更现代的方法来执行此操作,而不是使用 fstab。
要在 SystemD 中创建绑定挂载,您需要创建一个 .mount 文件,其中非标准挂载点的路径由 -(减号)而不是正斜杠 (/) 分隔
过去并编辑挂载点
如果 nano 是默认编辑器 CTRL+X y (对于 nano) :wq (对于 vim)
启用systemD文件
然后重新加载 SystemD 守护进程
然后开始你的安装
如果你需要再次修改它只是
示例: 再次使用音乐示例:
这将打开一个空白编辑器并在正确的系统文件夹中创建一个新的 .mount 文件,在该文件夹中添加行
对于同一硬件上的本地挂载点:
请注意,如果您的非标准挂载点是 NAS 或其他远程设备,您将需要使用 remote-fs.target 而不是 local-fs.target
用于不同硬件(如 NAS)上的远程挂载点
然后退出编辑器 CTRL+X y (对于 nano) :wq (对于 vim)
启用systemD文件
然后重新加载systemD守护进程
然后开始你的新挂载点
仅卸载绑定挂载
您现在可以在 /srv/dsmusic 找到数据的镜像,并且 snap 将能够在 /home/$USER/Music/dsmusic 找到相同的数据
有关更多信息,请参阅:https ://utcc.utoronto.ca/~cks/space/blog/linux/SystemdBindMountUnits 和 https://www.freedesktop.org/software/systemd/man/systemd.mount.html
因此,为了扩展我上面的迷你答案,没有办法做到这一点是普遍的、安全的和健全的。我知道每个人都喜欢定制他们的文件系统,但这需要一些成本,这就是其中之一。
最终,通过 XDG 门户上的工作,某些应用程序(尤其是图形应用程序)可以访问任意位置的文件,前提是这些应用程序使用了一些最近引入的 GTK API。当在限制下运行时,这将与受信任的助手联系,弹出看起来像文件选择器的受信任 UI,与特殊的 FUSE 文件系统对话以将文件(在任何位置)作为 /run/ 中的特殊内容公开。 ..应用程序看到的某个地方,事情可能会很好。
这是为文件选择器友好的东西设计的,比如媒体播放器或文字编辑器。不过,托管在您的 linux 树
/codez
不会那么好用。将目标目录挂载到
/home/*/snap/
是一个选项;一个简单的绑定挂载对我不起作用,硬链接或目标文件或目录的符号链接到建议的 snap 目录或其任何子目录也不起作用。此限制可能是由于目标文件存在于/home/*/
目录之外,我没有测试/home/*/
前缀 glob 内文件的挂载/硬/符号链接。但是,一种解决方法:将完整文件复制到其中
/home/<myuser>/snap/<appname>/<somenewdirectory>
确实对我有用。维护完整的数据集副本对我来说仍然是不可行的,但是有很多工具可以帮助处理这种限制;在使用快照之前手动递归复制,如果您的数据集很小甚至是原子数据集,则可以选择在之后将修改后的文件复制回来举几个可以帮助您的文件复制实用程序:
cp --verbose --archive --recursive /somedir ~/snap/somedir
, 源/目标反之亦然tar -C / -c somedir | tar -C ~/snap/ -xv
是一个基于 tar 的文件复制示例rsync --archive /somedir ~/snap/somedir
, rsync 很流行并且有很多包装器/扩展任何基于文件的备份实用程序(图形示例:)
grsync
都应该可用,因为整个目标是根据需要前后复制数据集git 克隆,可能,但是本地克隆默认使用硬链接,因此如果您使用 git 将文件系统 io 管理为 snap,请注意在克隆时不禁用硬链接的可能性,git clone 可能无法访问 snap。