This email is a summarization of the current proposal for easing the task of 
creating OS portable pools with zpool create.  There's been a ton of discussion 
around this feature and we wanted to summarize the current discussion in 
preparation for tomorrow's meeting:

Add new options to "zpool create", "zpool upgrade", and "zpool set":
   - zpool create -o features=portable-20XX (yearly values)
   - zpool create -o features=portable
   - zpool upgrade -o features=portable-20XX
   - zpool upgrade -o features=portable
   - zpool set feature@portable=20XX
   - zpool set feature@portable=enabled

"-o features=portable-2016" means features that were supported by all tier-1 
platforms at the beginning of 2016.  This
 definition will not change over time.  Specifically, on January 1, 2016, the 
following all supported the features:
     - a numbered release of FreeBSD (specifically FreeBSD 10.2 for 
portable-2016)
     - a numbered release of ZFSonLinux (specifically ZoL 0.6.5.3 for 
portable-2016)
     - the code in illumos-gate as of 1 year prior (specifically Jan 1 2015 for 
portable-2016).

Similar yearly portable values will be created at the beginning of each year.

(Side note: the proposal is for "features=portable" to be able to have 
additional features beyond "features=portable-<currentyear>".  I.e. it can 
change throughout the year.  On January 1st, we would add 
"features=portable-<currentyear>" which would have the definition as 
"features=portable" on January 1, but remain static.)

"-o features=portable" means that features that are currently supported by all 
tier-1 platforms.  This definition will change over time.  Specifically, as of 
the current date, the following all supported the features:
   - a numbered release of FreeBSD (currently FreeBSD 11.2)
   - a numbered release of ZFSonLinux (currently ZoL 0.7.12)
   - the code in illumos-gate as of 1 year prior (currently December 7, 2017, 
commit b8e5ecd6 for bug 8895).

>From these definitions, users can make the following conclusions:
 - I upgraded this machine sometime in 2017, therefore if I want to bring a 
pool to it, I can use "-o features=portable-
   2017" or earlier.
 - I case of an emergency or change in strategy, I want to be able to bring 
this pool to another operating system.  I can 
   upgrade or install the other OS when I need to.  Therefore I can use "-o 
features=portable".

Remember the last "features=" value that was used with "zpool create" or "zpool 
upgrade".  If it's a static value (portable-20XX), "zpool upgrade" would not do 
anything unless you give a force flag.  If it's the dynamic value 
("features=portable") then "zpool upgrade" would require a force flag unless 
we're enabling a feature that's allowed by the current definition of 
"portable".  So running "zpool upgrade <pool>" or "zpool upgrade -a" would 
always be "safe" in that it respects the "features=portable*" setting last made.

"zpool status" would only alert if "zpool upgrade <pool>" would do something.  
I.e. If you did "features=portable-20XX", then "zpool status" would never tell 
you about unavailable features.  If you did "features=portable", then when you 
upgrade to newer software that has additional "portable" features, then "zpool 
status" would prompt you to upgrade.

For now the default behavior of "zpool create" remains the same.  If we find 
something that we think works well then a future consideration would be making 
"zpool create" imply "-o features=portable" by default, and "zpool upgrade 
<pool>|-a" imply "-o features=portable" by default.

This proposal as it sits applies to data pools only.  Portability of boot pools 
is currently not a consideration.

-- 

Thanks,

Josh Paetzel

------------------------------------------
openzfs: openzfs-developer
Permalink: 
https://openzfs.topicbox.com/groups/developer/Td66d70a086ae5a9e-M479ea9418dc7518cd53a07fc
Delivery options: https://openzfs.topicbox.com/groups/developer/subscription

Reply via email to