OpenZFS

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 source code was released 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]

As a result of the CDDL and GPL legal incompatibility, Sun's implementation of the ZFS file system could not be used as a basis for a Linux kernel module  it could not be merged into the Linux kernel mainline or shipped in binary form as part of Linux distributions. Thus, ZFS code had to be re-written from scratch for native ZFS support to be brought into the Linux kernel. As a workaround, FUSEa 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; however, such an approach contains its own issues, one of which is performance penalty.[10]

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][11]

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.[16][17]

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.[11][18]

Pool version used in OpenZFS to indicate use of feature flags is 1000, which 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 version 1000.[19] 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:[19]

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

Pool features can have one of three states:[19]

When any pool feature is enabled, legacy version of the pool is automatically upgraded to 1000 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.[19]

On-disk format changes can have one of two forms:[19]

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.[19]

See also

References

  1. Sean Michael Kerner (September 18, 2013). "LinuxCon: OpenZFS moves Open Source Storage Forward". infostor.com. Retrieved October 9, 2013.
  2. 2.0 2.1 "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. 5.0 5.1 "OpenZFS Announcement". OpenZFS. September 17, 2013. Retrieved September 19, 2013.
  6. 6.0 6.1 "OpenZFS – Communities co-operating on ZFS code and features". freebsdnews.net. September 23, 2013. Retrieved March 14, 2014.
  7. "OpenZFS". OpenZFS. Retrieved September 19, 2013.
  8. "Platform code differences". OpenZFS. Retrieved September 20, 2013.
  9. 9.0 9.1 9.2 "OpenZFS History". OpenZFS. Retrieved September 24, 2013.
  10. Ryan Paul (June 9, 2010). "Uptake of native Linux ZFS port hampered by license conflict". Ars Technica. Retrieved July 1, 2014.
  11. 11.0 11.1 Matt Ahrens; Brian Behlendorf (September 17, 2013). "LinuxCon 2013: OpenZFS" (PDF). Linux Foundation. Retrieved November 13, 2013.
  12. Cantrill, Bryan (December 8, 2011). "Fork Yeah! The Rise and Development of illumos". SlideShare. Retrieved September 24, 2013.
  13. "illumos FAQs". illumos. Retrieved September 24, 2013.
  14. "MacZFS: Official Site for the Free ZFS for Mac OS". MacZFS. Retrieved March 2, 2014.
  15. "OpenZFS on OS X". openzfsonosx.org. November 15, 2014. Retrieved November 23, 2014.
  16. "Solaris ZFS Administration Guide, Appendix A ZFS Version Descriptions". Oracle Corporation. 2010. Retrieved February 11, 2011.
  17. "Oracle Solaris ZFS Version Descriptions". Oracle Corporation. Retrieved September 23, 2013.
  18. "Features – OpenZFS – Feature flags". OpenZFS. Retrieved September 23, 2013.
  19. 19.0 19.1 19.2 19.3 19.4 19.5 Siden, Christopher (January 2012). "ZFS Feature Flags" (PDF). Illumos Meetup. Delphix. p. 4. Retrieved September 22, 2013.

External links