OpenZFS

Logo of the OpenZFS project

The OpenZFS is an umbrella project aimed at bringing together individuals and companies that use the ZFS file system and work on its improvements, aiming as well at making ZFS more widely used and developed in a true open-source manner.[1][2][3]

OpenZFS brings together developers from the illumos, Linux, FreeBSD and OS X platforms, and a wide range of companies.[4][5] High-level goals of the project include raising awareness of the quality, utility and availability of open-source implementations of ZFS, encouraging open communication about ongoing efforts toward improving open-source variants of ZFS, and ensuring consistent reliability, functionality and performance of all distributions of ZFS.[6]

Illumos, which derived from OpenSolaris, provides upstream source code for other ZFS implementations.[7] While there are various differences between the illumos ZFS codebase and other open-source implementations of ZFS,[8] OpenZFS is strategically reducing existing platform-related differences in order to ease sharing of the source code.

Founding members of OpenZFS include Matt Ahrens, one of the main architects of ZFS.[6]

History

ZFS file system was originally developed by Sun Microsystems for the Solaris operating system. The ZFS source code was released in 2005 under the Common Development and Distribution License (CDDL) as part of the OpenSolaris operating system, and it was later ported to other operating systems and environments.[9][10]

As the FSF claimed a CDDL and GPL legal incompatibility in 2005, Sun's implementation of the ZFS file system wasn't used as a basis for the development of a Linux kernel module, it wasn't merged into the Linux kernel mainline, and Linux distributions did not include it as a precompiled kernel module.[11][12] As a workaround, FUSE, a framework that allows file systems to run in userspace, was used on Linux as a separation layer for which the licensing issues are not in effect, although with a set of its own issues that include performance penalty.[10][13] However, the April 2016 release of Ubuntu 16.04 LTS includes CDDL-licensed ZFS on Linux[14] as a kernel module that is maintained as a separate project, outside the Linux kernel mainline, claiming license compatibility.[15][16][17]

The following is a list of key events to the development of ZFS and its various implementations, leading to the creation of OpenZFS as an umbrella project:[9][18]:6,15

Pool versions and feature flags

Originally, version numbers of the pool and file system were incremented as new features were introduced, in order to designate the on-disk file system format and available features. This worked well when a single entity controlled the development of ZFS, and this versioning scheme is still in use with the ZFS in Oracle Solaris.[24][25]

In a more distributed development model, having a single version number is far from ideal as all implementations of OpenZFS would need to agree on all changes to the on-disk file system format. The solution selected by OpenZFS was to introduce feature flags as a new versioning system that tags on-disk format changes with unique names, and supports both completely independent format changes and format changes that depend on each other. A pool can be moved and used between OpenZFS implementations as long as all feature flags in use by the pool are supported by both implementations.[18]:20,2627[26]:23[27]

OpenZFS uses pool version 5000 to indicate the use of feature flags; this pool version is an unchanging number that is expected to never conflict with version numbers given by Oracle. Legacy version numbers still exist for pool versions 128, and are implied by the pool version 5000;[28] the initial proposal was to use 1000 as the pool version.[26]:4 Future on-disk format changes are enabled and disabled independently via feature flags.

Feature flags are exposed as pool properties, following these naming scheme rules:[26]:4

For example, feature@com.foocompany:async_destroy is a valid property name, and it could be shortened to feature@async_destroy.[26]:4

Each pool feature can be in either disabled, enabled or active state. Disabled features are those that will not be used, and no on-disk format changes will be made; as a result, such features are backward compatible. Enabled features are those that will be used, no on-disk format changes have been made yet, but the software may make the changes at any time; such features are still backward compatible. Active features are those that have made backward-incompatible on-disk format changes to the pool.[26]:5

When any pool feature is enabled, legacy version of the pool is automatically upgraded to 5000 and any other prerequisite features are also enabled. By default, new pools are created with all supported features enabled. In general, state of a feature can be changed from active back to enabled, undoing that way performed on-disk format changes and making the pool compatible again with an older OpenZFS implementation; however, for some features that might not be possible.[26]:5,9[28]

On-disk format changes can be associated with either features for write or features for read. The former are the features that an OpenZFS implementation must support to be capable of writing to the pool, while supporting such features is not mandatory for opening the pool in read-only mode. The latter are the features that an OpenZFS implementation must support to be able to read from the pool or to just open it, because opening a pool is not possible without actually reading from it.[26]:7

