标签: fuse

什么是虚拟文件系统或用户空间中的文件系统?

我刚刚遇到了像FUSE这样的用户空间中的VFS和文件系统.

现在,据我所知,它模拟了一个文件系统,因此应用程序可以拥有标准的文件系统层次结构.但我不明白,为什么我们需要一个单独的文件系统呢?我们不能只创建一个常规文件夹结构并放置将由应用程序使用的文件吗?

所以,我的问题是:

  1. 什么是VFS?

  2. 你能举一些现实世界的例子,使用VFS的用例.

  3. 使用VFS有什么好处?

任何基于Java的VFS?

fuse vfs

9
推荐指数
2
解决办法
1万
查看次数

无法删除 .git:目录不为空

无法删除.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/pathkillall git都没有成功。

在此输入图像描述

git bash rm fuse delete-file

9
推荐指数
1
解决办法
3万
查看次数

如何在Windows文件系统上使用GCP存储桶数据

我想在 Windows 10 上将 GCP 存储桶数据作为文件系统访问。

GCP为mac和Linux提供了FUSE,有没有办法在Windows上挂载GCP存储桶。

fuse google-cloud-platform

9
推荐指数
1
解决办法
1万
查看次数

什么是inode生成数?

我计划使用低级API实现FUSE文件系统,目前正在尝试理解fuse_entry_param结构.

我想知道究竟unsigned long fuse_entry_param::generation是什么意思.文档说只是ino/ generationpair对于文件系统的生命周期应该是唯一的,但不会涉及任何细节.

inode世代的语义是什么以及如何使用它们?

例如,我可以将其generation视为一个额外的位ino(如某种命名空间)并使用它们自由地将任意生命周期唯一的128位(2*sizeof(unsigned long)在x86_64上)值映射到inode吗?或者几代人只是按顺序递增?当inode数量发生碰撞时会发生什么,但它们的代数不同?

filesystems inode fuse vfs linux-kernel

8
推荐指数
1
解决办法
3752
查看次数

为什么FUSE似乎锁定了所有线程?

我拿了保险丝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)

c c++ fuse

8
推荐指数
1
解决办法
1034
查看次数

如何在Kubernetes容器/吊舱上安装S3存储桶?

我正在尝试在Amazon EKS集群上运行我的Spark作业。我的Spark作业在每个数据节点/工作人员/执行者处需要一些静态数据(参考数据),并且该参考数据可在S3上获得。

有人可以帮助我找到一个干净且性能良好的解决方案,以将S3桶安装在吊舱上吗?

S3 API是一个选项,我正在将其用于输入记录和输出结果。但是“参考数据”是静态数据,因此我不想在我的spark作业的每次运行/执行中下载它。在首次运行时,作业将下载数据,而即将进行的作业将检查数据是否在本地可用,而无需再次下载。

fuse amazon-s3 s3fs apache-spark kubernetes

8
推荐指数
2
解决办法
5345
查看次数

docker Volume over fusion:传输端点未连接

所以我/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,这会给我的应用程序带来停机时间,因此不是一个可接受的解决方案。

所以我的问题是:

  1. 这是否是一个泊坞窗“错误”,当它再次可用时不会重新连接到已安装的文件夹?

  2. 我可以手动执行此任务,而无需重新启动整个容器吗?

谢谢

fuse docker docker-volume

8
推荐指数
1
解决办法
4438
查看次数

如何使用 docker 的 --user 选项将 uid 设置安全地添加到 docker 容器的 /etc/passwd 中

问题

对于应该以非 root 身份运行的 docker 映像(基于 alpine),我有两个要求:

  1. 我必须在 docker 容器内安装 FUSE 文件系统
  2. docker 镜像的用户可以设置 docker 用户的 UID/GIDdocker run --user {uid}:{gid}

FUSE 的fusermount命令需要用户在 中输入有效的条目/etc/passwd,否则它不会挂载文件系统。鉴于我在构建时不知道用户的 UID/GID,我无法adduser在构建时调用。我也无法在运行时执行此操作,因为用户没有适当的权限。

找到解决方案

到目前为止,我发现了两种感觉不合适/不安全的解决方案

1. 使/etc/passwd可写

当添加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 文件在容器内获得不适当的权限?

2. 将要求 #2 替换为两个附加环境变量

通过引入 DUID 和 DGID 作为环境变量并将 …

fuse docker dockerfile

8
推荐指数
0
解决办法
2371
查看次数

向没有 root 访问权限的 Linux 进程提供虚拟文件系统

我正在寻找一种向特定 Linux 进程提供用户空间文件系统的方法,但我没有 root 访问权限。

显而易见的答案是 FUSE,但如果没有 root 访问权限,我无法加载内核模块,因此 FUSE 似乎是不可能的(除非有办法 LD_PRELOAD 它?)。

下一个最好的事情似乎是 LD_PRELOAD ,它可以拦截相关的 FS 调用,然后转换它们,就像 FUSE 在 VFS 层所做的那样。

所以我的问题是:

  1. 是否存在像 FUSE 这样支持 LD_PRELOAD 的文件系统?
  2. 如果我 LD_PRELOAD 某个进程的某些 FS 调用拦截是否存在任何陷阱,例如 FS 拦截可能不被分叉或子进程继承?

linux filesystems fuse ld ld-preload

7
推荐指数
1
解决办法
1054
查看次数

macFUSE 给出 mount_macfuse: 挂载点 ... 本身位于 macFUSE 卷上 - Apple M1 macOS 12.3

这个问题快把我逼疯了。我不断收到错误:“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 sshfs osxfuse apple-m1

7
推荐指数
1
解决办法
1万
查看次数