gpart failing with no such geom after gpt corruption

Bartosz Stec bartosz.stec at
Thu Apr 1 13:41:03 UTC 2010

Hello ZFS and GPT hackers :)

I'm sending this message to both freebsd-current and freebsd-fs because 
it doesn't seems to be a CURRENT-specific issue.

Yesterday I tried to migrate my mixed UFS/RAIDZ config to clean RAIDZ 
with GPT boot. I've following mostly this guide:
I'm using CURRENT on 3x40GB HDDs (ad0-ad3) and additional 250GB HDD has 
been used for data migration (ad4).

Data was copied form RAIDZ to 250GB HDD, GPT sheme was created on  40GB 
HDDs, then new zpool on them, and finally data went back to RAIDZ. 
Booting from RAIDZ was succesful, so far so good.

After a while I've  noticed some SMART errors on ad1, so I've booted 
machine with seatools for dos and made long test. One bad sector was 
found and reallocated, nothing to worry about.
As I was in seatools already, I've decided to adjust LBA size on that 
disk (seatools can do that), because it was about 30MB larger than the 
other two, and because of that I had to adjust size of freebsd-zfs 
partition on that disk to match exact size of others (otherwise 'zpool 
create' will complain). So LBA was adjusted and system rebooted.

Yes, I was aware that changing disk size probably end with corrupted GPT 
and data loss, but it doesn't seem to be a big deal for me as far as 2/3 
of zpool is alive, because I can always recreate gpt and resilver ad1.

Unfortunately it wasn't so easy. First of all system booted, and as I 
expected kernel message shows GPT error on ad1. Zpool was degraded but 
alive and kicking. However, when I tried to execute any gpart command on 
ad1, it return:

    ad1: no such geom

ad1 was present under /dev, and it could be accessed by 
sysinstall/fdisk, but no with gpart. I've created bsd slice with 
sysinstall on ad1 and rebooted, with hope that after reboot I could 
acces ad1 with gpart and recreate GPT scheme. Another surprise - system 
didn't boot at all, rebooting after couple of seconds in loader 
(changing boot device didn't make a difference).

Only way I could boot system at this moment was connecting 250GB HDD 
which fortunately still had data from zpool migration and boot from it. 
Another surprise - kernel was still complaining about GPT corruption on 
ad1. I had no other ideas so I ran

    dd if=/dev/zero of=/dev/ad1 bs=512 count=512

to clear beginning of the hdd. After that disk was still unaccesible 
fromt gpart, so I tried sysinstall/fdisk againt to create standard BSD 
partitioning scheme and rebooted system.
After that finally gpart started to talk with ad1 and GPT scheme and 
zpool has been recreated and work as it supposed to.

Still, how can we clear broken GPT data after it got corrupted?
Why gpart has been showing "ad1: no such geom", and how can we deal with 
this problem?
Finally, why gptzfsboot failed with GPT corrupted on other disk after 
trying to fix it, while it booted at first place?

Or maybe changing LBA size of already partitioned HDD is extreme case, 
and the only way these problems could be triggered ;)?


Bartosz Stec

More information about the freebsd-current mailing list