一:备份数据到远程机器

若无法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"

关键注意事项

  1. 网络连通性

    • 确保救援模式和重装后的系统均可访问远程机器(测试ping remote_ip)。

    • 如果使用防火墙,开放SSH端口(默认22)

      ufw allow 22  # Debian/Ubuntu
      firewall-cmd --add-service=ssh --permanent && firewall-cmd --reload  # RHEL/CentOS
  2. 备份一致性

    • 如果数据在备份期间可能变动,可先停止相关服务(如数据库、Web服务)。

  3. 空间不足处理

    • 检查远程机器磁盘空间

      ssh user@remote_ip "df -h /backup"
  4. 增量备份(长期维护)

    • 后续增量备份只需追加--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/

人生除死无大事