如何在 Ubuntu 中安装和使用 cloop 设备?

如何在 Ubuntu 中安装和使用 cloop 设备?

我需要能够即时挂载和读取压缩图像dd。我想这cloop就是我所需要的。但我没有看到它/lib/modules,无论如何,我想先知道它是如何工作的。

有人已经设法装载压缩图像并通过 动态读取它了cloop吗?

答案1

不幸的是,Ubuntu 12.04不包含cloop.ko所需的模块压缩环回设备。但是,将其添加到正在运行的内核中非常容易。

我在这一页(不确定它是否是最新版本,但编译并运行良好),所以我使用 wget 并解压缩这个文件.configure似乎已经包含在Makefile正在运行的 so 中:

make

足以正确构建模块。该软件包还包含advfs实用程序,该命令的原始名称create_compressed_fs,其概要可以找到这里

我复制了模块/lib/modules

sudo cp cloop.ko /lib/modules/`uname -r`

但此步骤不是强制性的。然后,您可以选择使用或安装提供相同实用程序但名称不同的advfsubuntu 包。我选择了包选项,因为它更简洁(我还建议安装以显示漂亮的进度条):cloop-utilspv

sudo aptitude install cloop-utils pv

现在可以通过实用程序创建压缩图像create_compressed_fs,然后将其分配给设备,/dev/clooop0并将文件名作为参数传递给模块cloop.ko。老实说,我没有找到更好的方法将文件名传递给模块cloop,如果想要在不同的时间范围内安装多个压缩图像,这会带来问题。但是,目前我没有遇到这个问题,所以这个脚本已经足以满足我的需求了。

#/bin/sh -e

INPUTDEVICE="/dev/sda1"
OUTPUTFILE="/tmp/dev-sda1.cloop.img"
BLOCKSIZE="1048576"
NUMBLOCKS="2000"
COMPRESSIONLEVEL="9"
#COMPRESSIONLEVEL="-1" # for 7zip compression (untested)
CLOOPLOGFILE="/tmp/cloop-creation.log"
CLOOPBLOCKSIZE="64K"

dd if="$INPUTDEVICE"  bs="$BLOCKSIZE" count="$NUMBLOCKS" | pv -s "$((NUMBLOCKS * BLOCKSIZE))" -Wpetr | create_compressed_fs -L "$COMPRESSIONLEVEL" -B "$CLOOPBLOCKSIZE" -s "$NUMBLOCKS"M - "$OUTPUTFILE" > "$CLOOPLOGFILE" 2>&1

insmod /lib/modules/`uname -r`/cloop.ko file="$OUTPUTFILE"

mount -o ro /dev/cloop0 /mnt/cloop

在 Knoppix wiki 上可以找到有关cloop设备的一些其他信息,这里

相关内容