【Linux 服务器磁盘映像备份与恢复实战指南】虚拟机备份,物理机上云都可以用这套方案!

Linux 服务器磁盘映像备份与恢复实战指南

背景

在服务器运维中,磁盘健康度下降可能导致数据丢失风险,特别是在未配置 RAID 的情况下。针对这种情况,备份磁盘数据并恢复到新设备是确保数据安全的关键。本文记录了使用 dd 命令通过 NFS 实现全盘映像备份,并将备份恢复到另一台服务器的裸盘(/dev/sdb)的完整流程。恢复后,系统进入 initramfs 紧急模式,通过 fsck 修复文件系统问题,最终成功启动系统的操作步骤。

本文适用于以下场景:

  • 系统:Ubuntu(本文基于 Ubuntu 22.04,内核 6.2)
  • 需求:全量备份磁盘数据,并在另一台服务器上恢复,保持系统和数据完整
  • 环境:源服务器磁盘健康度低,目标服务器使用裸盘,无 RAID 配置

环境准备

  • 源服务器

    • 系统:Ubuntu 22.04(或其他版本)
    • 磁盘:/dev/sda(待备份磁盘,健康度不足 1%)
    • 网络:可访问 NFS 服务器
  • 目标服务器

    • 系统:Ubuntu 22.04(或其他版本)
    • 磁盘:/dev/sdb(裸盘,用于恢复映像)
    • 原系统盘:/dev/sda(恢复后移除)
  • NFS 服务器

    • 提供充足存储空间,用于存放备份映像
  • 工具

    • dd:用于全盘映像备份和恢复
    • fsck:用于修复文件系统
    • nfs-common:用于挂载 NFS
  • 其他

    • Ubuntu Live USB(用于修复或验证)
    • 网络配置确保两台服务器与 NFS 通信正常

操作步骤

1. 确认磁盘健康状态

在源服务器上,检查磁盘健康状态以评估备份的紧急程度。

sudo apt update
sudo apt install smartmontools
sudo smartctl -a /dev/sda
  • 查看 SMART 输出中的 Reallocated_Sector_CtWear_Leveling_Count 等指标,确认磁盘健康度。
  • 如果健康度低于 1%,立即停止不必要的写操作,进入备份流程。

2. 挂载 NFS 并备份磁盘映像

为确保备份安全,将磁盘映像存储到 NFS 服务器。

2.1 配置 NFS 客户端

安装 NFS 客户端工具并挂载 NFS 共享目录:

sudo apt install nfs-common
sudo mkdir /mnt/nfs
sudo mount -t nfs <NFS_SERVER_IP>:/path/to/share /mnt/nfs
  • 替换 <NFS_SERVER_IP>/path/to/share 为实际 NFS 服务器地址和共享路径。

  • 验证挂载:

    df -h /mnt/nfs
    
2.2 使用 dd 创建全盘映像

停止可能导致磁盘写入的服务(如数据库、Web 服务器)以确保数据一致性:

sudo systemctl stop mysql apache2  # 根据实际情况调整

执行 dd 备份整个磁盘:

sudo dd if=/dev/sda of=/mnt/nfs/full_backup.img bs=64K status=progress
  • if=/dev/sda:源磁盘设备。
  • of=/mnt/nfs/full_backup.img:备份文件存储路径。
  • bs=64K:设置块大小以提高效率。
  • status=progress:显示备份进度。

注意

  • 确保 NFS 存储空间足够(至少等于源磁盘容量)。

  • 可选:备份后生成校验和以验证完整性:

    md5sum /mnt/nfs/full_backup.img > /mnt/nfs/full_backup.img.md5
    

3. 在目标服务器上恢复磁盘映像

将备份映像恢复到目标服务器的裸盘(/dev/sdb)。

3.1 确认目标磁盘

在目标服务器上,确认目标磁盘为裸盘(/dev/sdb):

sudo fdisk -l

如果磁盘已有分区,建议清空:

sudo wipefs -a /dev/sdb
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=100
3.2 挂载 NFS

在目标服务器上挂载 NFS 以访问备份映像:

