ZFS

ZFS
開発者 サン・マイクロシステムズ(後にオラクル
正式名 ZFS
導入 2005年11月 (19年前) (2005-11) (OpenSolaris)
構造
ディレクトリ ハッシュテーブル
限度
最大ファイル サイズ 16 EiB (264 バイト)
最大ファイル数 248
最大ファイル名長 255 バイト
最大ボリューム サイズ 256 ZiB (278 バイト)
特徴
フォーク 有り
属性 POSIX
パーミッション POSIX, NFSv4 ACL
透過的圧縮 有り
透過的暗号化 有り
重複排除 有り
対応OS Solaris, OpenSolaris, illumos, OpenIndiana, FreeBSD, Mac OS X Server 10.5, NetBSD, Linuxサードパーティー カーネル・モジュール、または FUSE
テンプレートを表示

ZFSは、主にオラクルSolaris上で実装されている128ビット・アドレッシングを特徴とするファイルシステム。今までSolaris (SunOS) で用いられてきた Unix File System (UFS) の次世代ファイルシステムと位置づけられている。名称はZettabyte File Systemに由来する[1]が、現在は何の略称でもないとされる[2]

概要

2004年9月にアナウンスがあり、2005年11月リリースのOpenSolaris build 27で実装が公開された。 "Common Development and Distribution License" (CDDL) のもと、オープンソースで開発されている。

特徴として以下の項目が挙げられる。

  • チェックサム64ビット化された
  • コピーオンライトの実装
  • ボリュームマネージャが必要なく、ボリュームの構成が容易にできるようになった
  • ディスクの違い(容量、種類)を吸収する仮想ボリューム(ストレージプールと呼称)をサポート
  • ストレージプールの作成・フォーマット・マウントがコマンド一行ですむ
  • ファイルシステム自身がRAID機能を持つ
  • ブロックサイズが可変長かつファイルシステム単位で指定可能、サイズ上限はストレージプールの仕様上限となる16MBまで

またSolaris10 11/06版より以下の機能が加わった。

  • RAID-Z2(ダブルパリティによるRAID-6相当の機能)
  • ホットスペア
  • クローンプロモーション(アクティブなZFS領域を複製と置換を容易にする機能)
  • 再帰的スナップショットコマンドの簡素化オプション

以下に記載されていない機能追加として、Oracle Solaris Solaris SRU 11.2.8.4.0などより、Persistant L2ARC (ブートをまたがるL2ARCの内容の再利用)が追加されている(他の環境での実装状況を記載する必要あり) 。

以降の追加機能は下記のバージョン番号を参照。

バージョン番号

利用可能な形式と特徴を指定するために、新機能が導入されるに従ってZPoolとZFSのバージョン番号が増える。バージョン番号の一覧は以下の通り[3]。([]内はサポートしているオペレーティングシステム

  1. Initial ZFS version [Supported by Solaris 10 06/06]
  2. Ditto blocks (replicated metadata) [Supported by Solaris 10 06/06 build 09]
  3. Hot spares and double parity RAID-Z [Supported by Solaris 10 11/06]
  4. zpool history [Supported by Solaris 10 08/07]
  5. Compression using the gzip algorithm
  6. bootfs pool property [Supported by FreeBSD 7.0]
  7. Separate intent log devices
  8. Delegated administration [Supported by Solaris 10 10/08]
  9. refquota and refreservation properties
  10. Cache devices
  11. Improved scrub performance
  12. Snapshot properties
  13. snapused property [Supported by OpenSolaris 2008.11, FreeBSD 8.0]
  14. passthrough-x aclinherit [Supported by OpenSolaris 2009.06, FreeBSD 8.1]
  15. user/group space accounting [Supported by Solaris 10 10/09, FreeBSD 8.2, FreeBSD 8-STABLE]
  16. stmf property support
  17. Triple-parity RAID-Z
  18. Snapshot user holds
  19. Log device removal
  20. Compression using zle (zero-length encoding)
  21. Deduplication
  22. Received properties [Supported by Solaris 10 9/10]
  23. Slim ZIL
  24. System attributes
  25. Improved scrub stats
  26. Improved snapshot deletion performance
  27. Improved snapshot creation performance
  28. Multiple vdev replacements [Supported by FreeBSD 9-CURRENT]
  29. RAID-Z/mirror hybrid allocator [Supported by Solaris 10 8/11]
  30. ZFS data set encryption
  31. Improved 'zfs list' performance [Supported by Solaris 11 Express b151a]
  32. One MB blocksize
  33. Improved share support [Supported by Solaris 11 EA b173]
  34. Sharing with inheritance [Oracle Solaris 11.1 or later]
  35. Sequential resilver [Oracle Solaris 11.2 or later]
  36. Efficient log block allocation [Oracle Solaris 11.3 or later]
  37. lz4 compression
  38. xcopy with encryption [Oracle Solaris 11.4 or later]
  39. reduce resilver restart
  40. Deduplication 2
  41. Asynchronous dataset destroy
  42. Support for reguid
  43. RAID-Z enhancements and cloud device support
  44. Device Removal

今、自分のシステムでどのバージョンまでサポートしているか知りたい場合はzpool upgrade -vで確認できる。

訴訟合戦

2007年9月ネットアップがZFSは自社の特許を侵害しているとして、開発したサン・マイクロシステムズを訴えた。10月にサン・マイクロシステムズは特許は無効と反訴。互いの経営者同士が自らのブログで応酬を繰り広げていたが、サンがオラクルに買収された後の2010年9月9日、訴訟取り下げで合意した。

キャパシティ

128ビット・アドレッシングで主な制限は以下の通り。

  • 16エクサバイト — ファイルシステムの最大値
  • 16エクサバイト — 1ファイルの最大値

プラットホーム

Solaris(10 6/06以降)
10/08版よりブートパーティションとしても作成可能になった。
OpenSolarisOpenIndiana
SPARC及びx86版のOpenSolaris build 27以降で動作する。2008.05版よりデフォルトファイルシステム。
OpenIndianaは初期リリースoi_148からデフォルトファイルシステムである。

このほか、SunOS系列(Illumos系統含む)ディストリビューションでもサポートされている。

移植

CDDLでライセンスされるオープンソースであり、Solaris系以外のUnix系オペレーティングシステムにも移植が進んでいる。

FreeBSD
x64の9.0-RELEASEでZFS v28をサポートしている。IA-32でも一応動作するが、実用的に使うのは難しい(カーネルが多量のメモリを必要とするが、32ビット空間の限界がある等)。2011年2月28日時点ではカーネル側の未サポートが理由でiSCSIを経由した共有ZVOLs機能 (zfs set shareiscsi) は実現されていない。また10.x以降はAFT(4KB/セクタ)を自動的に認識してZFS poolを作成するようになった。
NetBSD
2007年の Google Summer of Code で開発が始められたが、2016年時点でメンテナンスされていない[4]
macOS(旧Mac OS X)
10.5 Leopardより搭載されている[5]が、初期リリースの10.5.0では読み込みのみの対応にとどまる。10.6 Snow Leopard では、サーバ版で標準対応することが発表されていたものの10.6.1 リリースでも実現せず、結局AppleはZFSプロジェクトを停止した[6][7]Btrfsを開発中のオラクルによるサン・マイクロシステムズ買収に伴いZFSの将来が不透明になったためと報じられている[8]。その後、MacZFSプロジェクトがGoogle Codeのホスティングで続いていたが2013年に終了した[2]。アップルは別途、Apple File Systemを開発、2017年に iOS 10.3macOS High Sierraでリリースした[9][10]
2020年11月30日にMacOS Big Sur, Catalina, Mojaveに対応したOpenZFS on OS X 2.0英語版がリリースされた[11]
Linux
ZFSの採用するCDDLと、Linuxの採用するGPLとの間にライセンスの抵触が発生するという問題があり、また、ZFSの権利を保有するオラクルの姿勢を踏まえ、Linuxの生みの親リーナス・トーバルズがカーネルへマージしない姿勢を表明している為[12]、Linuxではカーネル空間に統合された手法での利用は出来ない。
FUSEというユーザー空間のファイルシステムドライバを利用する形での実装例は存在しているが、ユーザー空間の実装であるため、一部の機能は制限される。この実装は2006年のGoogle Summer Codeから始まっている。zfs-fuseの名称で、Red Hat Enterprise LinuxのEPEL(Extra Packages for Enterprise Linux)リポジトリやUbuntu 10.04以降など各種Linuxディストリビューションに含まれている。
2010年頃から別個に2本のネイティブポート版開発プロジェクトが動いており、そのうちKQ infotechのパッケージはPOSIX準拠である。
またOpenZFS英語版旧ZFS on Linux)と呼ばれるプロジェクトも進行しており[13]Debian / CentOS / Ubuntu / FedoraなどといったLinuxディストビューションでZFSを用いることができる。
Ubuntu 16.04にてZFSを正式採用することが発表された[14]

制限事項

ZFSはデータの更新を常にコピーオンライト処理とする。これに起因して、既存のUnix向けファイルシステムでは発生しないような問題が生じることがある。

ZFSにて、データが頻繁に更新されるファイルシステムにて空き容量が少なくなると、空き容量がゼロでないにもかかわらずデータ更新に失敗することがある。これはコピーオンライトを採用したファイルシステムでは避けられない問題である。具体的な例として、固定サイズのファイルにmmap()を用いてアクセスする場合、ページをファイルへ書き戻す際にファイルシステムの空き容量不足によるエラーを防ぐため、fallocate()[15]ないしはposix_fallocate()[16]を用いてファイルブロックを確保する習慣があるが、ZFSではコピーオンライトが必須となっている影響により、これを実行してもなおエラーが発生する場合がある。この影響で、ZFSは当初fallocate()の実装を見送っていた。[17]2020年6月までに、Linuxに限ってfallocate()の互換実装がマージされている。[18]しかし、実際にはスナップショットや圧縮機能との干渉が指摘されており、本質的な対応は困難とされている。[19]また、詳細な調査の結果、illumosにてZFSへのカーネルコアダンプをサポートするため、ファイルブロックを確保する機能がZFSに存在することが確かめられた。しかし、この機能はコピーオンライトをバイパスした書き込みを実行するなど利用目的がカーネルコアダンプに限定されており、fallocate()を含めた通常運用下での使用は考慮されていないことも明らかになっている。[20]

ZFS上のファイルに対してランダムアクセスによるデータ更新を行うと、予めfallocate()などにより物理的に連続したファイルブロックを確保することを期待していてもブロックが断片化する。ext4fallocate()による連続したファイルブロックの確保を正式にサポートしていることから、これを前提としたソフトウェアをZFSへ持ち込むと問題が発生しやすい。これもデータ更新がコピーオンライト処理となる直接の結果であり、mmap()の使用により特に顕著となる。このような場合はファイルブロックに対して連続性を前提とするのではなく、断片化を容認した上で、それが機能や性能に影響しないようにする必要がある。また、ファイルシステム単位での可変長ブロック機能を利用すれば最大16MBの物理的に連続したブロックが使用できる。ext4の最大エクステント(4KBブロックの場合、128MB)よりは小さいものの、個々のファイルに対する特殊な設定変更は不要である。[21]

脚注

  1. ^ You say zeta, I say zetta (Jeff Bonwick's Blog)
  2. ^ ZFS FAQ (Community Group zfs.faq) - XWiki
  3. ^ Managing ZFS File Systems in Oracle Solaris 11.4” (PDF). 2019年6月10日閲覧。
  4. ^ クレア工房 / NetBSD / ZFS”. 2017年3月26日閲覧。
  5. ^ Sun、NetApp逆提訴へ--LeopardのZFSに影響は?”. ZDNet Japan (2007年10月25日). 2021年2月14日閲覧。
  6. ^ Mac OS Forgeの「ZFS移植プロジェクト」が終了--AppleがZFSサポートを打ち切った理由”. builder by ZDNet Japan. 2021年2月14日閲覧。
  7. ^ Thom Holwerda (2009年10月23日). “Apple Shuts Down Mac OS X ZFS Project”. 2009年10月26日閲覧。[1]
  8. ^ Mellor, Chris. “Apple dumps Sun's ZFS” (英語). www.theregister.com. 2021年2月14日閲覧。
  9. ^ 今度のアップデート「iOS 10.3」は慎重に、ってどういうこと? - いまさら聞けないiPhoneのなぜ”. マイナビニュース (2017年3月28日). 2021年2月14日閲覧。
  10. ^ アップル、次期macOS「High Sierra」を9月26日にリリースへ”. ZDNet Japan (2017年9月13日). 2021年2月14日閲覧。
  11. ^ OpenZFS on OS X • View topic - OpenZFS-2.0-release”. openzfsonosx.org. 2021年2月14日閲覧。
  12. ^ Don't use ZFS ―Linus,ZFSをマージしない姿勢をあらためて強調
  13. ^ http://zfsonlinux.org/
  14. ^ http://blog.dustinkirkland.com/2016/02/zfs-is-fs-for-containers-in-ubuntu-1604.html
  15. ^ fallocate(2) - Linux manual page”. man7.org. 2024年7月2日閲覧。
  16. ^ posix_fallocate”. The Open Group Library. 2024年7月2日閲覧。
  17. ^ Support fallocate(2) · Issue #326 · openzfs/zfs”. GitHub. 2024年7月2日閲覧。
  18. ^ linux: implement fallocate(mode=0) compatibility by adilger · Pull Request #10408 · openzfs/zfs”. GitHub. 2024年7月2日閲覧。
  19. ^ Support fallocate(2) · Issue #326 · openzfs/zfs (Comment 639468891)”. GitHub. 2024年7月2日閲覧。
  20. ^ Support fallocate(2) · Issue #326 · openzfs/zfs (Comment 639378614)”. GitHub. 2024年7月2日閲覧。
  21. ^ ext4のファイルにてエクステントを使用する場合、ファイル毎にchattrコマンドでの設定が必要。

外部リンク