我刚刚遇到了像FUSE这样的用户空间中的VFS和文件系统.
现在,据我所知,它模拟了一个文件系统,因此应用程序可以拥有标准的文件系统层次结构.但我不明白,为什么我们需要一个单独的文件系统呢?我们不能只创建一个常规文件夹结构并放置将由应用程序使用的文件吗?
所以,我的问题是:
什么是VFS?
你能举一些现实世界的例子,使用VFS的用例.
使用VFS有什么好处?
任何基于Java的VFS?
.git
我有一个 git 存储库,Rift
我正在尝试删除它。在尝试运行时rm -rf
,我收到错误:rm: cannot remove 'Rift/.git/objects/pack': Directory not empty
。
当我导航到目录树的底部时,我发现一个隐藏文件,名为 ,.fuse_hidden
后跟一串数字和字母(可能是十六进制)。我可以手动删除此文件,但一旦删除它,就会在其位置创建另一个附加了不同数字和字母字符串的文件。
我已经尝试过rm .git/objects/pack/* && rm -rf .git
,,sudo rm -rf .git
和,chmod -w .git/objects/path
但killall git
都没有成功。
我想在 Windows 10 上将 GCP 存储桶数据作为文件系统访问。
GCP为mac和Linux提供了FUSE,有没有办法在Windows上挂载GCP存储桶。
我计划使用低级API实现FUSE文件系统,目前正在尝试理解fuse_entry_param
结构.
我想知道究竟unsigned long fuse_entry_param::generation
是什么意思.文档说只是ino
/ generation
pair对于文件系统的生命周期应该是唯一的,但不会涉及任何细节.
inode世代的语义是什么以及如何使用它们?
例如,我可以将其generation
视为一个额外的位ino
(如某种命名空间)并使用它们自由地将任意生命周期唯一的128位(2*sizeof(unsigned long)
在x86_64上)值映射到inode吗?或者几代人只是按顺序递增?当inode数量发生碰撞时会发生什么,但它们的代数不同?
我拿了保险丝hello.c并修改了底部以显示我在说什么.在我的应用程序中,我需要在保险丝FS可用后做一些事情.我还需要IPC的另一个线程,并保持某些事情是最新的.因为fuse_main
似乎没有返回我把它扔在自己的线程中.
当我注释掉fuse_main
控制台显示A和B打印时.但是,如果我没有注释掉fuse_main
(在不同的主题中),则仅打印A. 如何保险丝停止我的主线程以及如何在FUSE执行其操作后运行代码?
#define FUSE_USE_VERSION 26
#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
static const char *hello_str = "Hello World!\n";
static const char *hello_path = "/hello";
static int hello_getattr(const char *path, struct stat *stbuf)
{
int res = 0;
memset(stbuf, 0, sizeof(struct stat));
if (strcmp(path, "/") == 0) {
stbuf->st_mode = S_IFDIR | 0755;
stbuf->st_nlink = 2;
} else if (strcmp(path, hello_path) == 0) {
stbuf->st_mode = S_IFREG | …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Amazon EKS集群上运行我的Spark作业。我的Spark作业在每个数据节点/工作人员/执行者处需要一些静态数据(参考数据),并且该参考数据可在S3上获得。
有人可以帮助我找到一个干净且性能良好的解决方案,以将S3桶安装在吊舱上吗?
S3 API是一个选项,我正在将其用于输入记录和输出结果。但是“参考数据”是静态数据,因此我不想在我的spark作业的每次运行/执行中下载它。在首次运行时,作业将下载数据,而即将进行的作业将检查数据是否在本地可用,而无需再次下载。
所以我/mnt/shared
用保险丝安装了这个远程文件夹。大部分情况下都是可用的,只是偶尔会出现断线的情况。
/mnt/shared
重新连接时,实际安装的文件夹将再次可用。
问题是我将此文件夹放入 docker 卷中以使其可供我的应用程序使用:/shared
。当我启动容器时,该卷可用。
但是,如果在两者之间发生断开连接,虽然/mnt/shared
主机上的存储库可用,但/shared
无法从容器访问该文件夹,我得到:
user@machine:~$ docker exec -it e313ec554814 bash
root@e313ec554814:/app# ls /shared
ls: cannot access '/shared': Transport endpoint is not connected
Run Code Online (Sandbox Code Playgroud)
为了让它再次工作,我找到的唯一解决方案是docker restart e313ec554814
,这会给我的应用程序带来停机时间,因此不是一个可接受的解决方案。
所以我的问题是:
这是否是一个泊坞窗“错误”,当它再次可用时不会重新连接到已安装的文件夹?
我可以手动执行此任务,而无需重新启动整个容器吗?
谢谢
对于应该以非 root 身份运行的 docker 映像(基于 alpine),我有两个要求:
docker run --user {uid}:{gid}
FUSE 的fusermount
命令需要用户在 中输入有效的条目/etc/passwd
,否则它不会挂载文件系统。鉴于我在构建时不知道用户的 UID/GID,我无法adduser
在构建时调用。我也无法在运行时执行此操作,因为用户没有适当的权限。
到目前为止,我发现了两种感觉不合适/不安全的解决方案
当添加chmod 555 /etc/passwd
到 Dockerfile 时,我可以在运行时执行
echo "someuser:x:${my_uid}:$(id -g)::/tmp:/sbin/nologin" >> /etc/passwd
Run Code Online (Sandbox Code Playgroud)
这完成了定影安装的工作。不幸的是,我没有找到一种方法可以在运行时将 passwd 文件更改回只读状态,如果没有这种方法,我就会担心有人可能会滥用它来重新获得 root 权限。虽然我找不到一种简单的方法来使用打开的 passwd 文件进行某些攻击(虽然我能够直接在 /etc/passwd 中为所有用户添加/修改密码和配置,然后通过 更改用户login
,但 alpine 不允许这样做用户 root (既不是 vialogin
也不是 via su
)。但我想有人比我更聪明,不知何故整个解决方案感觉像是一个相当肮脏的黑客。有没有人有具体的想法如何使用容器内的可写 passwd 文件在容器内获得不适当的权限?
通过引入 DUID 和 DGID 作为环境变量并将 …
我正在寻找一种向特定 Linux 进程提供用户空间文件系统的方法,但我没有 root 访问权限。
显而易见的答案是 FUSE,但如果没有 root 访问权限,我无法加载内核模块,因此 FUSE 似乎是不可能的(除非有办法 LD_PRELOAD 它?)。
下一个最好的事情似乎是 LD_PRELOAD ,它可以拦截相关的 FS 调用,然后转换它们,就像 FUSE 在 VFS 层所做的那样。
所以我的问题是:
这个问题快把我逼疯了。我不断收到错误:“macFUSE 给出 mount_macfuse:挂载点 ... 本身位于 macFUSE 卷上”
我的挂载点在哪里
当我运行 sshfs --version 时,我显然没有出现正确的 FUSE 版本,根据我的安装,我在 macOS 12.3 的系统偏好设置下安装了 4.2.4
我尝试从.dmg安装FUSE,我将其删除,尝试通过brew安装..重新启动后重新启动。将操作系统升级到最新。自制软件3.4.2
运行“sshfs --version”时终端的输出
SSHFS version 2.5 (OSXFUSE SSHFS 2.5.0)
FUSE library version: 2.9.9
fuse: no mount point
Run Code Online (Sandbox Code Playgroud)
我从来没有能够使用简单的命令挂载外部主机 fs:
sudo sshfs hosta:/ ~/Desktop/2 -o defer_permissions,auto_cache,reconnect,volname=hostamnt
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这个问题?
fuse ×10
docker ×2
filesystems ×2
vfs ×2
amazon-s3 ×1
apache-spark ×1
apple-m1 ×1
bash ×1
c ×1
c++ ×1
delete-file ×1
dockerfile ×1
git ×1
inode ×1
kubernetes ×1
ld ×1
ld-preload ×1
linux ×1
linux-kernel ×1
osxfuse ×1
rm ×1
s3fs ×1
sshfs ×1