晚上打算在机器A上装些软件,但又担心装完后没成功把之前的软件环境弄乱,因此在一些不怎么用的机器上折腾了下备份还原,总结成本帖。
为了在机器A上备份,需要另一台机器B,不一定要服务器,可以是你本地机器。如果是本地windows机器,建议在git bash上运行命令,git bash可以在这里下载。
首先,为了避免出现数据不一致的问题,备份和还原都要在A机器处于救援模式下,也就是需要先把A机器重启到救援模式,一般商家都提供这个基础功能的。这点麻烦相比重装很多软件来说要小得多,如果你觉得这一步太麻烦,那么可以退出本帖了
因为我测试开机状态下热备份会随机出现还原时无法开机的情况,如果你有好的解决思路可以留言讨论 
机器A处于救援模式下,判断硬盘
首先,使用 fdisk -l 查看挂载的硬盘,比如 /dev/sda /dev/vda /dev/hdb 等,一般都是最大的那一个,根据容量很容易判断。这里假设是sda,注意不是sda1之类的,带数字的是分区
备份
A机器进救援模式,判断硬盘,在B机器执行命令
# server_ip 替换成机器A的ip
ssh -p 22 root@server_ip "dd if=/dev/sda bs=32M status=progress | gzip -1 - " > backup.gz
还原
A机器进救援模式,判断硬盘,在B机器执行命令
# server_ip 替换成机器A的ip
dd if=./backup.gz bs=32M status=progress | ssh -p 22 root@server_ip "gzip -d | dd of=/dev/sda ; reboot"
注意,还原的进度条跑完可能会在最后99%卡一会,很正常这是因为很多0x00字节需要填充到硬盘
dd有风险,在实际进行还原操作前一定要确认命令没问题

学习了
好帖帮顶
谢谢分享