【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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82414.shtml
英文地址,請注明出處:http://en.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;而現代應用對毫秒級響應的嚴苛要求使得…