文章总结: 本文详细介绍了欧拉系统硬盘故障的完整恢复流程,重点针对GPT分区表损坏场景提供8步30分钟快速恢复方案。关键内容包括故障诊断方法、TestDisk和gdisk工具使用技巧、文件系统修复步骤以及GRUB引导修复,最后给出预防措施建议。文章提供具体的命令行操作示例,具有较强实战指导价值。 综合评分: 85 文章分类: 应急响应,解决方案,安全工具,数据安全,系统安全
服务器崩了!GPT分区表损坏,我用这8步30分钟救回整个系统
原创
刘军军 刘军军
运维星火燎原
2026年6月30日 00:13 山西
在小说阅读器读本章
去阅读
硬核运维实战:欧拉系统硬盘故障完整恢复流程
- 故障概述
- 硬盘故障类型分类
- 故障诊断方法
- 分区表损坏恢复流程
- 文件系统损坏恢复
- GRUB引导修复
- 完整恢复案例
- 预防措施
1. 故障概述
1.1 典型故障场景
硬盘故障是服务器运维中最常见的硬件问题之一,可能导致:
- 系统无法启动
- 数据丢失
- 服务中断
1.2 故障表现
| 启动阶段 | 典型错误信息 | 故障可能性 | | — | — | — | | BIOS/UEFI | “No bootable device found” | 硬盘未识别/完全损坏 | | GRUB | “error: unknown filesystem” | 分区表/GPT损坏 | | GRUB | “grub rescue>” | GRUB损坏 | | 内核加载 | “VFS: Cannot open root device” | 根分区无法挂载 | | 系统启动 | “dependency failed for /sys” | 文件系统挂载失败 |
1.3 恢复前准备
必备工具:
- 欧拉/CentOS Live镜像U盘
- 另一台正常工作的服务器(可选,用于远程协助)
- 硬盘健康检测工具
操作原则:
- 先备份后修复
- 优先恢复数据
- 保持冷静,按步骤操作
2. 硬盘故障类型分类
2.1 故障类型一览
| 故障类型 | 严重程度 | 数据可恢复性 | 修复难度 | | — | — | — | — | | 硬盘掉线/掉盘 | 高 | 高 | 简单(重新插线) | | 分区表损坏 | 高 | 中高 | 中等 | | 坏道 | 中 | 中 | 中等 | | 超级块损坏 | 中 | 高 | 简单 | | 文件系统损坏 | 中 | 高 | 简单-复杂 | | 硬盘物理损坏 | 极高 | 低-中 | 困难 |
2.2 分区表类型
| 类型 | 最大分区数 | 备份位置 | 恢复难度 | | — | — | — | — | | MBR | 4个主分区 | 仅磁盘开头 | 简单 | | GPT | 128个分区 | 开头+结尾 | 中等(双重备份) |
3. 故障诊断方法
3.1 通过Live CD启动
# 制作启动U盘
dd if=openEuler-xx-x86_64-dvd.iso of=/dev/sdX bs=4M status=progress
# 从U盘启动,选择 "Troubleshooting" -> "Rescue a CentOS system"
3.2 硬盘识别诊断
# 查看所有硬盘设备
lsblk
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 500G 0 disk
# ├─sda1 8:1 0 1G 0 part
# └─sda2 8:2 0 499G 0 part
# ├─centos-root 253:0 0 50G 0 lvm
# ├─centos-swap 253:1 0 8G 0 lvm
# └─centos-home 253:2 0 441G 0 lvm
# 查看详细分区信息
fdisk -l /dev/sda
# 查看内核日志中的硬盘错误
dmesg | grep -i "error\|fail\|sda\|disk"
3.3 SMART健康检测
# 安装 smartmontools
yum install smartmontools
# 检查硬盘SMART状态
smartctl -a /dev/sda
# 关键指标:
# - Reallocated_Sector_Ct (>0 表示有坏道)
# - Current_Pending_Sector (>0 表示有未修复扇区)
# - Offline_Uncorrectable (>0 表示有无法纠正的错误)
# 快速健康检查
smartctl -H /dev/sda
# 输出 PASSED 表示健康,FAILED 表示即将损坏
3.4 硬盘读写测试
# 读取测试(不破坏数据)
badblocks -sv /dev/sda
# 写入测试(会破坏数据,仅在确认无重要数据时使用)
badblocks -wsv /dev/sda
4. 分区表损坏恢复流程
4.1 GPT分区表结构
GPT分区表特点:
- 主GPT头:位于LBA 1(512字节)
- 分区表:位于LBA 2-33
- 备份GPT头:位于磁盘最后一个扇区
- 备份分区表:位于备份GPT头之前
+------------------+
| Protective MBR | LBA 0
+------------------+
| Primary GPT Header | LBA 1
+------------------+
| Partition Table | LBA 2-33
+------------------+
| |
| Data Area |
| |
+------------------+
| Backup Partition | LBA -33 to -2
| Table |
+------------------+
| Backup GPT Header | Last LBA
+------------------+
4.2 使用 TestDisk 恢复(推荐)
TestDisk 支持 MBR、GPT、EFI 等多种分区表类型,是恢复分区表的首选工具。
4.2.1 安装 TestDisk
# 在Live环境中安装
yum install testdisk # CentOS/RHEL/欧拉
apt install testdisk # Debian/Ubuntu
4.2.2 TestDisk 恢复步骤
# 启动 testdisk
testdisk
# 交互式操作流程:
# Step 1: 选择硬盘
Select a media (use Arrow keys)
>[Proceed ] /dev/sda
[Proceed ] /dev/sdb
# Step 2: 选择分区表类型
Select partition table type:
>[Intel ] MBR (MSDos, Windows)
[EFI GPT] EFI GPT partition
[None ] Empty
# 选择 [EFI GPT](欧拉系统使用GPT)
# Step 3: 选择操作
[Analyse ] Analyse current
partition structure
[Advanced] Filesystem utils
[Geometry ] Change disk geometry
[Options ] Modify options
[MBR Code ] Write TestDisk MBR
to first sector
[Delete ] Delete all data
# Step 4: 分析当前分区
# 按 [Proceed] 开始分析
# Step 5: 搜索丢失的分区
[Search ] Search!
[Stop ] Stop
# 选择 [Search] 深度搜索
# Step 6: 找到分区后确认
HPFS - NTFS 0 0 2 4096
Linux swap 0 0 3 16384
Linux LVM 0 0 4 XXX
# 按 [Enter] 确认每个分区
# Step 7: 写入恢复
[Write ] Write recovered data
to partition table
# 选择 [Write] 保存
4.3 使用 gdisk 手动恢复
当 TestDisk 无法自动恢复时,使用 gdisk 手动重建。
4.3.1 gdisk 基本命令
# 查看GPT分区表
gdisk -l /dev/sda
# 进入交互式编辑
gdisk /dev/sda
# 常用子命令:
# ? - 显示帮助
# p - 显示当前分区表
# o - 创建新的空GPT分区表
# d - 删除分区
# n - 创建新分区
# t - 更改分区类型
# w - 保存并退出
# q - 不保存退出
# i - 显示分区详情
# b - 备份GPT数据到文件
# c - 更改分区名称
4.3.2 常见欧拉系统分区布局
标准分区布局(Legacy):
/dev/sda1 1GB ext4/xfs /boot
/dev/sda2 剩余 LVM
├─centos-root 50G /
├─centos-swap 8G swap
└─centos-home 剩余 /home
UEFI分区布局(推荐):
/dev/sda1 512MB vfat /boot/efi (EFI System Partition, EF00)
/dev/sda2 剩余 LVM
├─centos-root 50G /
├─centos-swap 8G swap
└─centos-home 剩余 /home
4.3.3 手动重建GPT分区
# 启动 gdisk
gdisk /dev/sda
# 按 o 创建新的空GPT分区表(谨慎!这会清空现有分区)
Command (? for help): o
# 按 n 创建第一个分区(EFI分区)
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-XXXXXXXX, default = XXXXXXXX) or {+-}size{KMGTP}: [Enter]
Last sector, {+-}size{KMGTP} (34-XXXXXXXX, default = XXXXXXXX): +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter =8300): EF00
Changed system type of partition to 'EFI System'
# 按 n 创建第二个分区(LVM分区)
Command (? for help): n
Partition number (2-128, default 2): 2
First sector (XXXX-XXXXXXXX, default = XXXXXXXX) or {+-}size{KMGTP}: [Enter]
Last sector, {+-}size{KMGTP} (XXXX-XXXXXXXX, default = XXXXXXXX): [Enter]
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter =8300): 8E00
Changed system type of partition to 'Linux LVM'
# 按 w 保存
Command (? for help): w
Final checks complete. About to write GPT data.
THIS WILL OVERWRITE EXISTING
PARTITIONS AND THEIR SIGNATURES!
Are you sure? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
4.4 备份和恢复GPT分区表
# 备份GPT分区表(重要!恢复时用)
sgdisk --backup=/tmp/gpt_backup.bin /dev/sda
# 备份为可读文本格式
sgdisk --print=/tmp/gpt_partitions.txt /dev/sda
# 从备份恢复
sgdisk --load-backup=/tmp/gpt_backup.bin /dev/sda
# 复制分区表到另一块硬盘
sgdisk --replicate=/dev/sdb /dev/sda
5. 文件系统损坏恢复
5.1 检查文件系统
# 检查 ext4 文件系统
fsck.ext4 -n /dev/sda1 # -n 表示只读检查,不修复
fsck.ext4 -n /dev/sda2
# 检查 xfs 文件系统
xfs_check /dev/sda1
xfs_repair -n /dev/sda1 # -n 表示只检查不修复
# 检查 LVM 中的文件系统
lvscan
fsck.ext4 -n /dev/mapper/centos-root
5.2 修复文件系统
警告:修复前最好先备份数据!
# 卸载要修复的分区
umount /dev/sda1
# 修复 ext4
fsck.ext4 -p /dev/sda1 # 自动修复
fsck.ext4 -y /dev/sda1 # 对所有问题自动回答 yes
# 修复 xfs(xfs_repair 不能在挂载状态下运行)
xfs_repair /dev/sda1
# 修复有严重问题的文件系统
fsck.ext4 -f-y /dev/sda1
5.3 超级块损坏修复
# 查看超级块位置
dumpe2fs /dev/sda1 | grep -i superblock
# 输出示例:
# Primary superblock at 0, Group descriptors at 1-3
# Backup superblock at 32768, Group descriptors at 32769-32771
# Backup superblock at 98304, Group descriptors at 98305-98307
# Backup superblock at 163840, Group descriptors at 163841-163843
# ...
# 使用备份超级块修复
umount /dev/sda1
fsck.ext4 -b 32768 /dev/sda1
# 或者自动查找并使用备份超级块
fsck.ext4 -n -S /dev/sda1
6. GRUB引导修复
6.1 挂载原系统
# 挂载根分区
mount /dev/mapper/centos-root /mnt/sysimage
# 挂载 boot 分区
mount /dev/sda1 /mnt/sysimage/boot
# 挂载 EFI 分区(UEFI启动)
mount /dev/sda1 /mnt/sysimage/boot/efi
# 挂载必要目录
mount --bind /proc /mnt/sysimage/proc
mount --bind /sys /mnt/sysimage/sys
mount --bind /dev /mnt/sysimage/dev
# chroot 进入原系统
chroot /mnt/sysimage
6.2 修复GRUB for BIOS
# 安装 GRUB2 到 MBR
grub2 -install /dev/sda
# 生成 GRUB 配置文件
grub2 -mkconfig -o /boot/grub2/grub.cfg
# 验证配置文件
cat /boot/grub2/grub.cfg | grep menuentry
6.3 修复GRUB for UEFI
# 安装 GRUB2 for UEFI
grub2 -install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos
# 如果上述命令失败,尝试:
grub2 -install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos --recheck
# 生成配置文件
grub2 -mkconfig -o /boot/grub2/grub.cfg
# 验证 EFI 启动目录
ls -la /boot/efi/EFI/centos/
# 应该看到 grubx64.efi 和 shimx64.efi
6.4 重建 initramfs
# 查看当前内核版本
uname -r
# 重建 initramfs(如果initramfs损坏)
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
# 或指定版本
dracut -f /boot/initramfs-3.10.0-1160.el7.x86_64.img 3.10.0-1160.el7.x86_64
6.5 退出并重启
# 退出 chroot
exit
# 卸载挂载
umount -R /mnt/sysimage
# 重启
reboot
7. 完整恢复案例
7.1 场景描述
故障现象:
- 服务器突然断电后重启
- 启动时显示 “error: unknown filesystem”
- 进入 GRUB Rescue 模式
诊断结果:
- 硬盘能被识别
- GPT分区表损坏
- 但文件系统完好
7.2 恢复步骤
# Step 1: 从Live CD启动
# Step 2: 安装必要工具
yum install testdisk gdisk lvm2
# Step 3: 使用 TestDisk 恢复分区表
testdisk /dev/sda
# 选择 /dev/sda
# 选择 EFI GPT 分区表类型
# 选择 Analyse
# 选择 Search 搜索
# 找到分区后选择 Write
# Step 4: 重新激活 LVM
vgchange -ay
# Step 5: 检查文件系统
fsck.ext4 -n /dev/sda1
fsck.ext4 -n /dev/mapper/centos-root
# Step 6: 挂载系统
mount /dev/mapper/centos-root /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot
mount /dev/sda1 /mnt/sysimage/boot/efi
# Step 7: 挂载必要目录并 chroot
mount --bind /proc /mnt/sysimage/proc
mount --bind /sys /mnt/sysimage/sys
mount --bind /dev /mnt/sysimage/dev
chroot /mnt/sysimage
# Step 8: 修复 GRUB
grub2 -install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos
grub2 -mkconfig -o /boot/grub2/grub.cfg
# Step 9: 退出并重启
exit
umount -R /mnt/sysimage
reboot
7.3 恢复后验证
# 重启后检查启动日志
journalctl -b
# 检查硬盘状态
smartctl -a /dev/sda | grep-E"SMART|PASSED|FAILED"
# 检查文件系统挂载
df -h
# 检查 LVM 状态
lvs
pvs
vgs
8. 预防措施
8.1 定期备份
# 备份分区表(定期执行)
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
HOSTNAME=$(hostname)
# 备份 GPT 分区表
sgdisk --backup=$BACKUP_DIR/gpt_${HOSTNAME}_${DATE}.bin /dev/sda
# 备份 MBR(如果有)
dd if=/dev/sda of=$BACKUP_DIR/mbr_${HOSTNAME}_${DATE}.bin bs=512count=1
# 备份 LVM 配置
vgs --reportformat json > $BACKUP_DIR/lvm_vgs_${HOSTNAME}_${DATE}.json
lvs --reportformat json > $BACKUP_DIR/lvm_lvs_${HOSTNAME}_${DATE}.json
pvs --reportformat json > $BACKUP_DIR/lvm_pvs_${HOSTNAME}_${DATE}.json
# 保留最近30天备份
find$BACKUP_DIR-name"*.bin"-mtime+30-delete
find$BACKUP_DIR-name"*.json"-mtime+30-delete
8.2 硬盘健康监控
# 配置 smartd 开机自启
systemctl enable smartd
# 编辑配置文件
cat > /etc/smartd.conf << EOF
/dev/sda -a-I190-I194-W4,45,55 -R5-s (S/../.././02|L/../../6/03) -m [email protected]
EOF
# 重启服务
systemctl restart smartd
# 手动检查
smartctl -H /dev/sda
8.3 UPS保护
确保服务器连接 UPS,防止意外断电导致:
- 分区表损坏
- 文件系统损坏
- 数据丢失
8.4 定期巡检
# 每周检查命令
#!/bin/bash
echo "=== 硬盘 SMART 状态 ==="
smartctl -H /dev/sda
echo "=== 硬盘分区 ==="
lsblk
echo "=== LVM 状态 ==="
vgs
lvs
echo "=== 文件系统挂载 ==="
df -h
echo "=== 最近系统日志 ==="
journalctl -p err --since " 1 week ago"
附录
A. 常用命令速查
| 操作 | 命令 |
| — | — |
| 查看分区 | lsblk, fdisk -l, gdisk -l |
| 检查SMART | smartctl -a /dev/sda |
| 恢复分区表 | testdisk /dev/sda |
| 备份GPT | sgdisk --backup=file /dev/sda |
| 修复GRUB | grub2-install /dev/sda |
| 检查文件系统 | fsck.ext4 -n /dev/sda1 |
| 激活LVM | vgchange -ay |
| 重建initramfs | dracut -f |
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《服务器崩了!GPT分区表损坏,我用这8步30分钟救回整个系统》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论