作为 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-img
都qemu-nbd
在qemu-utils
包装中。顺便说一句,如果您拍摄了整个磁盘而不仅仅是一个分区的映像,则可以将旧系统作为新系统中的虚拟机运行。
另一种选择是安装第二个磁盘并在其上安装 Debian 10。然后您可以将旧驱动器安装在新系统上的某个位置。或者甚至在 Debian 9 和 Debian 10 之间进行双引导。
就我个人而言,我建议使用文件副本(例如使用tar
或rsync
或什至cp -a
)而不是图像备份。它更有用,可以轻松提取到您想要的任何地方,并且不会浪费空间或时间复制空或未使用的扇区。
映像备份(几乎总是)是备份文件系统的最糟糕方法。
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)
这将产生一个仍然可以挂载的紧凑文件。
两个图像都可以压缩,尽管这会导致无法直接挂载的文件。