Messages in this thread | | | From | Jonathan Woithe <> | Subject | UFS/Disklabel strangeness | Date | Tue, 23 Feb 1999 16:23:34 +1030 (CST) |
| |
Hi all
I've been poking around the UFS/Disklabel code in an attempt to read a Jaz disk formatted under FreeBSD. The UFS code is fine - the trouble is that the disklabel code has trouble registering the BSD partition's existance.
The jaz disk in question had been formatted under FreeBSD using disklabel -rwB sd0 auto newfs sd0c
As far as i can tell, the w flag with the B flag causes a bootstrap to be written to sector 0 of the disk which *includes* a dummy fdisk partition table. When FreeBSD fdisk is executed on the resulting disk, one gets %/sbin/fdisk /dev/sd0 ******* Working on device /dev/sd0 ******* parameters extracted from in-core disklabel are: cylinders=1021 heads=64 sectors/track=32 (2048 blks/cyl)
parameters to be used for BIOS calculations are: cylinders=1021 heads=64 sectors/track=32 (2048 blks/cyl)
Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: <UNUSED> The data for partition 2 is: <UNUSED> The data for partition 3 is: <UNUSED> The data for partition 4 is: sysid 165,(FreeBSD/NetBSD/386BSD) start 0, size 50000 (24 Meg), flag 80 beg: cyl 0/ sector 1/ head 0; end: cyl 1023/ sector 63/ head 255
In addition, subsequent disklabel commands under FreeBSD give %/sbin/disklabel /dev/sd0 # /dev/sd0: type: unknown disk: label: flags: bytes/sector: 512 sectors/track: 32 tracks/cylinder: 64 sectors/cylinder: 2048 cylinders: 1021 sectors/unit: 2091050 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # milliseconds track-to-track seek: 0 # milliseconds drivedata: 0
3 partitions: # size offset fstype [fsize bsize bps/cpg] c: 2091050 0 unused 0 0 # (Cyl. 0 -1021*)
and this is what is visible to Linux's disklabel/partitioning code. Therefore detection of the FreeBSD filesystem fails on 2 counts: 1) the disklabel "partition" used by newfs is marked as not in use 2) the linux code in check_and_add_bsd_partition() detects an apparent overlap of partitions (between the BSD partition and those defined in the disklabel) and exits without doing anything
If the kernel is hacked to ignore these 2 issues, the resulting partition (on /dev/sda5) mounts as ufs and is quite usable.
(1) is not too hard to circumvent - a few lines of (non-kernel) source code can fix that. (2) is a problem through. Looking through the code, the overlap test will cause nothing to be done if a disklabel partition is equal to a partition-table partition in addition to the overlap trouble already mentioned so simply resetting the partition table to include the whole disk won't help. Therefore I'm not sure what exactly to do here - is the kernel at fault and if so, how can the code be rewritten consistantly? The type of the partition isn't visible to check_and_add_bsd_partition(); is it safe to ignore such overlaps? - if BSD is at fault, how can the disk be set up to allow Linux to read it?
A related fault is that this jaz disk's disklabel can't be read under Linux fdisk since Partition /dev/sda4 has invalid starting sector 0 according to fdisk. It could be argued though that this is a result of the bogus fdisk partition entry so i'm not all that fussed about it.
Comments and suggestions welcome, even if i've missed something obvious. :)
jonathan -- * Jonathan Woithe jwoithe@physics.adelaide.edu.au * * http://www.physics.adelaide.edu.au/~jwoithe/home.html * ***-----------------------------------------------------------------------*** ** "Time is an illusion; lunchtime doubly so" ** * "...you wouldn't recognize a subtle plan if it painted itself purple * * and danced naked on a harpsicord singing 'subtle plans are here again'" *
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |