Canary Workshop

Whatever is worth doing at all is worth doing well

KVM VPS的全盘备份与恢复

事情的起因是,VPS又爆炸了。。。

虽然说整个服务器爆炸到必须重装的事情遇到的也不少了,但天天重装也不是个办法。现在很多VPS服务商不提供备份服务,仅自己备份数据仍然无法免除重装的麻烦。服务器恢复之后,痛定思痛,明白需要找到个合适的备份方法。于是有了通过SSH进行dd的方法。

之前也在网上读到过通过SSH进行dd操作,但经验证需要占用被备份机器的硬盘空间。VPS大多为单硬盘,而且希望达到的目标是像Ghost一样备份整块硬盘,这种方法显然不可行了。

事实上是当初理解错误,只需要

1
ssh root@remote "dd if=/dev/vda " | dd of=server.img status=progress

下方均不再需要


于是,我考虑到了曾经用过的一款工具:sshfs。正如其名,这是一个用SSH来挂载远程硬盘的工具,这就使得通过SSH进行dd且直接保存到远程机器成为可能。下面是具体操作方法:

这里假设的环境如下:
服务器A:被备份的机器,IP地址为192.168.1.101
服务器B:存储镜像的机器,IP地址为192.168.1.102

进行这种备份需要长时间占满服务器带宽,请防止违反TOS。另外,需要保证两台机器之间网络很好以防中途失败。

备份

为了备份完整的系统,这里需要启动一个Linux的Live CD作为临时操作环境。这里我使用Arch Linux的Live CD:

1
2
3
4
lsblk #确认待备份的磁盘块设备文件,这里假设为/dev/sda
pacman -Sy sshfs #安装SSHFS工具
sshfs someone@192.168.100.2:/somepath /mnt -C #挂载远程目录
dd if=/dev/sda of=/mnt/backup.img status=progress

这样备份就开始了。备份速度主要取决于网络速度。另外,在运行时,可能出现卡死情况。这时候不要贸然Ctrl+C,因为dd实际上可能正在运行。应当登录服务器B确认镜像大小是否在变化,以决定卡死后的操作。

还原

过程与备份相似,仅把ddifof颠倒即可。

这样一来,就成功实现了对服务器进行全盘备份,并可在必要的时候直接恢复。另外,可以在备份时的dd后面补充上tar指令来压缩镜像。