Python 中是否有一个库允许在单个文件中管理虚拟文件系统?

Ama*_*anK 3 python filesystems virtual single-file python-3.x

我当时正在做一个程序。我认为我不需要在这里展示它,但我想知道是否可以创建存储在单个文件上的虚拟文件系统。例如,我有一个名为 的文件my_file_system.fs,有没有办法仅在该单个文件中创建虚拟文件系统。基本上:

/home/xcodz/
    |
    +--myfilesystem.fs
       |
       +--testdir
       +--test.txt
       +--downloads
          |
          +--example1.txt
Run Code Online (Sandbox Code Playgroud)

我基本上想要基本的文件系统接口。没有所有者、日期或其他元数据。Zip 是一个好主意,但它只是一次读取系统中的整个文件,并且不提供类似文件的接口。所以我需要一个非常基本的单个文件文件系统,在其中我可以像普通 IO 对象一样使用文件。

编辑 文件系统中存储的文件单个文件将有 3 GB 大,而且我没有那么多内存。TarFiles 似乎并没有让我的工作变得更好

编辑 我真的想说一些文件系统,就像带有虚拟盒的文件系统一样。

roo*_*oot 7

解决方案 #1 - TAR 文件

\n

TAR 文件基本上是单个文件中的 unix 文件系统。您可以使用tarfile在 python 中使用它们。

\n

优点:

\n\n

缺点:

\n
    \n
  • 没有非 POSIX 功能,例如加密或内存映射文件。
  • \n
  • 文件无法就地编辑,您必须提取它们然后重新添加它们。
  • \n
\n

解决方案#2 - 环回文件系统

\n

如果您可以要求完成安装才能运行您的程序,您可以使用环回文件系统

\n
$ truncate -s 100M /tmp/loopback.ext4\n$ mkfs -t ext4 /tmp/loopback.ext4\nmke2fs 1.45.5 (07-Jan-2020)\nDiscarding device blocks: done                            \nCreating filesystem with 25600 4k blocks and 25600 inodes\n\nAllocating group tables: done                            \nWriting inode tables: done                            \nCreating journal (1024 blocks): done\nWriting superblocks and filesystem accounting information: done\n\n$ sudo mkdir /mnt/loop\n$ sudo mount -o loop /tmp/loopback.ext4 /mnt/loop/\n$ df -T /mnt/loop\nFilesystem     Type  Size  Used Avail Use% Mounted on\n/dev/loop11    ext4   93M   72K   86M   1% /mnt/loop\n$ sudo tree /mnt/loop/\n/mnt/loop/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lost+found\n\n1 directory, 0 files\n
Run Code Online (Sandbox Code Playgroud)\n

优点:

\n
    \n
  • 像常规文件系统一样使用。
  • \n
  • 可从 python 进程外部、离线和在线访问。
  • \n
  • 非常容易调试。
  • \n
  • 您可以添加加密、使用内存映射文件以及真实文件系统的任何其他功能。
  • \n
\n

缺点:

\n
    \n
  • 需要根。
  • \n
  • 需要在运行进程之前安装。
  • \n
  • 需要卸载(至少,以防崩溃)。
  • \n
  • 必须预先设置大小,可以调整大小,但并非微不足道。
  • \n
  • 跨平台支持非常困难
  • \n
\n

解决方案 #3 - DYI 文件系统

\n

由于您最关心文件 I/O,因此可以使用BytesIO来实现。要支持文件系统层次结构中的多个文件,您可以将这些文件放入trie中。您需要序列化和反序列化所有这些,您可以使用pickle

\n

优点:

\n
    \n
  • 比基于 TAR 的解决方案更容易定制。
  • \n
  • 可以做成图书馆,美观且可重复使用。
  • \n
\n

缺点:

\n
    \n
  • 需要您进行更多编码。
  • \n
  • 每次都对整个数据结构进行pickle,这是不可扩展的。
  • \n
  • 如果您需要崩溃安全性,则需要在对 trie 或任何文件进行每次(相关)修改后进行 pickle。
  • \n
\n

选择什么

\n

由于您的需求非常基本,因此请选择#1 - TAR 文件。

\n