如何创建分区 (ext4) 的映像,然后将其挂载以浏览/恢复文件?

Sof*_*Kng 3 backup mount restore clone

我想备份我当前的 Debian 9 服务器操作系统分区,以便我可以安装 Debian 10 的干净版本。

但是,在安装 Debian 10 后,我想挂载我的旧操作系统映像,以便我可以根据需要浏览和恢复文件。

我以为我会使用 CloneZilla,但显然您不能直接安装它创建的图像?

cas*_*cas 5

作为 root,只需将cat分区转移到另一个分区:cat /dev/sdXn > /dev/sdYi

或到一个文件: cat /dev/sdXn > backup.img

或者到另一台机器上的文件或分区:cat /dev/sdXn | ssh user@host 'cat > backup.img'

您可以使用dd代替cat,但没有充分的理由这样做:

dd if=/dev/sdXn of=backup.img
Run Code Online (Sandbox Code Playgroud)

或者,如果您在复制时想要一个进度条和/或控制复制期间使用的缓冲量,您可以使用pv

pv /dev/sdXn > backup.img
Run Code Online (Sandbox Code Playgroud)

如果分区有读取错误,您可能需要使用ddrescue以下命令来代替cat

ddrescue /dev/sdXn /dev/sdYi
Run Code Online (Sandbox Code Playgroud)

或者

ddrescue /dev/sdXn backup.img
Run Code Online (Sandbox Code Playgroud)

ddrescue不会写入标准输出(或从标准输入读取),因此如果您希望backup.img在另一台机器上使用它,则必须scp随后复制它(例如使用 ),或将其写入 NFS 挂载。

或者,正如 user1133275 在评论中提到的,您可以使用进程替换

ddrescue /dev/sdXn >(ssh user@host 'cat > backup.img')
Run Code Online (Sandbox Code Playgroud)

最后,如果您想要一个压缩的、可安装的文件系统,您可以使用qemu-img

qemu-img convert -c -O qcow2 /dev/sdXn backup.qcow2
Run Code Online (Sandbox Code Playgroud)

安装它:

qemu-nbd --connect=/dev/nbd0 /path/to/backup.qcow2
mount /dev/nbd0 /mnt
Run Code Online (Sandbox Code Playgroud)

qemu-imgqemu-nbdqemu-utils包装中。顺便说一句,如果您拍摄了整个磁盘而不仅仅是一个分区的映像,则可以将旧系统作为新系统中的虚拟机运行。


另一种选择是安装第二个磁盘并在其上安装 Debian 10。然后您可以将旧驱动器安装在新系统上的某个位置。或者甚至在 Debian 9 和 Debian 10 之间进行双引导。


就我个人而言,我建议使用文件副本(例如使用tarrsync或什至cp -a)而不是图像备份。它更有用,可以轻松提取到您想要的任何地方,并且不会浪费空间或时间复制空或未使用的扇区。

映像备份(几乎总是)是备份文件系统的最糟糕方法。


Ste*_*itt 5

e2image 可用于创建 ext4 文件系统的映像,同时仅复制正在使用的扇区:

e2image -ra /dev/sda1 /path/to/file.img
Run Code Online (Sandbox Code Playgroud)

file.img 将创建为稀疏文件,因此它只会占用文件系统中真正使用的空间,即使其外观大小会反映文件系统的容量。

您还可以使用e2image生成 QCOW2 图像:

e2image -Qa /dev/sda1 /path/to/file.qcow2
Run Code Online (Sandbox Code Playgroud)

这将产生一个仍然可以挂载的紧凑文件。

两个图像都可以压缩,尽管这会导致无法直接挂载的文件。