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
-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>