sudo apt install nfs-common
sudo mkdir /mnt/nfs
sudo mount -t nfs <NFS_SERVER_IP>:/path/to/share /mnt/nfs

验证备份文件存在:

ls /mnt/nfs/full_backup.img
3.3 恢复映像

将备份映像恢复到 /dev/sdb

sudo dd if=/mnt/nfs/full_backup.img of=/dev/sdb bs=64K status=progress
  • 确保目标磁盘容量不小于源磁盘。

  • 验证恢复完成:

    sudo fdisk -l /dev/sdb
    

4. 移除原系统盘并重启

为使用恢复的磁盘作为系统盘,移除目标服务器的原系统盘(/dev/sda)。

  1. 关机:

    sudo poweroff
    
  2. 物理移除 /dev/sda(或在 BIOS 中调整启动顺序,确保从 /dev/sdb 启动)。

  3. 重启服务器:

    • 如果使用 BIOS,进入 BIOS 设置,将 /dev/sdb 设置为首选启动设备。
    • 如果使用 UEFI,确保 EFI 分区正确配置。

5. 处理 initramfs 紧急模式

重启后,系统进入 initramfs 紧急模式(提示类似 (initramfs)),通常是由于文件系统错误或分区配置问题。

5.1 运行 fsck 修复文件系统

initramfs 提示符下,执行以下命令:

fsck /dev/sda1
  • 替换 /dev/sda1 为根分区(恢复后 /dev/sdb 可能被识别为 /dev/sda)。

  • 如果提示修复错误,按 y 确认。

  • 如果需要检查所有分区:

    fsck -A -y
    
5.2 确认修复并重启

修复完成后,退出 initramfs

exit

系统将尝试继续启动。如果仍无法进入正常模式,重启:

reboot

6. 验证系统恢复

重启后,检查系统是否正常启动:

  1. 确认登录

    • 登录系统,验证用户和数据是否完整。

    • 检查关键目录:

      ls /bin /sbin /home
      
  2. 检查 GRUB

    • 确保 GRUB 正常加载:

      cat /boot/grub/grub.cfg
      
    • 如果 GRUB 配置缺失,重新安装:

      sudo grub-install /dev/sda
      sudo update-grub
      
  3. 检查文件系统

    df -h
    sudo fsck /dev/sda1
    
  4. 验证服务

    • 检查关键服务是否正常运行:

      systemctl status
      

注意事项

  1. 备份完整性

    • 备份前停止写操作,确保映像一致性。
    • 验证备份文件完整性(使用 md5sum 或挂载映像检查)。
  2. 目标磁盘准备

    • 确保目标磁盘为空,避免覆盖已有系统导致冲突。
    • 目标磁盘容量需大于或等于源磁盘。
  3. NFS 配置

    • 确保 NFS 服务器稳定,网络带宽足够,避免备份或恢复中断。
    • 检查 NFS 权限,确保目标服务器有写权限。
  4. 分区和 UUID

    • 恢复后检查 /etc/fstab 中的 UUID 是否与 blkid 输出一致:

      blkid
      cat /etc/fstab
      
    • 如有不匹配,编辑 /etc/fstab 修正。

  5. GRUB 配置

    • 如果系统无法启动,可能需从 Ubuntu Live USB 重新安装 GRUB:

      sudo mount /dev/sda1 /mnt
      sudo mount --bind /dev /mnt/dev
      sudo mount --bind /proc /mnt/proc
      sudo mount --bind /sys /mnt/sys
      sudo mount --bind /run /mnt/run
      sudo chroot /mnt
      grub-install /dev/sda
      update-grub
      
  6. 硬件兼容性

    • 确保目标服务器硬件(如磁盘控制器、CPU)与源系统兼容。

    • 如果内核版本不匹配,可能需重新安装内核:

      apt install --reinstall linux-image-$(uname -r)
      

总结

