[The primary GPT table is corrupt, but the backup appears OK, so that will be used]的修复办法

本文介绍了一个关于大容量硬盘在Windows和Linux系统间互插后,在Linux下无法读取的问题解决过程。通过使用gdisk工具修复受损的GPT分区表,成功解决了硬盘无法读取的问题。

0x01

这个问题是我从把大容量硬盘接到windows上之后出现的,不知道原因,以前一直互相插也没事(互相插只Linux和windows)

大概问题表现就是硬盘接到windows上之后接回Linux之后发现无法读出硬盘了,然后数据很重要啊,咋办

0x02

我们先执行查看命令(笔者的系统是ubuntu 16.04)

其他系统自动替换对应命令

sudo fdisk -l

结果

# sudo fdisk -l      
Disk /dev/loop0: 83.8 MiB, 87896064 bytes, 171672 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop1: 83.7 MiB, 87793664 bytes, 171472 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop3: 83.8 MiB, 87863296 bytes, 171608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x37e436b4

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953523711 1953521664 931.5G 83 Linux


Disk /dev/sdb: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7D2E0FF9-4BF2-45E4-8D09-85978EF9341F

Device        Start       End   Sectors   Size Type
/dev/sdb1      2048    487423    485376   237M EFI System
/dev/sdb2    487424  17647615  17160192   8.2G Linux swap
/dev/sdb3  17647616 250068991 232421376 110.8G Linux filesystem


The primary GPT table is corrupt, but the backup appears OK, so that will be used.
Disk /dev/sdc: 7.3 TiB, 8001389854720 bytes, 15627714560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: CEA6435D-56B0-406E-800C-E7F6FB3F58E5

Device      Start         End     Sectors  Size Type
/dev/sdc1      34      262177      262144  128M Microsoft reserved
/dev/sdc2  264192 15627712511 15627448320  7.3T Microsoft basic data

Partition 1 does not start on physical sector boundary.

可以看到我们的硬盘/dev/sdc处于无法读取的状态

然后我google了一圈,发现一个答案,原文链接就不贴了,被我关了

0x03

然后我们开始修复,执行

sudo gdisk /dev/sdc

结果

sudo gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.1

Caution! After loading partitions, the CRC doesn't check out!
Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!

Warning! One or more CRCs don't match. You should repair the disk!

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************

Command (? for help):

可以看到我们的磁盘的GPT分区有问题(不知道为什么windows可以读,linux不可以读)

然后我们用这个gdisk来修复硬盘的GPT分区,为啥是GPT不是MBR,因为大于2T的硬盘,只能使用GPTMBR最大支持2T

然后我们输入r进行修复

出来这个

Command (? for help): r

Recovery/transformation command (? for help): 

然后我们输入问号

Recovery/transformation command (? for help): ?
b   use backup GPT header (rebuilding main)
c   load backup partition table from disk (rebuilding main)
d   use main GPT header (rebuilding backup)
e   load main partition table from disk (rebuilding backup)
f   load MBR and build fresh GPT from it
g   convert GPT into MBR and exit
h   make hybrid MBR
i   show detailed information on a partition
l   load partition data from a backup file
m   return to main menu
o   print protective MBR data
p   print the partition table
q   quit without saving changes
t   transform BSD disklabel partition
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu

Recovery/transformation command (? for help):

这里列出了一些我们可能用到的指令,这里我们只会用到b

我们输入b

Recovery/transformation command (? for help): b

然后什么也不会现实,继续输入w,写入备份的GPT分区数据重建磁盘

Recovery/transformation command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

ok,到这里,我们磁盘就修复完成了(不知道是windows的bug还是linux的bug)

我们再执行sudo fdisk -l

sudo fdisk -l      
Disk /dev/loop0: 83.8 MiB, 87896064 bytes, 171672 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop1: 83.7 MiB, 87793664 bytes, 171472 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop3: 83.8 MiB, 87863296 bytes, 171608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x37e436b4

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953523711 1953521664 931.5G 83 Linux


Disk /dev/sdb: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7D2E0FF9-4BF2-45E4-8D09-85978EF9341F

Device        Start       End   Sectors   Size Type
/dev/sdb1      2048    487423    485376   237M EFI System
/dev/sdb2    487424  17647615  17160192   8.2G Linux swap
/dev/sdb3  17647616 250068991 232421376 110.8G Linux filesystem


Disk /dev/sdc: 7.3 TiB, 8001389854720 bytes, 15627714560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: CEA6435D-56B0-406E-800C-E7F6FB3F58E5

