Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Dec 2012 02:00:18 +0100
From:      Miroslav Lachman <000.fbsd@quip.cz>
To:        freebsd-geom@FreeBSD.org
Subject:   4k alignment of MBR slices / BSD partitions is not working correctly
Message-ID:  <50C7D722.9090809@quip.cz>

next in thread | raw e-mail | index | archive | help
There is a problem with fdisk and gpart as discussed below this blogpost
http://ivoras.net/blog/tree/2011-01-01.freebsd-on-4k-sector-drives.html

Alignment works with GPT schema, but not with MBR.

Both tools - fdisk and gpart - are doing some auto corrections causing 
misalignment of partitions.

It is even worse, that user can create an aligned slices with 
interactive fdisk and resulting setup cannot be restored later by some 
script.

This is on FreeBSD 9.1-RC3 amd64 GENERIC


# echo 'p 1 165 64 40G' | fdisk -f - /dev/mirror/gm0
******* Working on device /dev/mirror/gm0 *******
fdisk: WARNING: adjusting start offset of partition 1
     from 64 to 126, to fall on a head boundary
fdisk: WARNING: adjusting size of partition 1 from 83875301 to 83875239
     to end on a cylinder boundary


Resulting slice is not starting on requested 64, but on 126


Again with the gpart and MBR scheme

# gpart create -s mbr mirror/gm0
mirror/gm0 created

# gpart add -b 64 -s 40g -t freebsd mirror/gm0
mirror/gm0s1 added

# gpart show -p mirror/gm0
=>        63  1951475648    mirror/gm0  MBR  (930G)
           63          63                - free -  (31k)
          126    83886012  mirror/gm0s1  freebsd  (40G)
     83886138  1867589573                - free -  (890G)


Silently changed from 64 to 126 (63)



Next test with gpart -a 4k

# gpart create -s mbr mirror/gm0
mirror/gm0 created

# gpart add -a 4k -s 40g -t freebsd mirror/gm0
mirror/gm0s1 added

# gpart show -p mirror/gm0
=>        63  1951475648    mirror/gm0  MBR  (930G)
           63          63                - free -  (31k)
          126    83886012  mirror/gm0s1  freebsd  (40G)
     83886138  1867589573                - free -  (890G)


Same wrong result as in previous test


But it can be set correctly with interactive fdisk in 9.1-RC3 
(impossible in older releases)

sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
     start 63, size 1951463682 (952863 Meg), flag 80 (active)
         beg: cyl 0/ head 1/ sector 1;
         end: cyl 640/ head 254/ sector 63
Supply a decimal value for "sysid (165=FreeBSD)" [165]
Supply a decimal value for "start" [63] 64
Supply a decimal value for "size" [1951463682] 83886080
fdisk: WARNING: partition does not start on a head boundary
fdisk: WARNING: partition does not end on a cylinder boundary
fdisk: WARNING: this may confuse the BIOS or some operating systems
Correct this automatically? [n] n
Explicitly specify beg/end address ? [n]



Result shown by gpart

# gpart show -p mirror/gm0
=>        63  1951475648    mirror/gm0  MBR  (930G)
           63           1                - free -  (512B)
           64    83886080  mirror/gm0s1  freebsd  [active]  (40G)
     83886144  1867577602  mirror/gm0s2  freebsd  (890G)
   1951463746       11965                - free -  (5.9M)


But the worst problem is, that now it cannot be backed up and restored!


# gpart backup mirror/gm0
MBR 4
1 freebsd         64   83886080   [active]
2 freebsd   83886144 1867577602


# gpart backup mirror/gm0 > gm0.gpart.backup

# gpart destroy -F /dev/mirror/gm0
mirror/gm0 destroyed

# gpart restore mirror/gm0 < gm0.gpart.backup

# gpart show -p mirror/gm0
=>        63  1951475648    mirror/gm0  MBR  (930G)
           63          63                - free -  (31k)
          126    83886012  mirror/gm0s1  freebsd  [active]  (40G)
     83886138          63                - free -  (31k)
     83886201  1867577544  mirror/gm0s2  freebsd  (890G)
   1951463745       11966                - free -  (5.9M)


I think that some tools need to be fixed. I vote for fdisk & gpart 
allowing to do what is user asking to do (maybe with some "use force" 
switch) or disallow interactive fdisk to create partitioning which 
cannot be restored later.

I would like to discuss it here before creating PR.

Miroslav Lachman



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50C7D722.9090809>