Re: [Gptfdisk-general] GPT fdisk: problem with pre-existing Protective MBR when writing table to di
Brought to you by:
srs5694
From: Rod S. <rod...@ro...> - 2014-01-26 05:00:20
|
On 01/25/2014 10:59 PM, Edwin wrote: > Hi Rod, > > Thanks for your quick reply. Your explanation makes sense and it > explains the error I got. > > Is there a way in gdisk to fix my MBR? In other words to set the > non-compliant end-sector to the right value? Yes; you just need to re-create the protective MBR. This can be done with the "n" option on the experts' menu. > Actually you might be right about another cause. In hind-sight I did use > the built-in windows disk management tool to shrink the windows > partition. Should have thought of that earlier... also did not realize > that would have changed the MBR but as you said that probably was the > cause then. The Windows partitioning tools have many problems, but I don't think I've heard of them creating invalid protective MBRs. I don't know offhand if they re-create or modify protective MBRs as a matter of course, the way GParted and parted do. Of course, this could be a new bug -- say, introduced in Windows 8.1. FWIW, I've just revised gdisk to auto-correct this problem when loading the partition table, assuming everything else looks OK. If there are other problems when loading, a verify ("v" on any menu) operation should display a warning, and a write operation will also warn about the issue. The changes are in the GPT fdisk git repository, in case you want to check it out. > On Sat, Jan 25, 2014 at 9:45 PM, Rod Smith <rod...@ro... > <mailto:rod...@ro...>> wrote: > > On 01/25/2014 10:17 PM, Edwin wrote: > > When using gdisk on my disk (in the state as it was > pre-installed by OEM > for Windows 8) I encountered an error writing a new partition > table to > my disk with gdisk. > > After creating new partitions and writing to disk (w) I get this > error: > > >>Warning! An error was reported when writing the partition > table! This > error > >>MIGHT be harmless, or the disk might be damaged! Checking it is > advisable. > > After a bit of debugging this turned out to be caused by > WriteMBRData > returning a failure code. > > This is caused by one of the checks in WriteMBRData: > CreateExtended() -> IsLegal() -> DoTheyFit() > > DoTheyFit() returns a failure in this case which is as far as I > can tell > due to the pre-existing protective MBR on my disk. > > Printing the MBR using recovery (r) and (o) for the existing MBR > gives: > > >>Recovery/transformation command (? for help): o > >> > >>Disk size is 1000215216 sectors (476.9 GiB) > >>MBR disk identifier: 0xB65D55C8 > >>MBR partitions: > >> > >>Number Boot Start Sector End Sector Status Code > >> 1 1 4294967295 primary 0xEE > > > The End Sector being larger than the disk size causes the > DoTheyFit() > check to fail. Since I am not an expert in this area I am not > sure if it > is safe to remove this check. > > > No, it's not. Your protective MBR violates the GPT specification. > The GPT specification (on pp. 97-98 of the EFI 2.3.1 specification) > clearly states that the protective MBR's 0xEE partition should begin > on sector 1 and have a size of one minus the size of the disk, or > 0xFFFFFFFF *if the disk is larger than can be represented in that > field*. Yours has that larger size but the disk is small enough that > a smaller protective MBR *should have* been used. > > That said, gdisk could handle the problem better than it does. I'll > look into improving it. > > > It makes some sense to me to remove this > check since as far as I understand the protective MBR should > cover at > least the entire disk. > > > No; as I say, the spec doesn't permit the field to be larger than > the disk size. > > > In fact for the protective MBR a more logical > check might be to fail if End Sector is smaller than disk size? > > > That would fail for over-2TiB disks and for disks that use hybrid > MBRs. (The latter technically violate the GPT spec, but Apple uses > them heavily on Macs that dual-boot with Windows, and sometimes with > other OSes. Thus, gdisk supports hybrid MBRs.) > > > I assume that gdisk normally creates a new protective MBR on an > empty > disk exactly equal to the size of the disk? > > > On sub-2TiB disks, yes. On larger disks, it creates a 0xEE partition > of the maximum possible size, as per the spec. > > > Since this error made me nervous about the health of my disk/data at > first and since my OEM (Lenovo) delivered this MBR in this state > from > factory, this could probably happen to others as well. Therefore I > wanted to share my findings in the hope that others may benefit. > > > You might consider filing a bug report with Lenovo, since their > as-delivered protective MBR was defective. Be sure it was as > delivered, though; if you used some other tool to resize your > Windows partitions, THAT tool may have damaged the protective MBR. > (Because gdisk can't shrink filesystems and most OEMs deliver > computers with all but trivial amounts of disk space pre-allocated, > I suspect that you did use something else to resize at least one > partition.) Some tools create fresh protective MBRs as a matter of > course. GParted and parted both do this, for instance, although > these tools create protective MBRs with appropriately-sized 0xEE > partitions. > > -- > Rod Smith > rod...@ro... <mailto:rod...@ro...> > http://www.rodsbooks.com > > -- Rod Smith rod...@ro... http://www.rodsbooks.com |