ZFSとは、Sun Microsystemsのジェフ・ボンウィック(Jeff Bonwick)とビル・ムーア(Bill Moore)によって開発されたファイルシステムの名称である。オペレーティングシステム(OS)のSolaris 10や、Mac OS X Leopardなどで採用されている。
ZFSの特徴としては、データのアドレッシングを128ビットで行う点を挙げることができる。従来の64ビットのファイルシステムに比べて、扱えるデータ容量は飛躍的に向上し、25京6千兆Zバイト(1Zバイトは2の70乗バイト)という無限にも等しいデータを格納することが可能となっている。また、格納された全てのファイルが64ビットのチェックサムによって検査され、データエラーからほぼ100%保護されるといわれている。
ZFSはオープンソースのライセンス体系であるCDDL(Common Development and Distribution License)に基づいて開発が進められている。
(Zettabyte_File_System から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/12/25 14:15 UTC 版)
| ZFS | |
|---|---|
| 開発者 | サン・マイクロシステムズ(後にオラクル) |
| 正式名 | ZFS |
| 導入 | 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) のもと、オープンソースで開発されている。
特徴として以下の項目が挙げられる。
またSolaris10 11/06版より以下の機能が加わった。
以下に記載されていない機能追加として、Oracle Solaris Solaris SRU 11.2.8.4.0などより、Persistant L2ARC (ブートをまたがるL2ARCの内容の再利用)が追加されている(他の環境での実装状況を記載する必要あり) 。
以降の追加機能は下記のバージョン番号を参照。
利用可能な形式と特徴を指定するために、新機能が導入されるに従ってZPoolとZFSのバージョン番号が増える。バージョン番号の一覧は以下の通り[4]。([]内はサポートしているオペレーティングシステム)
今、自分のシステムでどのバージョンまでサポートしているか知りたい場合はコマンドzpool upgrade -vで確認できる。
2012年1月、OpenZFSは従来のバージョン番号に代わり、機能フラグ(feature flag)を導入した。[5][6]これにより、新規に追加された機能は個別にサポートを有効化ないしは無効化できるようになっている。機能フラグの状況についても、コマンドzpool upgrade -vで確認できる。
2007年9月、ネットアップがZFSは自社の特許を侵害しているとして、開発したサン・マイクロシステムズを訴えた。10月にサン・マイクロシステムズは特許は無効と反訴。互いの経営者同士が自らのブログで応酬を繰り広げていたが、サンがオラクルに買収された後の2010年9月9日、訴訟取り下げで合意した。
128ビット・アドレッシングで主な制限は以下の通り。
このほか、SunOS系列(Illumos系統含む)ディストリビューションでもサポートされている。
CDDLでライセンスされるオープンソースであり、Solaris系以外のUnix系オペレーティングシステムにも移植が進んでいる。
ZFSはデータの更新を常にコピーオンライト処理とする。これに起因して、既存のUnix向けファイルシステムでは発生しないような問題が生じることがある。
ZFSにて、データが頻繁に更新されるファイルシステムにて空き容量が少なくなると、空き容量がゼロでないにもかかわらずデータ更新に失敗することがある。これはコピーオンライトを採用したファイルシステムでは避けられない問題である。具体的な例として、固定サイズのファイルにmmap()を用いてアクセスする場合、ページをファイルへ書き戻す際にファイルシステムの空き容量不足によるエラーを防ぐため、fallocate()[22]ないしはposix_fallocate()[23]を用いてファイルブロックを確保する習慣があるが、ZFSではコピーオンライトが必須となっている影響により、これを実行してもなおエラーが発生する場合がある。この影響で、ZFSは当初fallocate()の実装を見送っていた。[24]2020年6月までに、Linuxに限ってfallocate()の互換実装がマージされている。[25]しかし、実際にはスナップショットや圧縮機能との干渉が指摘されており、本質的な対応は困難とされている。[26]また、詳細な調査の結果、illumosにてZFSへのカーネルコアダンプをサポートするため、ファイルブロックを確保する機能がZFSに存在することが確かめられた。しかし、この機能はコピーオンライトをバイパスした書き込みを実行するなど利用目的がカーネルコアダンプに限定されており、fallocate()を含めた通常運用下での使用は考慮されていないことも明らかになっている。[27]
ZFS上のファイルに対してランダムアクセスによるデータ更新を行うと、予めfallocate()などにより物理的に連続したファイルブロックを確保することを期待していてもブロックが断片化する。ext4がfallocate()による連続したファイルブロックの確保を正式にサポートしていることから、これを前提としたソフトウェアをZFSへ持ち込むと問題が発生しやすい。これもデータ更新がコピーオンライト処理となる直接の結果であり、mmap()の使用により特に顕著となる。このような場合はファイルブロックに対して連続性を前提とするのではなく、断片化を容認した上で、それが機能や性能に影響しないようにする必要がある。また、ファイルシステム単位での可変長ブロック機能を利用すれば最大16MBの物理的に連続したブロックが使用できる。ext4の最大エクステント(4KBブロックの場合、128MB)よりは小さいものの、個々のファイルに対する特殊な設定変更は不要である。[28]
ctl(4)ドライバを用いることにより、ZVOLを含む任意のvnodeをSCSIターゲットとすることができる。また、cfiscsi(4)ドライバはctl(4)ドライバを用いたSCSIターゲットに対してiSCSI機能を提供する。これらのドライバの設定や、接続認証などcfiscsi(4)ドライバが処理しないiSCSI機能はデーモンctld(8)が実装している。 chattrコマンドでの設定が必要。