如何将 Debian 远程计算机上的整个磁盘添加或 cp 到本地计算机?

如何将 Debian 远程计算机上的整个磁盘添加或 cp 到本地计算机?

我读过这篇文章 -如何在本地机器上使用SSH添加远程磁盘并保存到本地磁盘

但是,以下代码不起作用:

"dd if=/dev/sda | gzip -1 -" | dd of=image.gz

因为我没有任何/dev/sda目录。我假设这是因为我使用的是 Debian 7.0。

非常感谢任何帮助获取我的 vps 的完整副本。

答案1

磁盘的设备名称取决于磁盘的类型(更准确地说,取决于磁盘连接到的总线和控制器的类型以及处理它们的驱动程序)。/dev/sda是 PC 中第一个磁盘的典型名称(可以根据驱动程序使用其他名称,例如对于某些旧类型的磁盘控制器或某些硬件 RAID 控制器)。在VPS中,磁盘通常是虚拟的,设备名称取决于虚拟化技术,例如/dev/vda/dev/xvda。您可以使用df或查找系统上的块设备名称lsblk

但不要用它来从实时系统进行备份!您很可能会得到不可读的备份。如果在进行备份时磁盘内容发生变化(这在实时系统上是不可避免的(例如,日志被写入某处)),那么您的映像将不一致 - 一点旧状态,一点新状态 -并且可能无法恢复。

进行备份的首选方法是创建一个快照,即文件系统的视图被冻结并且即使真实系统不断变化也不会改变。如何做到这一点以及是否可能,取决于您的系统的设置方式。某些文件系统类型(例如 btrfs 和 zfs)具有内置快照功能。 LVM 还可以制作卷的快照。

如果您无法制作快照(或者即使可以)制作一个文件级备份。来自发生更改的系统的文件级备份将不一致,但如果您不进行“重要”更改,则备份将可用。例如,如果您移动文件,如果它们碰巧从备份程序尚未遍历的目录移动到已遍历的目录,则它们可能会从备份中被忽略。另一方面,如果日志文件持续增长,您将拥有该文件的一些中间版本,但不会有损坏的文件系统映像。如果删除一个文件并创建另一个文件,您可能没有这些文件中的任何一个,或者只有其中之一,或者两者都有,但是您不会有旧文件的目录条目指向新文件中的某些数据。

您可以使用 GNU tar(作为 root!)来备份包含重要元数据的 Linux 系统。

ssh root@vps 'tar -cJf - --acls --selinux --one-file-system /' >vps.tar.xz

答案2

/dev/sda是直接通过 SCSI 驱动程序与磁盘进行通信时的约定。在评论中,您说您的磁盘位于/dev/vda:这样的命名在虚拟化解决方案中有些常见。如果我猜的话,我会说您正在谈论 KVM 管理的 VPS。

如果你想备份你的/dev/vda磁盘,只需使用 slm 的建议:

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=image.gz

这将/dev/vda完全备份,并且稍后您可以将dd其重新复制到另一个磁盘上,前提是那里有足够的空间。

fdisk -l工作正常,我的设备文件是/dev/vda1,但是它包含我的整个系统吗?

你读得太快了。/dev/vda1是磁盘的一个分区(一块)/dev/vda。需要注意三点:

  • 如果您的系统仅由位于 的根分区组成/dev/vda1,则备份/dev/vda1就足够了。您不需要备份整个驱动器(其中还包括磁盘“标头”)。
  • 如果您的系统跨越 上的多个分区/dev/vda,那么您必须获取dd所有分区才能获取所有内容(或者dd像上面那样获取整个磁盘)。
  • 您的系统可能还使用多个磁盘!这种情况比较少见,但我想它可能会发生。您可以将/和分区(例如,在和)/var上,并将主目录 ( ) 放在另一个驱动器 ( ) 上。/dev/vda/dev/vda1/dev/vda2/home/dev/vdb1/dev/vdb

就您而言,我想说lsblk这是理解您的设置的正确工具。运行它并查看该MOUNTPOINT列。只要那里有东西,您的系统就会使用该行上的分区。如果您想备份整个内容,您必须:

  • 将所有使用的分区 ( /dev/vdXY) 下载到文件。当分区安装在某个地方时,就会使用它。
  • 将所有使用过的磁盘 ( /dev/vbX) 下载到文件。当磁盘至少包含一个已用分区时,该磁盘就被使用。

换句话说,您可以运行:

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=disk1.gz
ssh user@remote "dd if=/dev/vdb | gzip -1 -" | dd of=disk2.gz
# ... and so on, once per used disk.

或(使用上面我的 2 磁盘示例):

ssh user@remote "dd if=/dev/vda1 | gzip -1 -" | dd of=root.gz
ssh user@remote "dd if=/dev/vda2 | gzip -1 -" | dd of=var.gz
ssh user@remote "dd if=/dev/vdb1 | gzip -1 -" | dd of=home.gz
# ... and so on, once per used partition.

单独备份分区的一个优点是,在需要时可以更轻松地在本地探索它们:

$ gzip -d home.gz                        # decompress the backup
$ sudo mkdir /mnt/home_bak               # create a mount point
$ sudo mount -o loop home /mnt/home_bak  # mount the backup
$ cd /mnt/home_bak                       # explore the home backup

最后,请记住,lsblk仅列出已安装的分区。如果您设置了额外的分区(启动时不会自动安装的分区),请记住包含这些分区。您很可能会记得在安装 VPS 时是否已这样做。

相关内容