diff --git a/sys/geom/geom_bsd.c b/sys/geom/geom_bsd.c index dbca1754fc8e..b7402cf6a817 100644 --- a/sys/geom/geom_bsd.c +++ b/sys/geom/geom_bsd.c @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #define BSD_CLASS_NAME "BSD" #define ALPHA_LABEL_OFFSET 64 +#define HISTORIC_LABEL_OFFSET 512 #define LABELSIZE (148 + 16 * MAXPARTITIONS) @@ -536,6 +537,15 @@ g_bsd_taste(struct g_class *mp, struct g_provider *pp, int flags) /* First look for a label at the start of the second sector. */ error = g_bsd_try(gp, gsp, cp, secsize, ms, secsize); + /* + * If sector size is not 512 the label still can be at + * offset 512, not at the start of the second sector. At least + * it's true for labels created by the FreeBSD's bsdlabel(8). + */ + if (error && secsize != HISTORIC_LABEL_OFFSET) + error = g_bsd_try(gp, gsp, cp, secsize, ms, + HISTORIC_LABEL_OFFSET); + /* Next, look for alpha labels */ if (error) error = g_bsd_try(gp, gsp, cp, secsize, ms,