Device      Start         End     Sectors  Size Type
/dev/sdc1      34      262177      262144  128M Microsoft reserved
/dev/sdc2  264192 15627712511 15627448320  7.3T Microsoft basic data

Partition 1 does not start on physical sector boundary.

磁盘就不会报错了,马上就挂载上去了

本文完

<think>嗯,用户遇到了一个关于GPT表的错误信息:“Error: The backup GPT table is corrupt, but the primary appears OK, so that will be used.” 还有提示需要更新/etc/fstab。我需要先理解这个问题的背景。 首先,GPT(GUID Partition Table)是用于磁盘分区的,比传统的MBR更先进,支持更大的磁盘和更多的分区。GPT有两个表,主表和备份表,备份表通常在磁盘末尾。当主表损坏时,系统可以使用备份表恢复。但这里的情况是备份表损坏了,而主表正常,所以系统继续使用主表。这可能不会导致立即的问题,但存在风险,因为如果主表也损坏,就无法恢复了。 接下来,用户可能是在启动时看到这个错误,或者在运行某些磁盘工具时出现。需要解释这个错误的含义,可能的原因,以及如何修复。另外,提示更新/etc/fstab,这可能是因为分区信息变化导致挂载点配置需要调整,但更可能是在修复GPT后需要确认挂载点是否正确。 可能的原因包括磁盘错误、突然断电或系统崩溃导致备份表损坏。用户需要检查磁盘健康状况,使用工具如gdisk或sgdisk修复GPT表,并更新fstab。同时,建议备份数据,以防万一。 用户可能不太懂GPT的结构,需要简要说明主表和备份表的作用。还要指导他们如何检查磁盘错误,比如使用smartctl,以及如何用gdisk重建备份表。此外,更新fstab可能需要重新生成或手动编辑,但需要确认分区UUID是否变化,如果主表正常,可能不需要改动fstab,但错误提示可能是因为分区表有变动导致系统建议更新fstab以避免潜在问题。 需要分步骤给出解决方案,包括检查磁盘、修复GPT、验证分区表,以及检查fstab是否需要调整。同时提醒用户备份数据,避免操作中的风险。 </think>该提示表明磁盘的 **GPT分区表**(GUID Partition Table)存在异常,具体含义如下: --- ### **错误解析** 1. **GPT表结构** GPT磁盘包含 **主分区表**(Primary GPT)和 **备份分区表**(Backup GPT): - **主表**:通常位于磁盘起始位置(LBA 1)。 - **备份表**:通常位于磁盘末尾(最后一个可用扇区前)。 - 系统优先使用主表,若主表损坏则会尝试读取备份表。 2. **当前问题** - **备份GPT表损坏**:备份表可能因磁盘故障、突然断电或异常关机导致数据不一致。 - **主GPT表正常**:系统仍能正常读取分区信息,但失去冗余保护。 3. **潜在风险** - 若主GPT表后续损坏,备份表无法恢复,可能导致分区信息丢失。 - `/etc/fstab`记录的分区挂载信息可能与实际分区不匹配(如UUID变化)。 --- ### **解决方案** #### 1. **检查磁盘健康状态** ```bash smartctl -a /dev/sdX # 替换为实际磁盘设备名(如/dev/sda) ``` - 检查是否有坏道(`Reallocated_Sector_Ct`)或硬件错误。 - 若磁盘异常,立即备份数据并更换存储设备。 #### 2. **修复GPT表** 使用`gdisk`工具重建备份表: ```bash sudo gdisk /dev/sdX ``` - 输入 `r` 进入恢复模式。 - 输入 `b` 保存主表到备份(修复备份表)。 - 输入 `q` 退出并保存更改。 #### 3. **验证分区一致性** ```bash sudo gdisk -l /dev/sdX # 检查主/备份表是否同步 sudo fsck /dev/sdXn # 对每个分区进行文件系统检查 ``` #### 4. **更新 `/etc/fstab`** - 如果分区UUID或挂载点发生变化,需同步更新`/etc/fstab`: ```bash sudo blkid > /etc/fstab # 自动更新UUID信息(需谨慎操作) ``` - 或手动编辑`/etc/fstab`,确保分区挂载配置与当前系统一致。 #### 5. **预防措施** - 定期备份分区表: ```bash sudo sgdisk --backup=backup.bin /dev/sdX # 备份GPT表 ``` - 避免异常关机,确保磁盘操作完成后再断电。 --- ### **关键问题总结** - **当前影响**:系统仍能正常运行,但失去备份冗余,需尽快修复。 - **长期风险**:若主GPT表损坏且备份无效,将导致数据丢失。 - **优先级**:建议立即修复备份表并检查磁盘健康状态。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值