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_Ct
、Wear_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
)。
-
關機:
sudo poweroff
-
物理移除
/dev/sda
(或在 BIOS 中調整啟動順序,確保從/dev/sdb
啟動)。 -
重啟服務器:
- 如果使用 BIOS,進入 BIOS 設置,將
/dev/sdb
設置為首選啟動設備。 - 如果使用 UEFI,確保 EFI 分區正確配置。
- 如果使用 BIOS,進入 BIOS 設置,將
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. 驗證系統恢復
重啟后,檢查系統是否正常啟動:
-
確認登錄:
-
登錄系統,驗證用戶和數據是否完整。
-
檢查關鍵目錄:
ls /bin /sbin /home
-
-
檢查 GRUB:
-
確保 GRUB 正常加載:
cat /boot/grub/grub.cfg
-
如果 GRUB 配置缺失,重新安裝:
sudo grub-install /dev/sda sudo update-grub
-
-
檢查文件系統:
df -h sudo fsck /dev/sda1
-
驗證服務:
-
檢查關鍵服務是否正常運行:
systemctl status
-
注意事項
-
備份完整性:
- 備份前停止寫操作,確保映像一致性。
- 驗證備份文件完整性(使用
md5sum
或掛載映像檢查)。
-
目標磁盤準備:
- 確保目標磁盤為空,避免覆蓋已有系統導致沖突。
- 目標磁盤容量需大于或等于源磁盤。
-
NFS 配置:
- 確保 NFS 服務器穩定,網絡帶寬足夠,避免備份或恢復中斷。
- 檢查 NFS 權限,確保目標服務器有寫權限。
-
分區和 UUID:
-
恢復后檢查
/etc/fstab
中的 UUID 是否與blkid
輸出一致:blkid cat /etc/fstab
-
如有不匹配,編輯
/etc/fstab
修正。
-
-
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
-
-
硬件兼容性:
-
確保目標服務器硬件(如磁盤控制器、CPU)與源系統兼容。
-
如果內核版本不匹配,可能需重新安裝內核:
apt install --reinstall linux-image-$(uname -r)
-
總結
通過 dd
命令結合 NFS 實現全盤映像備份與恢復,是一種高效的服務器數據遷移方案。本文詳細記錄了從備份到恢復的完整流程,以及處理 initramfs
緊急模式的修復方法。關鍵點包括:
- 使用
dd
確保全量備份,結合 NFS 提供可靠存儲。 - 恢復到裸盤并移除原系統盤,簡化啟動配置。
- 通過
fsck
修復文件系統,解決initramfs
問題。
后續建議:
- 配置 RAID(如 RAID 1)以提高數據冗余。
- 定期驗證備份完整性,建立自動化備份機制(如
cron
+rsync
)。 - 使用監控工具(如
smartmontools
)跟蹤磁盤健康狀態。
希望這篇實戰指南能為你的服務器運維提供參考!如果有其他問題,歡迎留言交流。