How to fix damaged GPT with hybrid MBR?
I actually had this same problem recently. Your SD card may be in some kind of write-protected mode. Possible causes:
- The flash memory has worn out and can't be written to anymore. (This is bad!)
- The physical write-protection switch may be enabled. (Switch it off to enable writing again.)
In my case, the flash disk controller was silently discarding my writes after the flash memory failed, so even though the writes looked successful, the corrupted partition table came back on the next read.
If your SD card is behaving like this, it has most likely failed, and you'll need to get a new one.
I suspect that you are having the first issue because if the write-protection switch was active, you would be seeing some kind of "read-only" notice, as Linux can detect if a flash disk or SD card is write-protected. (See /var/log/syslog
)
Example of a write-protected flash drive, /dev/sdc
:
May 29 18:26:44 demo kernel: [32319.722491] scsi 2:0:0:0: Direct-Access NA NA 1.26 PQ: 0 ANSI: 5 May 29 18:26:44 demo kernel: [32319.723377] sd 2:0:0:0: Attached scsi generic sg1 type 0 May 29 18:26:44 demo kernel: [32319.724325] sd 2:0:0:0: [sdc] 31266816 512-byte logical blocks: (16.0 GB/14.9 GiB) May 29 18:26:44 demo kernel: [32319.725131] sd 2:0:0:0: [sdc] Write Protect is on May 29 18:26:44 demo kernel: [32319.725137] sd 2:0:0:0: [sdc] Mode Sense: 43 00 80 00 May 29 18:26:44 demo kernel: [32319.725389] sd 2:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA May 29 18:26:44 demo kernel: [32319.737297] sdc: sdc1 May 29 18:26:44 demo kernel: [32319.739266] sd 2:0:0:0: [sdc] Attached SCSI removable disk
Demo
/dev/sdb
was my broken flash drive that silently discarded writes.
Tried wiping out the partition table:
root@demo [~]# gdisk /dev/sdb GPT fdisk (gdisk) version 1.0.3 Caution: invalid backup GPT header, but valid main header; regenerating backup header from main header. Warning! Main and backup partition tables differ! Use the 'c' and 'e' options on the recovery & transformation menu to examine the two tables. Warning! One or more CRCs don't match. You should repair the disk! Partition table scan: MBR: hybrid BSD: not present APM: not present GPT: damaged Found valid MBR and corrupt GPT. Which do you want to use? (Using the GPT MAY permit recovery of GPT data.) 1 - MBR 2 - GPT 3 - Create blank GPT Your answer: 2 Command (? for help): p Disk /dev/sdb: 7897087 sectors, 3.8 GiB Model: USB Flash Disk Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 5904C65E-B410-474D-B22F-9FEA7E3582C2 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 7897053 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 4095 1024.0 KiB EF02 BIOS boot partition 2 4096 106495 50.0 MiB EF00 EFI System 3 106496 7897053 3.7 GiB 8300 Linux filesystem Command (? for help): x Expert command (? for help): z About to wipe out GPT on /dev/sdb. Proceed? (Y/N): y GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. Blank out MBR? (Y/N): y
The bad partition table immediately returned:
root@demo [~]# gdisk /dev/sdb GPT fdisk (gdisk) version 1.0.3 Caution: invalid backup GPT header, but valid main header; regenerating backup header from main header. Warning! Main and backup partition tables differ! Use the 'c' and 'e' options on the recovery & transformation menu to examine the two tables. Warning! One or more CRCs don't match. You should repair the disk! Partition table scan: MBR: hybrid BSD: not present APM: not present GPT: damaged Found valid MBR and corrupt GPT. Which do you want to use? (Using the GPT MAY permit recovery of GPT data.) 1 - MBR 2 - GPT 3 - Create blank GPT Your answer:
Erasing the beginning of the disk with
dd
didn't have any effect, either:root@demo [~]# hexdump -C /dev/sdb | head 00000000 eb 63 90 00 00 00 00 00 00 00 00 00 00 00 00 00 |.c..............| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000050 00 00 00 00 00 00 00 00 00 00 00 80 00 08 00 00 |................| 00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p| 00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......| 00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 bb 17 04 |. ..d|<.t...R...| 00000090 f6 07 03 74 06 be 88 7d e8 17 01 be 05 7c b4 41 |...t...}.....|.A| 000000a0 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 37 83 |..U..ZRr=..U.u7.| 000000b0 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 44 02 |[email protected].| root@demo [~]# dd if=/dev/zero of=/dev/sdb bs=1M count=1 status=progress 1+0 records in 1+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0219383 s, 47.8 MB/s root@demo [~]# hexdump -C /dev/sdb | head 00000000 eb 63 90 00 00 00 00 00 00 00 00 00 00 00 00 00 |.c..............| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000050 00 00 00 00 00 00 00 00 00 00 00 80 00 08 00 00 |................| 00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p| 00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......| 00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 bb 17 04 |. ..d|<.t...R...| 00000090 f6 07 03 74 06 be 88 7d e8 17 01 be 05 7c b4 41 |...t...}.....|.A| 000000a0 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 37 83 |..U..ZRr=..U.u7.| 000000b0 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 44 02 |[email protected].|
me0076
Updated on September 18, 2022Comments
-
me0076 over 1 year
I have a SD card that has some issues and I could not fixed them.
This is how the disk looks like in GNOME Disks:When I run
gdisk /dev/sdb
, it gives the following output:sudo gdisk /dev/sdb GPT fdisk (gdisk) version 1.0.3 Caution: invalid backup GPT header, but valid main header; regenerating backup header from main header. Warning! Main and backup partition tables differ! Use the 'c' and 'e' options on the recovery & transformation menu to examine the two tables. Warning! One or more CRCs don't match. You should repair the disk! Partition table scan: MBR: hybrid BSD: not present APM: not present GPT: damaged Found valid MBR and corrupt GPT. Which do you want to use? (Using the GPT MAY permit recovery of GPT data.
I am not sure which partition table should I use but I used GPT (create blank GPT was not helpful) This is how the partitions are look like:
Command (? for help): p Disk /dev/sdb: 125067264 sectors, 59.6 GiB Model: Multi-Card Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 76A0F070-E171-475B-9409-53840D61AD12 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 4194270 Partitions will be aligned on 2048-sector boundaries Total free space is 671677 sectors (328.0 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 67583 32.0 MiB 0C01 hassos-boot 2 67584 116735 24.0 MiB 8300 hassos-kernel0 3 116736 641023 256.0 MiB 8300 hassos-system0 4 641024 690175 24.0 MiB 8300 hassos-kernel1 5 690176 1214463 256.0 MiB 8300 hassos-system1 6 1214464 1230847 8.0 MiB 8300 hassos-bootstate 7 1230848 1427455 96.0 MiB 8300 hassos-overlay 8 1427456 3524607 1024.0 MiB 8300 hassos-data
I will get this Info when I want to verify the disk:
Caution: The CRC for the backup partition table is invalid. This table may be corrupt. This program will automatically create a new backup partition table when you save your partitions. Problem: The secondary header's self-pointer indicates that it does not reside at the end of the disk. If you've added a disk to a RAID array, use the 'e' option on the experts' menu to adjust the secondary header's and partition table's locations. Identified 2 problems!
I could managed to fix these problems and then I got this massage:
No problems found. 121544637 free sectors (58.0 GiB) available in 2 segments, the largest of which is 121542623 (58.0 GiB) in size.
but after writing I got this:
OK: writing new GUID partition table (GPT) to /dev/sdb. The operation has completed successfully.
But when I check the partitions again, it is still the same. I have tried to delete all partitions one by one and then create a new empty GUID partition table but after writing I got this:
OK: writing new GUID partition table (GPT) to /dev/sdb. The operation has completed successfully.
But when I check the partitions again, it is still the same. I think it is because of the of hybrid MBR and damaged GPT. Is there any way to delete both of these tables at the same time? Or what can I still do to fix this problem?
Thanks in advance