2021-02-19
ZFS pool partial (selective) feature upgrades are coming in OpenZFS
I'm an active user of (Open)ZFS on Linux on
my personal machines (office workstation and home Linux machine), where
I deliberately run the very latest development versions. But if you ran
'zpool status
' on either machine, you would see a lot of:
status: Some supported and requested features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details.
(This verbose message irks me for other reasons.)
The reason for this is exactly that I run the latest development
versions. Right now, if you run 'zpool upgrade
' you get no choice
about what happens; your pools are upgraded to support absolutely
all of the features that the code you're running knows about. The
same thing happens by default when you create a pool (although you
can specify exact features if you know what you're doing). For
people like me, who have old pools but are running the very latest
development versions, this is dangerous. I don't want to enable ZFS
pool features that aren't enabled in any released version yet in
case I have to revert back to using a stable, released version of
(Open)ZFS.
The good news is that OpenZFS's development version just landed
a fix for this,
in fact a very general one. The simple version is that there's a
new ZFS pool property called 'compatibility
'; if set, it limits
what features a pool will be created with or upgraded to. You can
set it to a wide variety of general choices,
which include things like 'OpenZFS 2.0 on Linux' and 'what Grub2
will support'.
(As a side effect, looking at the files that defines these options will tell you what's supported, or believed to be supported, on various platforms.)
Since this is a ZFS pool property, I believe that the way to
selectively (or partially) upgrade an existing pool created with
no compatibility option set is to do 'zpool set compatibility=...
'
to whatever before hand and then run 'zpool upgrade
'. This is
somewhat underdocumented right now (from my perspective) and I
rather wish that 'zpool upgrade
' itself could take what to upgrade
to (well, what to limit upgrades to) as an explicit argument, the
way 'zpool create
' does. I suppose that setting a pool property
(and then leaving it there) is safer than relying on never accidentally
running a 'zpool upgrade
' with no restrictions.
Another useful side effect of the compatibility
pool property, at
least according to the documentation, is that apparently 'zpool
status
' will no longer nag you if your pool supports all of the
features that are allowed by its compatibility
setting, even if that's
a very low one. This may finally get 'zpool status
' to shut up about
this for me, someday.
(I won't be taking advantage of this feature to finally upgrade my pools to the OpenZFS 2.0 level until a bit more time has passed and other people have found any problems with it. The development version of ZFS is well tested, but I'm still cautious.)
This is a quality of life improvement that many OpenZFS users will never really notice, but for system administrators and people like me it's going to be great. Since one of the compatibility options is 'Grub2', it will probably also help people on Linux who want to use ZFS for their root filesystem.
PS: I don't know when (or if) this will be merged back into Illumos. I don't believe that OpenZFS is attempting to explicitly drive this; instead I believe they leave it up to the Illumos developers to pull in OpenZFS changes of interest. As far as Linux goes, I suspect that this won't be part of any 2.0.x update and will likely wait for 2.1.0, whenever that happens.