【问题标题】:How to mount a memory filesystem onto a directory如何将内存文件系统挂载到目录
【发布时间】:2020-01-27 23:29:18
【问题描述】:

我有一个 Python 中的内存文件系统,按以下方式创建:

import fs
mem_fs = fs.open_fs('mem://')
mem_fs.makedirs('/dir1')
with mem_fs.open('/dir1/file1', 'w') as file1:
    file1.write('test')

我想将此文件系统挂载到我的操作系统文件系统中的一个目录(例如,/home/user/mem_dir)。我可以创建一个引用 OS 文件系统的对象:

os_fs = fs.open_fs('/home/user/mem_dir')

但是我不知道如何将 mem_fs 挂载到 os_fs 上。我尝试使用 MountFS 类,但它只创建一个虚拟文件系统。我需要以其他外部应用程序(例如,nautilus)能够看到它并将文件复制到/从那里复制文件的方式创建一个安装点。任何反馈将不胜感激。

【问题讨论】:

  • 为什么不直接挂载内核提供的ramfs 卷?
  • @Klaus 你的意思是使用 mount 命令吗?我希望能够在 Python 中做所有事情,因为这只是我整个代码的一小部分。
  • 您可以查看以下内容:stackoverflow.com/a/29156997/6744133

标签: python python-3.x mount pyfilesystem


【解决方案1】:

我有同样的要求,我就是这样处理的

from fs.tempfs import TempFS
tmp = TempFS(identifier='_toto', temp_dir='tmp/ramdisk/')

它确实 mount 创建了一个目录,具有以 _toto 为后缀的任意名称

tmp/ramdisk ❯❯❯ ls
tmpa1_4azgi_toto

它完全可以作为主机中的标准文件系统在您的 python 代码中使用

tmp/ramdisk/tmpa1_4azgi_toto ❯❯❯ mkdir test                                                                    
tmp/ramdisk/tmpa1_4azgi_toto ❯❯❯ ls                                                                            
test

 >>> tmp.listdir('/')
['test']

它看起来很神奇,因为它根本没有出现在挂载主机的文件系统中

 ❯❯❯ df -ah | grep -E '(ramdisk|tmp)'                                              
tmpfs                       785M    1,7M  783M   1% /run
tmpfs                       3,9G    195M  3,7G   5% /dev/shm
tmpfs                       5,0M    4,0K  5,0M   1% /run/lock
tmpfs                       3,9G       0  3,9G   0% /sys/fs/cgroup
tmpfs                       785M     36K  785M   1% /run/user/1000

当您的代码结束或调用时,它会完全消失

>>> tmp.close()

tmp/ramdisk ❯❯❯ ls
tmp/ramdisk ❯❯❯

干杯

【讨论】:

  • 这可能达不到预期的效果。虽然 Linux 中的“tmpfs”表示 ramdisk,即存储在内存中的文件系统,但 fs.tempfs 似乎只是指临时的磁盘文件系统。编辑:事实证明 /tmp 是 ramdisk 还是普通磁盘取决于操作系统。
  • 这不在内存中。如果我关闭 python 会话,目录仍然存在,如果我重新启动目录仍然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2011-07-10
  • 2022-08-22
  • 1970-01-01
相关资源
最近更新 更多