Endian issues, LE write to BE partitions

Sean Bruno sean_bruno at yahoo.com
Wed Oct 2 16:56:40 UTC 2013


On Wed, 2013-10-02 at 09:44 -0700, John-Mark Gurney wrote:
> Sean Bruno wrote this message on Wed, Oct 02, 2013 at 09:15 -0700:
> > Using makefs from an amd64 host to build a f/s in a VTOC8 partition will
> > destroy the entire partition table.  I simplified the test to simple dd
> > to an existing partition and got the same result, exonerating mkfs
> > 
> > I suspect a lack of endian knowledge in geom itself, not
> > geom_part_vtoc8.  
> > 
> > test case:
> > 	using amd64 host (10.0 current) create monolothic image
> > 		truncate -s+5G /var/tmp/myfile.img
> > 		mdconfig -f /var/tmp/myfile.img
> >         build and load geom_part_vtoc8 kernel module
> > 	use gpart to create VTOC8 part table
> > 	add partition to part table to yeild the following:
> > 
> > =>       0  10442250  md0  VTOC8  (5.0G)
> >          0  10442250    1  freebsd-ufs  (5G)  
> 
> This looks like a user error, or an issue that VTOC allows you to
> create/write to a partition that covers the label metadata...  So this
> is most definately a VTOC8 issue...  VTOC8 should at least return an
> error when trying to write sectors that contain it's metadata..
> 
Do you mean "user error" in that I personally executed a command that
should not have been run or "user error" in that the geom_part_vtoc8
"user" should not allow me to dd to the partition?

I suspect that on a g_write() from geom_part_vtoc8, the data is not be
swapped around correctly.  Should the geom_part_vtoc8 module be swapping
the data in this case (writing from a LE machine to a BE f/s)?

> newfs actually skips the first few KB of the disk because bsdlabels
> would do the same thing...
> 

I would prefer to use newfs in this case actually, but it has no
knowledge of how to write Big Endian f/s on Little Endian systems.
Hence I was stuck with trying to use makefs in this case to get the f/s
populated.

Unless I'm mistaken, if I use newfs on this disk image from my amd64
host, it will get a little endian f/s.  I'm assuming that this is part
of my current problem.

> This sounds like makefs is writing to the first few KB of the disk
> unlike newfs which probably doesn't (because it knows it might be on
> a partitioned disk and could destroy the partition table)...

makefs, in this case, isn't really doing anything wrong here.  Like dd,
its using the target device as a destination for a file system creation.
That's why I switched my test case over to dd, from makefs, for
simplification of the problem.
> 
> > 	dd to md0a from dev zero for just a bit
> > 		dd if=/dev/zero of=/dev/md0a bs=64k count=100
> > 
> > 	destroy md0 via mdconfig -d -u 0
> > 	recreate it with mdconfig -f /var/tmp/myfile.img
> > 
> > 	gpart displays no partions for the image any more:
> > 		gpart: No such geom: md0.
> > 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20131002/5a62008e/attachment.sig>


More information about the freebsd-fs mailing list