【问题标题】:Programming a loopback-device consisting of several files in Linux在 Linux 中编写由多个文件组成的环回设备
【发布时间】:2010-12-23 14:46:32
【问题描述】:

嘿嘿,

在 Linux 中使用 losetup 模拟块设备的文件相对容易:

如果我想根据我从中获取内容的几个文件来编写自己的块设备,谁能给我一个提示,告诉我要寻找什么?为了您的理解,我想假设从 file1 中获取字节 1-500 和 1.000-3.000,从 file2 中获取字节 501-999 和字节 3.001 到 5.000,以将它们作为组合块设备提供。我最喜欢的编程语言是 Python,我想尽可能在​​用户空间编写我的程序。

对于 Windows,我找到了这样的实现。它被称为 FileDisk 和 HttpDisk,可以在这里找到:

提前致谢和问候, 雷纳

【问题讨论】:

    标签: linux file raid block-device


    【解决方案1】:

    您无需编写任何程序。您可以使用 Linux 的多设备(a.k.a.md)子系统为自己构建一个由许多较小设备组成的块设备。

    为此,您可以使用mdadm 将较小的设备组装成LINEAR RAID 设备。

    更新
    所以这就是我所做的:

    $ cd /images
    $ dd if=/dev/zero bs=1M count=100 of=a.img
    $ dd if=/dev/zero bs=1M count=50 of=b.img
    $ dd if=/dev/zero bs=1M count=150 of=c.img
    $ losetup -f
    /dev/loop0
    $ for i in a b c; do losetup -f $i.img; done
    $ mdadm --build /dev/md0 -l linear -n 3 /dev/loop[012]
    mdadm: array /dev/md0 built and started.
    $ cat /proc/mdstat
    Personalities : [linear] 
    md0 : active linear loop2[2] loop1[1] loop0[0]
          307200 blocks super non-persistent 64k rounding
    

    请注意,我使用$ 作为提示符,以免混淆自动语法高亮;)

    就这么简单。

    干杯。

    PS:现在这真的符合超级用户的条件,不是吗?

    【讨论】:

    • Hej,感谢您的回答。但我认为这个解决方案不支持我描述的场景。实际上我忘了提到我想编写一个像覆盖块设备这样的东西,它有一些逻辑来决定它从哪个文件中获取它的内容。到目前为止,我会去NBD。还有一些 Python 实现(例如lists.canonical.org/pipermail/kragen-hacks/2004-May/000397.html)。
    • dubbaluga:不客气。你谈到了编程,但我认为这对 md 来说太过分了;)。祝你好运!
    【解决方案2】:

    如果您想通过简单的 API 完全停留在用户空间中,我强烈建议您使用 FUSE,这将是使用 Python 的 relatively simple to do

    【讨论】:

    • FUSE 是文件系统层,而不是块设备层。
    • 是的,FUSE 是用户空间中的文件系统。好吧,CUSE 现在允许在用户空间中使用字符设备,但是没有 BUSE。通常人们只是为此破解 NBD。
    • 非常感谢您的建议!现在我会去NBD。这似乎是最简单的解决方案,正如 Fritschy 的帖子所回复的那样,也存在 Python 实现。
    猜你喜欢
    • 2011-07-27
    • 2016-07-27
    • 2011-01-01
    • 2014-08-21
    • 1970-01-01
    • 2012-06-05
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多