NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/48808

The following reply was made to PR kern/48808; it has been noted by GNATS.

From: "Thomas Schmitt" <>
Subject: Re: kern/48808
Date: Wed, 14 May 2014 18:17:03 +0200

 I can now answer the question about partitioned devices, which
 are not cd but rather wd (XXX in cd9660_mount.h):
 Mounting of /dev/wdX? is indeed handled by cd9660_vfsops.c
 differently than with /dev/cdX?.
 A hard disk partition is used with its own block addressing
 which starts by 0.
 A cd "partition" is used with the block addressing of the
 base device /dev/cdXd and a superblock offset given by the
 cd "partition" start.
 I will have to clarify the man page.
 Not easy to explain ... would this text be understandable ?
   -s block_offset
      Read the superblock from a block address, which is computed by
      adding block_offset to the default superblock offset implied by
      the choice of the device file.  The block size is 2048 bytes.
      Optical drives /dev/cd* with unformatted media are handled
      differently than other storage partitions.  /dev/cd?d points to
      the start of the first and oldest logical track on the loaded
      medium. /dev/cd?a points to the last and youngest logical track.
      Nevertheless all block addressing is done relative to /dev/cd?d.
      Only the default offset is taken from /dev/cd?a, if that one is
      used. This matches the needs of ISO-9660 multisession on
      unformatted optical media.
      Formatted optical media and other kinds of storage partitions
      show no such default superblock offsets. Nevertheless they may
      bear several ISO-9660 sessions. Usually the superblock at offset
      0 leads to the youngest session.
      Other ISO-9660 sessions can be mounted by help of option -s with
      a block_offset which can be obtained from burn software for
      optical media. Among the /dev/cd* devices, use /dev/cd?d for this
 I have to stress that this situation is not created by my new option.
 It just adds a user-defined offset to the mess described above.
 My experiment:
 (Thanks to
 disklabel wd1 reports about my virtual MBR-formatted USB stick:
   #        size    offset     fstype [fsize bsize cpg/sgs]
    d:  10485760         0     unused      0     0        # ...
    e:   1606437        63 Linux Ext2      0     0        # ...
    f:   8867880   1606500 Linux Ext2      0     0        # ...
 Permissions are set quite liberally
   brw-r--r--  1 root  operator  0, 11 Feb  7 18:01 /dev/wd1d
   brw-rw-rw-  1 root  operator  0, 12 Feb  4 17:37 /dev/wd1e
   brw-rw-rw-  1 root  operator  0, 13 Feb  4 17:37 /dev/wd1f
 I write an ISO image into partition 1
   xorriso -outdev stdio:/dev/wd1e \
           -blank as_needed \
           -map libisofs-1.3.6 /libisofs-1.3.6
 xorriso can load the result and report about its files.
 Inspection with a hex dumper shows that the ISO 9660 Primary
 Volume Descriptor indeed is stored 63 * 512 + 16 * 2048 bytes
 after start of /dev/wd1d. All as expected for a partition
 with start at 512-block 63.
 So if partition /dev/wd1e can be mounted, then not with block
 addresses relative to /dev/wd1d (as would be done with with
 /dev/cd0a and /dev/cd0d). The offset of 63 * 512 would disalign
 all block addresses of the ISO which counts 2048-blocks.
 Well, mounting works fine:
   mount_cd9660 /dev/wd1e /mnt/iso
   ls -l /mnt/iso
   find /mnt/iso | less

Home | Main Index | Thread Index | Old Index