Hi Sarah, Caimans,

Sarah Jelinek wrote:
> I said:
>>
>> Target devices can then have symbolic names.  The symbolic name can 
>> be used in vdevs in zfs pool definitions.  Examples follow below.
>>
>> The default disk reference names are of the form "deviceN" where 
>> N=1....number of
>> devices.  A custom name for a disk can be created using element:
>>   ai_target_device/reference_name, and must be unique alphanumeric 
>> string with underscores.
>>
>
> What is the benefit of allowing the reference naming for a device? I 
> am not getting why we would want to add this level of indirection to 
> the device specification.
[I mistakenly referred to "reference names" as "symbolic names" above, 
so to recap...]
The reference names can be used in zfs pool definitions, so that you can 
automatically select disks by criteria  *other than disk name*, name 
them, then specify slices on them as vdevs in a pool or mirror.
 From the AI manifest example below, the second disk selected has a 
reference name:
   <reference_name>newpooldisk</reference_name>
Then a slice from the disk is used as a vdev from a zfs pool.  In 
section ai_zfs_pool:
<vdev>
      newpooldisk.s0  <!-- use selected disk named "newpooldisk", slice 
0 -->
</vdev>
The disk has to meet the manifest criteria of being over 30G.

Reference names are not used outside the manifest processing - they are 
in no way permanent.
>
>> Implementing root zfs pool (rpool)
>>
>> The manifest currently allows specification of rpool.
>> ai_target_device/install_slice_number indicates the root pool slice.  
>> If not specified, slice 0 of the 1st disk in the list is assumed to 
>> be the root.
>> A mirror slice vdev can be declared within the ai_target_device:
>>    - unique device identifier (ctds, mpxio, /device node, reference 
>> name of a selected disk)
>>    - slice number
>>    This results in the command:
>>   zpool create <poolname> <install slice> [<mirror vdev>]
>> If the pool exists, doing the "zpool create" will overwrite the 
>> existing pool.
> So, we are allowing the users to specify the root pool names? Or is 
> this for any pool? 
Yes, for any pool.  "rpool" is the hard-coded root pool name in the 
installer, and this will have to be carefully generalized.
> Also, if we overwrite the pool, we don't give the users a chance to 
> realize their mistake. Are we sure we want the default to be 
> overwrite? Maybe we should require they explicitly set an overwrite 
> flag or something to ensure they get what they thought they were 
> asking for.
Good point.  We will have flags that are required to overwrite the pool 
if it exists.
>
>>
>> The target_device_option_overwite_root_zfs_pool can be done as follows:
>> - import named rpool
>> - delete datasets that comprise the rpool, using "zfs destroy <dataset>"
>> - proceed with installation an usual
>>
> I assume these notes above are how we would implement overwriting the 
> existing zpool?
Yes.
>> zfs pool creation:
>> A pool consists of a set of vdevs.  At this time, the vdevs are 
>> slices, so they consist of a unique disk identifier (can be ctds, 
>> mpxio, /device, or reference name) plus a slice number.
>>
>> Mirrors consist of list of vdevs and can be listed in the same way.
>>
>> General definition for a zfs pool (not the root pool):
>> [reworked below]
>
> It isn't clear to me if we are going to allow:
> -naming of the root pool by the user?
> -Creation of multiple pools during AI, with user naming
>
> Are we allowing for both?
Yes.  Sorry this was unclear - I wrote this is a bit of a rush.
>
> Also, what zfs datasets will be created on the non-root pools? Are we 
> going to allow for specification of these?
The pseudo-XML for section ai_zfs_pool (reworked below) was intended for 
non-root ZFS pools.

Here is some pseudo-XML to create or reuse a *root* pool:
ai_zfs_root_pool
  action=create
  name - the pool name (defaults to rpool)
  id - the guid of an existing rpool, to resolve naming conflicts
  overwrite_existing_pool (if we want to reuse an existing pool without 
redefining it)
  mirror_type (regular mirror, raid, or raid2)
  mirror (0 or more mirror definitions, each specifying a slice to 
mirror the install slice)
/ai_zfs_root_pool

The root pool would be installed into a slice - a vdev list for root 
pools is not possible at the moment, I believe.

To delete a root pool as a separate action:
ai_zfs_root_pool
  action=delete
  name - the pool name
  id - the guid, to resolve naming conflicts
/ai_zfs_root_pool

General definition for a zfs pool (not the root pool):
ai_zfs_pool (zero or more ZFS pools)
  action=create
  name - the pool name
  vdevs (1 or more vdev definitions or a set)
  mirror_type (regular mirror, raid, or raid2)
  mirror (0 or more mirror definitions, each containing a list of vdevs)
  mountpoint (a zpool property)
  overwrite_existing_pool (if we want to reuse an existing pool without 
redefining it)
/ai_zfs_pool

ai_zfs_pool
  action=delete
  name  - the pool name
  id (the pool guid, if name conflict)
/ai_zfs_pool

NOTE: not all of the XML elements are shown here - the focus is on 
multiple device details.
>
>>
>> Format for vdev:
>>   disk_name - real (ctds, mpxio, /device node) or reference name of 
>> selected disk
>>   slice - valid slice number 0,1,3-7
>>
>> Example: install on boot disk, use some selected disk as raid2 
>> mirror, and use another selected disk over 30GB for zfs pool newpool 
>> mounted at /export1
>> <ai_target_device>
>>    <target_device_select_boot_disk>
>>    <mirror>mirrordev.s0</mirror> <!-- put mirror selected disk named 
>> "mirrordev", slice 0 -->
>>    <mirror_type>raid2</mirror_type>
>> </ai_target_device>
>> <ai_target_device>
>>    <reference_name>newpooldisk</reference_name>
>>    <target_select_min_size>30<target_select_min_size>
>>    <target_device_overwrite_disk/>  <!-- erase disk, use whole disk 
>> for slice 0 -->
>> </ai_target_device>
>> <ai_target_device>
>>    <reference_name>mirrordev</reference_name>
>>    <!-- assume that disk is appropriate for raid2 mirror -->
>>    <target_device_overwrite_disk/>  <!-- erase disk, use whole disk 
>> for slice 0 -->
>> </ai_target_device>
>> <ai_zfs_pool>
>>    <name>newpool</name>
>>    <mountpoint>/export1</mountpoint>
>>    <vdev>
>>       newpooldisk.s0  <!-- use selected disk named "newpooldisk", 
>> slice 0 -->
>>    </vdev>
>> </ai_zfs_pool>
>>
>> For further consideration:
>> rpool deletion:
>>   is there a use case for this? Should this be defined?
>> zfs pool deletion:
>>   is there a use case for this? Should this be defined?
>
> Seems to me If we want to allow for full management for users for 
> multiple disks, we should enable zpool deletion, rpool or otherwise. 
> We need to work through the use cases for when we will either 
> automatically delete a pool or when we require user specification to 
> do this.
So we will require actions (create, delete) for pools as we do for 
slices and partitions, then.

Thank you,
William
>
> thanks,
> sarah
> ******
>>
>> Not addressed:
>> - reusability issues - if a manifest specifying non-root zfs pools is 
>> re-used, what happens to the existing pools?  Are they verified in 
>> any manner?
>> - use of /var as a separate zfs volume
>>
>> A proposed updated RNG schema, ai_manifest.rng, will be posted with 
>> examples.
>>
>> Again, comments from the OpenSolaris community are desired.
>> _______________________________________________
>> caiman-discuss mailing list
>> caiman-discuss at opensolaris.org
>> http://mail.opensolaris.org/mailman/listinfo/caiman-discuss
>

Reply via email to