一:备份数据到远程机器
若无法ssh连接到机器,无法启动等情况,可以通过救援系统备份数据。
1. 挂载需要备份的分区
# 创建挂载点并挂载vdb1(假设要备份vdb1)
mkdir /mnt/source
mount /dev/vdb1 /mnt/source
ls /mnt/source # 确认数据可见
2. 配置SSH免密登录到远程机器
# 生成SSH密钥(如果已有密钥可跳过)
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
# 将公钥复制到远程机器(替换user@remote_ip)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_ip
# 测试免密登录
ssh user@remote_ip "echo Connected!"
3. 使用rsync同步数据到远程机器
# 同步整个分区内容到远程机器的/backup目录(保留权限和时间戳)
rsync -avh --progress /mnt/source/ user@remote_ip:/backup/
# 参数说明:
# -a:归档模式(保留权限、属性、递归同步)
# -v:显示详细输出
# -h:人类可读格式
# --progress:显示实时传输进度
4. 验证备份完整性
# 在本地统计文件数量
ls -R /mnt/source | wc -l
# 在远程机器统计文件数量
ssh user@remote_ip "ls -R /backup | wc -l"
二:在新系统中恢复数据
1. 安装rsync和SSH客户端
# Debian/Ubuntu
apt update && apt install -y rsync openssh-client
# RHEL/CentOS
yum install -y rsync openssh-clients
2. 配置SSH免密登录到远程机器
# 重复第一阶段步骤2,生成密钥并复制到远程机器
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_ip
3. 从远程机器拉取数据
# 创建本地目标目录(例如恢复到/home/user/data)
mkdir -p /home/user/data
# 使用rsync反向同步数据
rsync -avh --progress user@remote_ip:/backup/ /home/user/data/
注:可以整机备份整机恢复,即恢复到目录设置为/
即可,但是需注意会覆盖当前系统信息,造成一些莫名其妙的bug以及多处会有权限问题,谨慎考虑
4. 修复权限与所有权
# 假设数据原属用户为user,用户组为user
chown -R user:user /home/user/data
chmod -R 755 /home/user/data # 根据实际需求调整权限
5. 验证恢复结果
# 对比本地和远程文件数量
ls -R /home/user/data | wc -l
ssh user@remote_ip "ls -R /backup | wc -l"
关键注意事项
网络连通性
确保救援模式和重装后的系统均可访问远程机器(测试
ping remote_ip
)。如果使用防火墙,开放SSH端口(默认22)
ufw allow 22 # Debian/Ubuntu firewall-cmd --add-service=ssh --permanent && firewall-cmd --reload # RHEL/CentOS
备份一致性
如果数据在备份期间可能变动,可先停止相关服务(如数据库、Web服务)。
空间不足处理
检查远程机器磁盘空间
ssh user@remote_ip "df -h /backup"
增量备份(长期维护)
后续增量备份只需追加
--delete
参数删除远程已不存在的文件rsync -avh --progress --delete /mnt/source/ user@remote_ip:/backup/
常见问题处理
1. GRUB 无法启动
Linux实例的grub配置中有一项是根文件系统参数,如果此参数未指向系统盘上根文件系统所在的分区(例如/dev/vda1),或者所指定的UUID与系统盘上的根文件系统的UUID不匹配,那么系统启动时可能由于内核无法正确加载根文件系统,从而导致系统启动失败。
所以简单来说就是分区指向问题,依旧是进入救援系统先
挂载你的系统分区到
/mnt
mount /dev/vdb1 /mnt
确定你的系统所在位置,我的是/
所以我直接挂载/
,此处只做演示,需根据实际考虑
如果有 boot 分区(一般在 vdb15 的 124M 的分区),挂载它:
mount /dev/vdb15 /mnt/boot/efi
(如果你不确定它是不是 EFI 分区,可以用 ls /mnt/boot/efi
看里面是否有内容。)
挂载必要的系统目录用于 chroot:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
进入 chroot 环境:
chroot /mnt
你应该看到变成了类似:
[root@你的主机名 /]#
确认你现在在原系统环境中,执行:
ls /
应该能看到 /home
, /etc
, /var
等你原系统的文件夹。
重新安装 grub 到系统盘 vdb:
grub2-install /dev/vdb
重新生成 grub 配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
退出 chroot 并重启系统:
exit
reboot
1. 报错Permission denied (publickey)
检查
~/.ssh/authorized_keys
权限chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
2. 部分文件同步失败
添加
--ignore-errors
跳过错误文件rsync -avh --progress --ignore-errors /mnt/source/ user@remote_ip:/backup/
3. 加速大文件传输
使用
-z
启用压缩(适合低带宽环境)rsync -avhz --progress /mnt/source/ user@remote_ip:/backup/