通过 dd 命令结合 NFS 实现全盘映像备份与恢复,是一种高效的服务器数据迁移方案。本文详细记录了从备份到恢复的完整流程,以及处理 initramfs 紧急模式的修复方法。关键点包括:

  • 使用 dd 确保全量备份,结合 NFS 提供可靠存储。
  • 恢复到裸盘并移除原系统盘,简化启动配置。
  • 通过 fsck 修复文件系统,解决 initramfs 问题。

后续建议

  • 配置 RAID(如 RAID 1)以提高数据冗余。
  • 定期验证备份完整性,建立自动化备份机制(如 cron + rsync)。
  • 使用监控工具(如 smartmontools)跟踪磁盘健康状态。

希望这篇实战指南能为你的服务器运维提供参考!如果有其他问题,欢迎留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 Linux 的 set、env 和 printenv 命令

在 Linux 和类 Unix 系统中&#xff0c;环境变量是配置和管理 Shell 及进程行为的核心机制。set、env 和 printenv 是与环境变量交互的三个重要命令&#xff0c;每个命令都有其独特的功能和用途。本文将详细探讨这三个命令的区别&#xff0c;帮助大家更好地理解和使用这些命令。…

icexmoon-tree

icexmoon-tree 一个轻量级的 Java 工具库&#xff0c;提供树形结构操作功能。 安装 <dependency><groupId>cn.icexmoon</groupId><artifactId>icexmoon-tree</artifactId><version>1.0.0</version> </dependency>使用 构建…

机器学习在智能水泥基复合材料中的应用与实践

“机器学习在智能水泥基复合材料中的应用与实践” 课程 内容 机器学习基础模型与复合材料研究融合 机器学习在复合材料中的应用概述机器学习用于复合材料研究的流程复合材料数据收集与数据预处理 实例&#xff1a;数据的收集和预处理 复合材料机器学习特征工程与选择 实例&a…

微软 Build 2025:开启 AI 智能体时代的产业革命

在 2025 年 5 月 19 日的微软 Build 开发者大会上&#xff0c;萨提亚・纳德拉以 "我们已进入 AI 智能体时代" 的宣言&#xff0c;正式拉开了人工智能发展的新纪元。这场汇聚了奥特曼、黄仁勋、马斯克三位科技领袖的盛会&#xff0c;不仅发布了 50 余项创新产品&#…

[Java恶补day6] 15. 三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1&a…

《黄帝内经》数学建模与形式化表征方式的重构

黄帝内经的数学概括&#xff1a;《黄帝内经》数学建模与形式化表征方式的重构 摘要&#xff1a;《黄帝内经》通过现代数学理论如动力系统、代数拓扑和随机过程&#xff0c;被重构为一个形式化的人体健康模型。该模型包括阴阳动力学的微分几何、五行代数的李群结构、经络拓扑与同…

理论篇五:如何优化Webpack的打包速度

