![我可以通过 ssh 克隆正在运行的服务器的根文件系统吗?](https://linux22.com/image/1352813/%E6%88%91%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20ssh%20%E5%85%8B%E9%9A%86%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%A0%B9%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%90%97%EF%BC%9F.png)
我想备份正在运行的服务器。备份所有配置文件和所有内容,而无需关闭它。
我该如何实现这一点?尝试复制所有内容可以吗?因为我的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,在这种情况下,您将通过网络发送原始数据而不是压缩数据。
最后是nc
netcat。它接受来自前一个管道的输入,并将其放在网络上,指向名为目的地名称。
在接收端我们做相反的事情:
通过 nc -l 监听端口 4242 上的输入,
如果需要,请解压缩
最后将其写入文件。
重要的提示:
您可以在从要备份的磁盘启动时执行此操作。但不能保证文件系统在备份期间保持不变。因此,只有当您可以在磁盘以只读方式启动时才尝试此操作。(例如,仅使用 RAM 磁盘)
答案2
我会做的和亨内斯
我会创建一个 iso 文件,下载它,将其放在磁盘或 USB 上,然后将副本上传到 dropbox 以防万一。
mkisofs -V LABEL -r DIRECTORY | gzip > backup.iso.gz
我的朋友在 rackspace 上托管,他告诉我 rackspace 用户可以选择自动创建 iso 文件,并且如果他们要迁移到新服务器,他们可以使用rsync
或其他方式将旧备份存储在旧的云服务器上并将其关闭,他们仍然需要付费,但很便宜。
我不知道您的主机是否提供自动备份系统,或者您是否付费获得支持。如果这是您的第一次,那么值得询问他们并让他们这样做。