Sundar, I wanted to quickly respond to these points of yours: >> -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.
and >> -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. The idea behind these is that it would allow a manifest to be reused without modifying the original slice/partition specifications. William Sundar Yamunachari wrote: > 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 >> >