For example, async_destroy feature adds a new on-disk data structure to keep track of freed datasets, but an OpenZFS implementation does not need to know about this data structure to access the pool in read-only mode. Additionally, writing to a pool that has some features in active state is not possible by an OpenZFS implementation that does not support the same features.[26]:78

See also

References

  1. Sean Michael Kerner (September 18, 2013). "LinuxCon: OpenZFS moves Open Source Storage Forward". infostor.com. Retrieved October 9, 2013.
  2. 1 2 "The OpenZFS project launches". LWN.net. September 17, 2013. Retrieved October 1, 2013.
  3. Adam Leventhal (September 17, 2013). "OpenZFS: the next phase of ZFS development". dtrace.org. Retrieved October 1, 2013.
  4. Matt Ahrens (October 2, 2012). "ZFS Day" (PDF). mahrens.org. Retrieved November 13, 2013.
  5. 1 2 "OpenZFS Announcement". open-zfs.org. September 17, 2013. Retrieved September 19, 2013.
  6. 1 2 "OpenZFS – Communities co-operating on ZFS code and features". freebsdnews.net. September 23, 2013. Retrieved March 14, 2014.
  7. "OpenZFS". open-zfs.org. Retrieved September 19, 2013.
  8. "Platform code differences". open-zfs.org. Retrieved September 20, 2013.
  9. 1 2 3 "OpenZFS History". open-zfs.org. Retrieved September 24, 2013.
  10. 1 2 Petros Koutoupis (June 1, 2016). "ZFS: Finding Its Way to a Linux Near You?". Linux Journal. Retrieved July 4, 2016.
  11. Eben Moglen; Mishi Choudharyl (February 26, 2016). "The Linux Kernel, CDDL and Related Issues". softwarefreedom.org. Retrieved March 30, 2016.
  12. Bradley M. Kuhn; Karen M. Sandler (February 25, 2016). "GPL Violations Related to Combining ZFS and Linux". sfconservancy.org. Retrieved March 30, 2016.
  13. Ryan Paul (June 9, 2010). "Uptake of native Linux ZFS port hampered by license conflict". Ars Technica. Retrieved July 1, 2014.
  14. "ZFS on Linux: Frequently asked questions: Licensing". github.com. May 26, 2016. Retrieved July 3, 2016.
  15. Simon Sharwood (April 21, 2016). "Ubuntu 16.04 LTS arrives today complete with forbidden ZFS". The Register. Retrieved July 3, 2016.
  16. Michael Larabel (October 6, 2015). "Ubuntu is Planning to Make The ZFS Filesystem a "Standard" Offering". Phoronix. Retrieved July 3, 2016.
  17. James Bottomley (February 23, 2016). "Are GPLv2 and CDDL incompatible?". hansenpartnership.com. Retrieved July 3, 2016.
  18. 1 2 Matt Ahrens; Brian Behlendorf (September 17, 2013). "LinuxCon 2013: OpenZFS" (PDF). Linux Foundation. Retrieved November 13, 2013.
  19. Bryan Cantrill (December 8, 2011). "Fork Yeah! The Rise and Development of illumos". SlideShare. Retrieved September 24, 2013.
  20. "illumos FAQs". illumos.org. Retrieved September 24, 2013.
  21. "MacZFS: Official Site for the Free ZFS for Mac OS". code.google.com. Retrieved March 2, 2014.
  22. "OpenZFS on OS X". openzfsonosx.org. November 15, 2014. Retrieved November 23, 2014.
  23. Jonathan Corbet (March 29, 2013). "ZFS on Linux 0.6.1". LWN.net. Retrieved July 4, 2016.
  24. "Solaris ZFS Administration Guide, Appendix A ZFS Version Descriptions". Oracle Corporation. 2010. Retrieved February 11, 2011.
  25. "Oracle Solaris ZFS Version Descriptions". Oracle Corporation. Retrieved September 23, 2013.
  26. 1 2 3 4 5 6 7 8 Christopher Siden (January 11, 2012). "ZFS Feature Flags (Illumos Meetup)" (PDF). delphix.com. Retrieved July 4, 2016.
  27. "OpenZFS Features – Feature flags". open-zfs.org. Retrieved September 23, 2013.
  28. 1 2 "OpenZFS FAQ: Are storage pools created by OpenZFS portable between operating systems?". open-zfs.org. September 26, 2013. Retrieved October 30, 2015.
Wikimedia Commons has media related to OpenZFS.
This article is issued from Wikipedia - version of the 11/1/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.