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.
I'd like to see support for creating other partition types besides Solaris. At the very least, Windows partitions suitable for placing FAT32 file systems for data interchange, since that's our only native intersection with Linux or Windows presently. Deletion of partitions by number and/or type would seem to be useful and more flexible than exact matches by sector number and size. The slice design seems (based on the "install to slice 0, swap in slice 1" behavior noted) not flexible enough to address one of the primary requirements, which is to allow installation in parallel with other Solaris instances, allowing co-existence with other Solaris versions that might already be present. Dave > ------------------------------------------------------------------------------------------------------------------------------------------------ > 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 > -require Solaris2 only or support creation of other > partition types > -if partition_size is not specified, > create partition, to end of disk or start of next partition > -if partition already exists and is of indicated size, > log and return success instead of failing > > 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' > -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 > > 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 > -if slice_size element is missing, > create slice, using largest available unallocated space > -if slice already exists and is of indicated size, > log and return success instead of failing > delete: > Delete listed slices by number > > <element name="slice_number"> > <element name="slice_size"> - required by parser, but otherwise > ignored > > 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 > > 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 > Other disk target contents: > <element name="target_device_overwrite_root_zfs_pool"> > Cannot find where this is currently implemented > > Overall changes to consider: > ? > > 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