假设我有一个附加到循环设备 /dev/loop1 的文件,如何使用 fusion(用户空间中的文件系统)安装该文件?
当我尝试在 docker 容器上挂载 davfs2 卷时遇到以下错误:
geoserver@8e8091d97157:~$ mount owncloud/
/sbin/mount.davfs: loading kernel module fuse
/sbin/mount.davfs: loading kernel module fuse failed
/sbin/mount.davfs: waiting for /dev/fuse to be created
/sbin/mount.davfs: can't open fuse device
/sbin/mount.davfs: trying coda kernel file system
/sbin/mount.davfs: no free coda device to mount
Run Code Online (Sandbox Code Playgroud)
Dockerfile 包含以下内容:
FROM debian:jessie
ENV DEBIAN_FRONTEND noninteractive
ENV TERM linux
# environment variables
ENV GEOSERVER_PASS geoserver
RUN apt-get update
RUN apt-get install -y davfs2 fuse
RUN groupadd --gid 999 geoserver
RUN useradd -ms /bin/bash --home /home/geoserver …Run Code Online (Sandbox Code Playgroud) 我希望能够使用一个不错的 IDE 在本地编辑文件,并将本地计算机 ( ~/Code/myproject) 上的文件立即推送到云中的 Ubuntu 计算机 ( /home/ubuntu/myproject)。
我为我的 Mac OS X 笔记本电脑(本地)安装了FUSE 和 SSHFS 。
我在 EC2 上有一个 Ubuntu 16.04 AWS 实例:
ubuntu@ip-xxxxxx:~$ uname -a
Linux ip-xxxxxx 4.4.0-1017-aws #26-Ubuntu SMP Fri Apr 28 19:48:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-xxxxxxx:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
Run Code Online (Sandbox Code Playgroud)
我使用一个.pem文件通过 SSH 进入带有该-i标志的盒子(尚未设置authorized_keys)。
这是我在本地计算机上执行的操作:
$ mount # check for mounted
/dev/disk1 …Run Code Online (Sandbox Code Playgroud) 我正在为远程服务实现 FUSE 文件系统。当用户打开文件时,我会进行网络调用以获取文件的内容。似乎必须报告文件的大小GetAttr才能打开工作。
为了知道文件的大小,我必须发出网络调用,并且由于GetAttr在执行时为每个条目调用ls,因此我担心这种设计(如果用户ls在包含许多项目的目录中进行操作,则必须获取所有文件,即使用户不想打开任何文件)。
我该如何解决这个问题?我的想法是:
Read而不是Open可能会有所帮助,但是如果没有尺寸我就无法让它工作。GetAttr源自呼叫Open其他电话(含ls),我可能只在需要时发出的网络调用。我使用 Go 和go-fuse,但我认为这无关紧要,因为这是一个通用的 FUSE 问题。
此外,FUSE 文档非常少(实际上缺少)文档。如果熟悉此事的人可以解释ls,cd和cat- 以何种顺序调用哪些 FUSE 函数的调用流程,那就太好了。
例如,为什么同时存在Open和Read。
更新:
我一直在浏览 SSHFS,它被认为是 FUSE 文件系统的规范示例,它似乎也在 getattr 上通过网络获取文件:https : //github.com/libfuse/sshfs/blob/master/sshfs .c#L3167
你怎么看?
有没有办法修改或增加传递给 readdir/readdirplus 函数的大小值?
我的实现使用低级 API。对于相当复杂、嵌套很深或包含大量子目录的目录,我会遇到性能影响,这似乎是由于对 readdir/readdirplus 的重复调用量造成的。看起来大于 4096 字节的缓冲区(这是现在传入的)会有很大帮助。
我已经修改了 max_read、max_readahead 和 max_write 值,但没有看到这有任何效果。
先感谢您。
我是 FUSE、c 和 FS 的新手,我正在弄乱libfuse 包中给出的直通 FS示例。任何人都可以提示一下代码中命令 FUSE 镜像我的根目录的位置吗?因为我发现两个基本函数 - *xmp_init() 和 main() - 非常简洁。
他们来了:
static void *xmp_init(struct fuse_conn_info *conn,
struct fuse_config *cfg)
{
(void) conn;
cfg->use_ino = 1;
cfg->entry_timeout = 0;
cfg->attr_timeout = 0;
cfg->negative_timeout = 0;
return NULL;
}
int main(int argc, char *argv[])
{
umask(0);
return fuse_main(argc, argv, &xmp_oper, NULL);
}
Run Code Online (Sandbox Code Playgroud)
其他函数只是 libfuse 接口的实现...之类的东西。我需要制作自己的残缺文件系统,我需要修改 passthrough.c,以便安装的文件系统将是一张白纸,我可以利用已实现的功能并管理文件和其他内容。
我正在尝试安装fuse-python包,当我运行时
python setup.py build
Run Code Online (Sandbox Code Playgroud)
它失败了,当我检查setup.py的内容时,我找到了这一行
if os.system('pkg-config --exists fuse 2> /dev/null') == 0
Run Code Online (Sandbox Code Playgroud)
这条线路失败了.当我检查PKG_CONFIG_PATH时
echo $PKG_CONFIG_PATH
Run Code Online (Sandbox Code Playgroud)
它什么都不打印.任何形式的帮助表示赞赏.提前致谢
可以使用带有FUSE的Google Drive在unix系统中构建文件系统吗?
在FUSE的实现xxx_readdir() 中,我使用下面的代码:
static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
off_t offset, struct fuse_file_info *fi)
{
DIR *dp;
struct dirent *de;
(void) offset;
(void) fi;
dp = opendir(path);
if (dp == NULL)
return -errno;
while ((de = readdir(dp)) != NULL) {
struct stat st;
memset(&st, 0, sizeof(st));
st.st_ino = de->d_ino;
st.st_mode = de->d_type << 12;
if (filler(buf, de->d_name, &st, 0))
break;
}
closedir(dp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,在foler上编译并执行:
./hello /tmp/hello/
Run Code Online (Sandbox Code Playgroud)
当我使用ls /tmp/hello/命令时,结果如下:
bin dev home …Run Code Online (Sandbox Code Playgroud) 我创建了一个docker容器,在其中安装了保险丝S3QL FS。这正在工作。
现在,我希望能够与主机或其他容器共享此安装点,但是它不起作用。
简而言之,我以这种方式运行容器:
docker run --rm -d -v /s3ql:/s3ql \
--cap-add SYS_ADMIN --device /dev/fuse \
--name myContainer \
myS3qlIimage mount.s3ql swiftks://url:container /s3ql
Run Code Online (Sandbox Code Playgroud)
docker exec myContainer ls /s3ql显示实际的S3QL内容,但/s3ql主机上为空。
到目前为止,我在仓库中的操作方式的更多详细信息:https : //gitlab.com/Salokyn/docker-s3ql
您认为有可能使它起作用吗?