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 分区正确配置。
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)跟踪磁盘健康状态。
希望这篇实战指南能为你的服务器运维提供参考!如果有其他问题,欢迎留言交流。
评论前必须登录!
注册