如果我制作磁盘映像并用gzip / xz / etc压缩,有没有一种方法可以直接挂载它而无需先将其解压缩?
说我用过
sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz
如何挂载原始映像,而无需先创建未压缩的副本?
或者我已经用过
sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz
并且磁盘具有多个分区,这会使它变得更难吗?
对于整个磁盘的未压缩映像,则使用kpartx
或losetup
带有其-P
标志的较新版本应为每个分区创建一个循环。
但是有没有办法挂载/设置/读取压缩的图像?
如果它不适用于gzip / xz,是否有任何适用的压缩方法?
目前建议的副本
不使用压缩,也不是重复的。
mount
不会自行装载压缩的映像。
我能够获得NBD服务器来“提供” .gz或.xz文件的未压缩版本。我不确定它是否必须非常频繁地读取整个压缩文件(到目前为止,仅使用ram中的小文件进行了测试),但是至少它可以工作而不必提取整个未压缩的副本。
安装nbdkit和客户端
apt install nbdkit nbd-client
创建演示“ dd”样式文件-具有ext文件系统的空50M文件并压缩(仅用于测试)
fallocate -l 50M 50m
mkfs.ext3 -v 50m
然后使用gzip或xz压缩
gzip -vk9 50m
xz -v9k 50m
注意:的xz
选项--block-size=16MiB
应该可以提供更好的随机访问性能,但是要以减少压缩(可能为1%?)为代价。请参阅nbdkit的xz插件说明。
在压缩映像上运行服务器
nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
或对于xz
nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
该命令--no-fork
告诉服务器“不要在后台派生”,因此查看可能的错误消息并使用CTRL-C杀死它要容易一些。
-v
可能/将显示太多状态消息,尤其是在阅读时。
运行客户端(在另一个终端/窗口中)
sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
在-nofork
类似于-no-fork
以上,但我可以不使用CTRL-C杀掉客户端,kill <pid>
或sudo kill <pid>
。使用CTRL-C结束服务器将同时停止服务器和客户端。
观察到/dev/nbd0
现在与UN-COMPRESSED图像相同
$ sudo diff -s /dev/nbd0 ~/Downloads/50m
Files /dev/nbd0 and /home/user/Downloads/50m are identical
/dev/nbd0
现在可以像未压缩的图像一样使用;安装,读/复制dd
或使用kpartx
,partprobe
,vgscan
/ vgchange
,等等!
多亏了Unix&Linux上的Cristian Ciupitu,尽管花了更多的时间才能找到该插件并将所有内容组合在一起。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句