优化 Webpack 打包速度是提升前端开发效率的关键。以下是 10 种核心优化策略,涵盖开发和生产环境,附带具体配置和实测效果对比: 一、缩小文件搜索范围 1. 指定解析路径(Resolve) resolve: {extensions: [.js, .jsx],

[Windows] 游戏常用运行库- Game Runtime Libraries Package(6.2.25.0409)

游戏常用运行库 合集 整合了许多游戏会用到的运行库&#xff0c;支持 Windows XP – Windows 11 系统&#xff0c;并且支持自动检测系统勾选推荐的运行库&#xff0c;方便快捷。 本版特点&#xff1a; By&#xff1a;mefcl 整合常见最新游戏所需运行库 根据系统自动勾选推荐…

JDK8中的 Stream流式编程用法优化(工具类在文章最后)

Java从JDK8起提供了Stream流这个功能&#xff0c;于是项目里出现了大量基于Stream流的写法。随着项目的进行&#xff0c;慢慢的代码中铺天盖地的都是下面的写法&#xff1a; List<User> userList null;if (condition) {userList new ArrayList<>();userList.add(…

uni-app学习笔记十二-vue3中组件传值(对象传值)

一.单对象传值 父组件定义对象的值 <template><view><UserInfo :obj"userinfo"></UserInfo></view> </template><script setup>import {ref} from "vue"const userinfo ref({name:"蛛儿",avatar:&…

UV-python环境管理工具 入门教程

在学习使用 MCP 的时候接触到了 UV 这个环境管理工具&#xff0c;经过对比&#xff0c;发现它在诸多方面比 venv、conda 等工具更为出色&#xff0c;因此整理了这份简单的入门学习笔记&#xff0c;希望能帮助大家快速上手。 介绍 UV 是一款集 Python 版本管理、虚拟环境创建与…

【漫话机器学习系列】277.梯度裁剪(Gradient Clipping)

【深度学习】什么是梯度裁剪&#xff08;Gradient Clipping&#xff09;&#xff1f;一张图彻底搞懂&#xff01; 在训练深度神经网络&#xff0c;尤其是 RNN、LSTM、Transformer 这类深层结构时&#xff0c;你是否遇到过以下情况&#xff1a; 模型 loss 突然变成 NaN&#xf…

零基础弄懂 ngx_http_slice_module分片缓存加速

一、为什么需要 Slice&#xff1f; 在 NGINX 反向代理或 CDN 场景中&#xff0c;大文件&#xff08;视频、软件包、镜像等&#xff09;常因单体体积过大而令缓存命中率低、回源代价高。 ngx_http_slice_module 通过把一次完整响应拆分成 固定大小的字节块&#xff08;Slice&am…

机器人强化学习入门学习笔记(三)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;与监督学习不同——你不需要预先准备训练数据集&#xff0c;而是要设计环境、奖励函数&#xff0c;让智能体通过交互不断探索和学习。 &#x1f3af; 一、强化学习和训练数据的关系 强化学习不依赖固定的数据集。它…

【python实战】二手房房价数据分析与预测

个人主页&#xff1a;大数据蟒行探索者 目录 一、数据分析目标与任务 1.1背景介绍 1.2课程设计目标与任务 1.3研究方法与技术路线 二、数据预处理 2.1数据说明 2.2数据清洗 2.3数据处理 三、数据探索分析 四、数据分析模型 五、方案评估 摘要&#xff1a;随着社会经…

Kotlin IR编译器插件开发指南

在 Kotlin 中开发基于 IR&#xff08;Intermediate Representation&#xff09;的编译器插件&#xff0c;可以深度定制语言功能或实现高级代码转换。以下是分步骤指南&#xff1a; 一、IR 编译器插件基础 IR 是什么&#xff1f; Kotlin 编译器将源码转换为 IR 中间表示&#xf…

如何用 python 代码复现 MATLAB simulink 的 PID

MATLAB在 Simulink 里做以下设置MATLAB 脚本调用示例 python 实现离散 PID 实现&#xff08;并行形式&#xff09; Simulink 中两种 PID 结构&#xff08;并联形式, I-形式&#xff09;下连续/离散时域里积分增益 I 的表示并联&#xff08;Parallel&#xff09; vs 理想&#x…

黑马点评--基于Redis实现共享session登录

集群的session共享问题分析 session共享问题&#xff1a;多台Tomcat无法共享session存储空间&#xff0c;当请求切换到不同Tomcat服务时&#xff0c;原来存储在一台Tomcat服务中的数据&#xff0c;在其他Tomcat中是看不到的&#xff0c;这就导致了导致数据丢失的问题。 虽然系…

SkyWalking启动失败:OpenSearch分片数量达到上限的完美解决方案

🚨 问题现象 SkyWalking OAP服务启动时报错: org.apache.skywalking.oap.server.library.module.ModuleStartException: java.lang.RuntimeException: {"error":{"root_cause":[{"type":"validation_exception", "reason&q…

向量数据库选型实战指南:Milvus架构深度解析与技术对比

导读&#xff1a;随着大语言模型和AI应用的快速普及&#xff0c;传统数据库在处理高维向量数据时面临的性能瓶颈日益凸显。当文档经过嵌入模型处理生成768到1536维的向量后&#xff0c;传统B-Tree索引的检索效率会出现显著下降&#xff0c;而现代应用对毫秒级响应的严苛要求使得…