我可以通过 ssh 克隆正在运行的服务器的根文件系统吗?

我可以通过 ssh 克隆正在运行的服务器的根文件系统吗?

我想备份正在运行的服务器。备份所有配置文件和所有内容,而无需关闭它。

我该如何实现这一点?尝试复制所有内容可以吗?因为我的root目录有问题。

我不想做大量的实验,因为它有重要的配置。

我正在尝试通过 来完成所有这些操作ssh。我该如何进行备份?

有任何想法吗?

答案1

如果您想要备份所有数据,那么您可以通过 ssh 登录服务器,然后简单地复制所有文件。例如使用scp或使用rsync

如果你使用,你甚至可以复制所有内容,包括操作系统文件
rsync -zvr --exclude /dev/ / destination_computer_name_or_ip

-r:递归
-v:详细
-z:启用压缩

请注意,这不会复制引导记录。要做到这一点,您需要复制整个磁盘,并且要在磁盘未安装时执行此操作。(阅读:关闭您要完全备份的机器并从 liveCD 启动或从另一个分区启动。)

然后使用 dd 读取整个驱动器。

示例代码:

存储备份的 PC 为:
nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo

并在 PC 上进行备份:
dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

dd 将从磁盘读取。整个磁盘,包括引导扇区和空扇区。
在示例中,我们将其设置为第一个磁盘,如 sd 所示A. 将第二个磁盘调整为 sdb,将第三个磁盘调整为 sdc 等等。

我们输出到标准输出,由 表示-

bs=1M 设置块大小。您不需要这个,但如果没有,就会有很多小读取和巨大的开销。将其设置为大于 512 字节或 4k 的值将加快速度。

接下来,我们通过|gzip 管道传输输出以对其进行压缩。这假设您的 CPU 比网络快得多。您可以跳过源上的 gzip 和目标上的 gunzip,在这种情况下,您将通过网络发送原始数据而不是压缩数据。

最后是ncnetcat。它接受来自前一个管道的输入,并将其放在网络上,指向名为目的地名称


在接收端我们做相反的事情:

通过 nc -l 监听端口 4242 上的输入,

如果需要,请解压缩

最后将其写入文件。


重要的提示

您可以在从要备份的磁盘启动时执行此操作。但不能保证文件系统在备份期间保持不变。因此,只有当您可以在磁盘以只读方式启动时才尝试此操作。(例如,仅使用 RAM 磁盘)

答案2

我会做的和亨内斯

我会创建一个 iso 文件,下载它,将其放在磁盘或 USB 上,然后将副本上传到 dropbox 以防万一。

mkisofs -V LABEL -r DIRECTORY | gzip > backup.iso.gz

我的朋友在 rackspace 上托管,他告诉我 rackspace 用户可以选择自动创建 iso 文件,并且如果他们要迁移到新服务器,他们可以使用rsync或其他方式将旧备份存储在旧的云服务器上并将其关闭,他们仍然需要付费,但很便宜。

我不知道您的主机是否提供自动备份系统,或者您是否付费获得支持。如果这是您的第一次,那么值得询问他们并让他们这样做。

相关内容