如何挂载压缩磁盘映像?


12

如果我做一个磁盘映像,压缩它的gzip / XZ /等是有办法的情况下直接解压首先其安装呢?

说我用过

sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz

如何挂载原始映像,而无需先创建未压缩的副本?

或者我已经用过

sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz

并且磁盘具有多个分区,这会使它变得更难吗?

对于整个磁盘的未压缩映像,则使用kpartxlosetup带有其-P标志的较新版本应为每个分区创建一个循环。

但是有没有办法挂载/设置/读取压缩的图像?

如果它不适用于gzip / xz,是否有任何适用的压缩方法?


注意重复的Q

目前建议的副本

不使用压缩也不是重复的

mount 不会单独安装压缩映像。


我可以告诉你,这绝对有可能。但是我无法告诉您atm的运行情况,因为说明位于2个外部HDD上,并且现在我都无法访问它们,但是我想让您知道它可以工作。当我有一个答案时,我会回来(没有其他人发布一个答案)。
UTF-8


1
@ UTF-8令人鼓舞,谢谢。仅供参考,最初的目标是对几乎是空的或具有许多易于压缩的数据的驱动器/分区进行较小的备份,并且无需写入大量额外数据或需要大量可用空间来提取它们即可读取它
Xen2050


2
@ bodhi.zazen赦免?也许我应该澄清一下,挂载不会自动解压缩图像,所以这个问号不是askubuntu.com/questions/69363的副本(也许我错过了这个玩笑,希望解压缩不是唯一的答案:)
Xen2050,2013年

Answers:


10

您可以squashfs用来压缩磁盘映像,然后挂载它们。

创建磁盘映像

如果还没有磁盘映像,请使用dd创建一个:

dd if=/dev/sda1 of=/tmp/sda1.img bs=4M

用squashfs压缩图像

安装squashfs

apt-get install squashfs-tools

压缩图像:

mksquashfs /tmp/sda1.img /tmp/sda1.squash.img

或流式压缩(不需要临时dd文件)

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

在UbuntuForums.org上terminator14的补充。定义/说明:

  • empty-dir-“源”目录。基本上在我们的例子中,只有一个空的目录可以满足mksquashfs的输入arg格式
  • squash.img -输出squashfs文件的目标和文件名
  • sda_backup.img -squashfs文件中dd备份的名称
  • f -指定sda_backup.img是常规文件(与目录,块设备或char设备相对)
  • 444 -squashfs映像内sda_backup.img文件的权限
  • root root-squashfs映像内sda_backup.img文件的UID和GID。可以用十进制数字或名称指定
  • dd if=/dev/sda bs=4M -dd命令用于读取我们要备份的设备

挂载图像

首先挂载squashfs映像:

mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash

这将显示未压缩的磁盘映像以供您挂载:

mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1

或者,如果它是一个完整的驱动器映像(分区),你可以使用losetup的DD图像附加到一个循环设备(可能是可选),然后kpartx -apartprobe找到与分区分开,单独的设备,甚至vgscan/ vgchange -ay如果有LVM。


2
我添加了一些即时squashfs信息,以避免需要临时的纯dd文件。用的squashfs伟大的答案,只是没有做更多的管型XZ / GZ格式
Xen2050

可以以某种方式使用包含多个分区的完整磁盘映像吗?
friederbluemle

在这里看到完整的磁盘:unix.stackexchange.com/questions/31669/...
HackerBoss

根据文件系统类型的不同,挂载可能需要以下ro,noload选项:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss

7

我能够获得NBD服务器来“提供” .gz或.xz文件的未压缩版本。我不确定它是否必须非常频繁地读取整个压缩文件(到目前为止,仅在ram中的小文件中进行了测试),但至少它可以工作而不必提取整个未压缩的副本。

即时查看gz / xz压缩的dd图像

  1. 安装nbdkit和客户端

    apt install nbdkit nbd-client
    
  2. 创建演示“ 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插件说明

  3. 在压缩映像上运行服务器

    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 可能/将显示太多状态消息,尤其是在阅读时。

  4. 运行客户端(在另一个终端/窗口中)

    sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
    

    -nofork类似于-no-fork以上,但我可以使用CTRL-C杀掉客户端,kill <pid>sudo kill <pid>。使用CTRL-C结束服务器将同时停止服务器和客户端。

  5. 观察到/dev/nbd0现在与UN-COMPRESSED图像相同

    $ sudo diff -s /dev/nbd0 ~/Downloads/50m
    Files /dev/nbd0 and /home/user/Downloads/50m are identical
    

    /dev/nbd0现在可以像未压缩的图像一样使用;安装,读/复制dd或使用kpartxpartprobevgscan/ vgchange,等等!

多亏了Unix&Linux上的Cristian Ciupitu,尽管花了更多的时间才能找到插件并将所有内容组合在一起。


在Fedora 31上nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xz,使用相同的客户端命令非常有效
EkriirkE

在Ubuntu xenial 16.04上,LTS nbdkit 1.1.11 使用旧的NBD协议,该协议与中使用的新NBD协议不同nbd-client 3.13,但是您可以在3.10之前使用nbd-client版本,例如nbd-client 3.8 from Ubuntu precise 12.04 old LTS[为了安全起见,仅在本地使用旧版本!]
user1742529

0

这是我的操作方式,不过不知道与之等效的控制台,

  • 将文件夹压缩为iso。 在此处输入图片说明
  • 用挂载.iso文件Disk Image Mounter在此处输入图片说明
  • Tada我打开压缩的iso时没有打开包装。 在此处输入图片说明

4
此方法是否实际压缩数据?看起来它使用的是普通的iso9660图像(通过文件滚动器?),而不使用压缩。我在全为零的100MB文件(dd if=/dev/zero和file-roller)上进行了尝试,实际上它增加了362k数据(我想应该是开销)。不过,谢谢,这个想法是正确的
-Xen2050

抱歉,我对压缩技术一无所知,但是如果您尝试其他压缩格式,我敢打赌,您也可以使用file-roller列出该压缩格式,但是如果您想读取该文件,则只需提取该特定文件。
hellozee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.