William, William Schumann wrote: > Through the automated installer, fdisk partitions and VTOC slices can be > designed and managed on target disks. > > These features are not yet documented or specified. I am appending a > document that describes the current implementation. I am seeking > feedback on functionality, both current and proposed, ideas for > enhancements, and I would like for us to reach a consensus on how this > should work. > ------------------------------------------------------------------------------------------------------------------------------------------------ > Automated Installer fdisk partition and VTOC slice management options > > This is configured through an XML manifest that conforms to the Relax NG > schema file, ai_manifest.rng. > > fdisk partition operations (x86-only): > create: > Creates a partition at a sector address of a given length in sectors > > <element name="partition_number"> - required by > parser, but otherwise ignored > <element name="partition_start_sector"> > <element name="partition_size"> - length in sectors > <element name="partition_type"> - required by > parser, but otherwise ignored > creates Solaris2 only > > Current behavior details: > -If partition size is zero, space to end of disk is allocated > -when overlapping partitions are defined, fdisk detects this > and fails > -coded, not in repo: added element for specifying partition > size units > > Changes to consider: > -make partition type optional with a default of Solaris2 > Since we support only creating Solaris2, it could be optional during create and deleting an existing partition requires partition type. Once we start support creating other partition type, we could revisit this area. > -require Solaris2 only or support creation of other > partition types > Installer should create only Solaris partitions. We should have a separate tool to create partitions of other type. > -if partition_size is not specified, > create partition, to end of disk or start of next partition > This will be confusing. we should use a keyword to indicate that the user wants to create a max size partition that uses remaining space. We should not make size as optional for create. > -if partition already exists and is of indicated size, > log and return success instead of failing > Size doesn't matter. Only one Solaris partition is allowed. If there is an existing Solaris partition and the user wants to create another, we should return error. The user should delete the old one. We can process the delete request first before processing create request. > > delete: > Deletes a partition of specified length at specified sector > > <element name="partition_number"> - required by > parser, but otherwise ignored > <element name="partition_start_sector"> > <element name="partition_size"> - length in sectors > <element name="partition_type"> - required by > parser, but otherwise ignored > > Current behavior details: > exact match required on start sector and size > > Changes to consider: > -either eliminate partition number element or implement > 'delete by partition number' > We want this because fdisk tool doesn't provide starting sector (it displays cylinders). We could make this parameter optional. > -add feature to create partition of a given size in the > unoccupied block that fits best > -in the same way it is currently done for slices (below) > -user would not have to specify starting sector > -this would be the behavior if a starting sector was not > specified > That is a good idea. The user just provide size and partition type and the install code figures out where to create the partition. > VTOC slice operations (x86 or SPARC): > create: > Create a VTOC slice given number and size > > <element name="slice_number"> > <element name="slice_size"> - length in sectors > > Current behavior details: > -uses best fit policy for choosing location of slice > -if slice_size is zero, creates slice using largest free region > -installation always in slice 0 > -swap/dump slice may be created using slice 1, > unless user creates or preserves slice 1, > -if slice already exists, failure > Changes to consider: > -add slice size units, defaulting to MB > Sounds good. May be we can support MB, and GB along with sectors > -if slice_size element is missing, > create slice, using largest available unallocated space > We should have a special value to denote the largest available size like 'max_size' (similar to the comment made in the partition above) > -if slice already exists and is of indicated size, > log and return success instead of failing > Again, we want the action to be explicit. Delete the existing slice and create a new slice. This will reduce confusion. > delete: > Delete listed slices by number > > <element name="slice_number"> > <element name="slice_size"> - required by parser, but otherwise > ignored > > We can make slice size as optional since multiple actions create/delete/preserve share the schema > Current behavior details: > if slice does not exist, failure > preserve: > Preserve listed slices, implicitly deleting any slices not named > in manifest > > <element name="slice_number"> > <element name="slice_size"> - required by parser, but otherwise > ignored > > Current behavior details: > if slice does not exist, failure > It is okay for now but I think that this is a warning and we don't need to fail. > Disk target contents > Selection criteria: > <element name="target_device_use_solaris_partition"> - boolean: > "true"or "false" > If "true", signals AI to select a disk that already has a > Solaris2 partition > Other selection criteria: > <element name="target_device_name"> > <!-- device name like c0t0d0 or MPXIO name like > c0t2000002037CD9F72d0 --> > <element name="target_device_type"> > <element name="target_device_vendor"> > <element name="target_device_size"> > > Changes to consider: > add "target_device_devid_contains" - user specifies a > substring of the devid > Can you provide an example for this change? > Other disk target contents: > <element name="target_device_overwrite_root_zfs_pool"> > Cannot find where this is currently implemented > Take a look at the bug 1771 and 3783. > Overall changes to consider: > ? > Currently we install only on slice 0. We could add an install action and get the slice where OpenSolaris can be installed.
Thanks, Sundar > Notes: > any failures mentioned here result in install failure > 1 sector = 512 bytes > > The remainder of this message is code segments for reference. > > Excerpts from auto_install.h: > typedef struct { > char diskname[MAXNAMELEN]; > char disktype[MAXNAMELEN]; > char diskvendor[MAXNAMELEN]; > uint64_t disksize; > char diskusepart[6]; /* 'true' or 'false' */ > char diskoverwrite_rpool[6]; /* 'true' or 'false' */ > } auto_disk_info; > > typedef struct { > char partition_action[MAXNAMELEN]; > int partition_number; > uint64_t partition_start_sector; > uint64_t partition_size; > int partition_type; > } auto_partition_info; > > typedef struct { > char slice_action[MAXNAMELEN]; > int slice_number; > uint64_t slice_size; > } auto_slice_info; > > Excerpts from Relax NG schema ai_manifest.rng: > <!-- > ======================================================================= > Selections for AI target Device specification > ======================================================================= > --> > <define name="ai_target_device_contents"> > <interleave> > <optional> > <!-- device name like c0t0d0 or > MPXIO name like c0t2000002037CD9F72d0 --> > <element name="target_device_name"> > <text/> > </element> > </optional> > <optional> > <element name="target_device_type"> > <text/> > </element> > </optional> > <optional> > <element name="target_device_vendor"> > <text/> > </element> > </optional> > <optional> > <element name="target_device_size"> > <text/> > </element> > </optional> > <optional> > <element name="target_device_use_solaris_partition"> > <data type="boolean"/> > </element> > </optional> > <optional> > <element name="target_device_overwrite_root_zfs_pool"> > <data type="boolean"/> > </element> > </optional> > </interleave> > </define> > > <!-- > ======================================================================= > Selections for AI target device partitions specification > ======================================================================= > --> > <define name="ai_device_partitioning_contents"> > <interleave> > <element name="partition_action"> > <choice> > <value>create</value> > <value>delete</value> > </choice> > </element> > <element name="partition_number"> > <data type="unsignedByte"/> > </element> > <element name="partition_start_sector"> > <data type="unsignedLong"/> > </element> > <element name="partition_size"> > <data type="unsignedLong"/> > </element> > <element name="partition_type"> > <data type="unsignedByte"/> > </element> > </interleave> > </define> > > <!-- > ======================================================================= > Selections for AI target device vtoc slices specification > ======================================================================= > --> > <define name="ai_device_vtoc_slices_contents"> > <interleave> > <element name="slice_action"> > <choice> > <value>create</value> > <value>delete</value> > <value>preserve</value> > </choice> > </element> > <element name="slice_number"> > <data type="unsignedByte"/> > </element> > <element name="slice_size"> > <data type="unsignedLong"/> > </element> > </interleave> > </define> > > _______________________________________________ > caiman-discuss mailing list > caiman-discuss at opensolaris.org > http://mail.opensolaris.org/mailman/listinfo/caiman-discuss >