Re: [RFC] mount can figure out fstype automatically



On Tue, Jul 11, 2006 at 12:45:18PM +0100, Robert Watson wrote:

On Mon, 10 Jul 2006, Christoph Hellwig wrote:

On Mon, Jul 10, 2006 at 01:06:02PM -0600, Scott Long wrote:
So in your opinion and experience, what are the pros and cons of
maintaining a table of magic numbers?

The feature is imensely useful. The implementation won't win any points
for a clean design but works very well in practice. I think it's
definitly better than probing in the kernel because letting a filesystem
driver try to make sense of something that's not it's own format can lead
to all kinds of funnies. Linux does this (iterating all filesystem types
in kernel) for the special case of the root filesystem where mount(8) is
not available, and it showeds various interesting bugs at least in the fat
driver.

In both FreeBSD and Darwin, I've noticed that the kernel msdosfs code is
excessively permissive as to what it considers a FAT file system. This is
presumably necessary due to the enourmous diversity of FAT file systems
floating around, but it makes it a little too easy to cause msdos to trip
over layouts that violate its layout assumptions. :-) FAT is much more
reliably detected by looking at the partition type it lives in than by
looking at the bytes that appear inside the partition, I believe.

Assuming that there is a valid partition type. I don't really know what
this makes, but there's a valid FAT filesystem on it:

% truncate -s 1440k floppy
% sudo mdconfig -a -f floppy
md1
% sudo newfs_msdos -f 1440 /dev/md1
/dev/md1: 2847 sectors in 2847 FAT12 clusters (512 bytes/cluster)
bps=512 spc=1 res=1 nft=2 rde=224 sec=2880 mid=0xf0 spf=9 spt=18 hds=2 hid=0
% sudo mount -t msdos /dev/md1 /mnt
% df -h /mnt
Filesystem Size Used Avail Capacity Mounted on
/dev/md1 1.4M 1.0K 1.4M 0% /mnt
{ceri@shrike}-{~} % fdisk /dev/md1
******* Working on device /dev/md1 *******
parameters extracted from in-core disklabel are:
cylinders=0 heads=255 sectors/track=63 (16065 blks/cyl)

parameters to be used for BIOS calculations are:
cylinders=0 heads=255 sectors/track=63 (16065 blks/cyl)

Media sector size is 512
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:
<UNUSED>

Ceri
--
That must be wonderful! I don't understand it at all.
-- Moliere

Attachment: pgpMhINxkeA88.pgp
Description: PGP signature



Relevant Pages

  • Re: checking total and free space
    ... The df command will tell you how much space in the filesystem ... It tells you nothing about unallocated disk space. ... >> and the size of each partition to get the free space. ... Partition Tag Flags Sector Count Sector Mount Directory ...
    (comp.unix.solaris)
  • Re: [RFC] mount can figure out fstype automatically
    ... Linux does this (iterating all filesystem types ... excessively permissive as to what it considers a FAT file system. ... looking at the bytes that appear inside the partition, ... BIOS sector numbering starts with sector 1 ...
    (freebsd-arch)
  • Re: [RFC] mount can figure out fstype automatically
    ... Linux does this (iterating all filesystem types ... excessively permissive as to what it considers a FAT file system. ... looking at the bytes that appear inside the partition, ... BIOS sector numbering starts with sector 1 ...
    (freebsd-current)
  • Re: [RFC] mount can figure out fstype automatically
    ... Linux does this (iterating all filesystem types ... excessively permissive as to what it considers a FAT file system. ... looking at the bytes that appear inside the partition, ... BIOS sector numbering starts with sector 1 ...
    (freebsd-current)
  • RE: Change Tracks Per Sector on system Partition
    ... mirroring system partitions of a cluster to an offsite SAN due to differing ... We cannot physically read the file system boot sector usually at ... If your software mirror a Windows NT/2000/2003 operating system partition ... another disk that is translated as 32spt, ...
    (microsoft.public.windows.server.setup)