Xen*_*050 13 partitioning backup mount dd disk-image
如果我制作一个磁盘映像并用 gzip/xz/etc压缩它,有没有办法直接安装它而无需先解压缩它?
说我用过
sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz
Run Code Online (Sandbox Code Playgroud)
如何在不先创建未压缩副本的情况下安装原始图像?
或者我用过
sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz
Run Code Online (Sandbox Code Playgroud)
并且磁盘有多个分区,这会使其变得更难吗?
使用整个磁盘的未压缩映像,然后使用它的标志kpartx或更新版本losetup的-P标志应该为每个分区创建一个循环。
但是有没有办法挂载/丢失/读取压缩图像?
如果它不适用于 gzip/xz,是否有任何压缩方法可以使用?
当前建议的副本
不使用压缩,并且不是重复的。
mount 不会自行安装压缩图像。
Ebo*_*bob 11
您可以使用squashfs压缩磁盘映像然后挂载它们。
如果您还没有磁盘映像,请使用dd创建一个:
dd if=/dev/sda1 of=/tmp/sda1.img bs=4M
Run Code Online (Sandbox Code Playgroud)
安装squashfs:
apt-get install squashfs-tools
Run Code Online (Sandbox Code Playgroud)
压缩图像:
mksquashfs /tmp/sda1.img /tmp/sda1.squash.img
Run Code Online (Sandbox Code Playgroud)
mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'
Run Code Online (Sandbox Code Playgroud)
UbuntuForums.org 上对terminator14 的赞美。定义/解释:
empty-dir- “源”目录。基本上在我们的例子中,只是一个空目录来满足 mksquashfs 的输入 arg 格式squash.img - 输出 squashfs 文件的目的地和文件名sda_backup.img - squashfs 文件中 dd 备份的名称f - 指定 sda_backup.img 是常规文件(与目录、块设备或字符设备相对)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
Run Code Online (Sandbox Code Playgroud)
这将显示未压缩的磁盘映像供您安装:
mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1
Run Code Online (Sandbox Code Playgroud)
或者,如果它是一个完整的驱动器映像(分区),你可以使用losetup的DD图像附加到一个循环设备(可能是可选),然后kpartx -a或partprobe找到与分区分开,单独的设备,甚至vgscan/vgchange -ay如果有LVM。
我能够让 NBD 服务器“提供”未压缩版本的 .gz 或 .xz 文件。我不确定它是否必须经常读取整个压缩文件(到目前为止仅使用 ram 中的小文件进行了测试),但至少它无需提取整个未压缩副本即可工作。
安装 nbdkit 和客户端
apt install nbdkit nbd-client
Run Code Online (Sandbox Code Playgroud)创建演示“dd”样式文件 - 一个空的 50M 文件,带有 ext 文件系统并压缩它(仅用于测试可选)
fallocate -l 50M 50m
mkfs.ext3 -v 50m
Run Code Online (Sandbox Code Playgroud)
然后用 gzip 或 xz 压缩
gzip -vk9 50m
xz -v9k 50m
Run Code Online (Sandbox Code Playgroud)
注意: 一个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
Run Code Online (Sandbox Code Playgroud)
或 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
Run Code Online (Sandbox Code Playgroud)
该--no-fork告诉服务器“不进叉的背景”等等看可能的错误消息和与CTRL-C杀死它是一个更容易一些。
-v 可能/将显示太多状态消息,尤其是在阅读时。
运行客户端(在另一个终端/窗口中)
sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
Run Code Online (Sandbox Code Playgroud)
在-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
Run Code Online (Sandbox Code Playgroud)
/dev/nbd0现在可以像未压缩的图像一样使用;dd使用kpartx、partprobe、vgscan/vgchange等安装、读取/复制,或使用、、/等!
感谢Unix 和 Linux 上的 Cristian Ciupitu,尽管找到插件并将所有内容整合在一起需要更多的挖掘。
| 归档时间: |
|
| 查看次数: |
14415 次 |
| 最近记录: |