この質問は以前にスタックオーバーフローで尋ねられましたが、そこの良い人々は代わりにここでコミュニティを試すことを勧めています。
さまざまなファイルシステムに関してスパースファイルを調査していて、スパースファイルがネットワークファイルシステム(NFS)またはサーバーメッセージブロック(SMB)でサポートされていることを示す具体的なものを見つけようとしています。
SMBはWindowsで広く使用されており、この entry に従って、SMBサーバーはスパースファイルをサポートできます。ただし、スパースファイルをサポートしないファイルシステムは、「ホール」をゼロで埋めるだけで、パフォーマンスの問題が発生する可能性があります。
NFSに関しては、NFSをサポートするスパースファイルの使用について何も見つけることができませんでした。
したがって、私の質問は、
スパースファイルはNFSおよびSMB=でサポートされていますか?
NFS:スパースファイルを部分的にサポートします。基本的に、スパースファイルの作成をサポートしますが、読み取り時に、ファイルはゼロを含むように拡張されます。つまり、NFSを介してスパースファイルを作成できますが、そのまったく同じファイルを読み取ると、転送中のネットワークデータには元のファイルで見つかったゼロが含まれます。簡単なテストはその振る舞いを示しています:
cd /mnt/nfs
truncate test.img -s 1G
ls -lh test.img
-rw-r--r--。 1ルートルート1.0G Oct 26 11:29 test.img
du -hs test.img
0 test.img
ご覧のとおり、test.imgファイルのディスク上のサイズは0バイトです。ただし、dd if=test.img of=/dev/null bs=1M iflag=direct
番組
1024 + 0レコード
1024 + 0レコード
1073741824バイト(1.1 GB)コピー、10.2269秒、105 MB /秒
スパースファイルを転送すると、すべてゼロが含まれるように拡張されます。
NFSv4.2は、スパースファイルのネットワーク転送のための特別な処理を含めることで拡張されます。つまり、NFSv4.2では、上記のdd
はほぼ瞬時に完了します。
SMB:NFSと同じ動作、少なくとも私のテスト環境では、CIFS v1を備えたSamba v3.6.xサーバーと、mount.cifsを使用するLinuxクライアントを使用します。たぶんWindowsの下でそれは異なる動作をします...
はい、NFS 4.2はスパースファイルを完全にサポートしています( この正規文書 および このプレゼンテーション を参照)。
NFS 4.2より前のNFSクライアント/サーバーモデルは、APIがすべてのPOSIXファイル操作をサポートするという意味で、スパースファイルをサポートしていました。これは、バッキングファイルシステムでスパースファイルをサポートするサーバーにスパースファイルを書き込むと、スパースファイルが作成されることになります(ゼロを多数格納するのではなく)。ただし、ファイルを読み取ると、スパース要素に多くのゼロが送信されます。 IE答えは「部分的に」です。
NFS 4.2は、クライアントがファイルの穴を「見る」ことができるため、サーバーがこれらのゼロをすべて送信する必要がないという機能を追加します。 IDから:
1.4.3. Sparse Files
Sparse files are ones which have unallocated or uninitialized data
blocks as holes in the file. Such holes are typically transferred as
0s during I/O. READ_PLUS (see Section 15.10) allows a server to send
back to the client metadata describing the hole and DEALLOCATE (see
Section 15.4) allows the client to punch holes into a file. In
addition, SEEK (see Section 15.11) is provided to scan for the next
hole or data from a given location.
仕様がスパースファイルをサポートしているという事実にもかかわらず、レイジーインプリメンターがクライアントまたはサーバーのいずれかでスパースファイルのサポートの実装を回避することは可能です。
SMBについてはあまり知りませんが、関連するFS機能ビットが設定されている場合は、スパースファイルもサポートしていると思います。詳細は こちら を参照してください。