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>


Reply via email to