NFSとSMBはスパースファイルをサポートしていますか?


18

この質問は以前にスタックオーバーフローで尋ねられましたが、そこの良き人々は代わりにここでコミュニティを試すことを推奨しています。

さまざまなファイルシステムに関してスパースファイルを調査しており、スパースファイルがネットワークファイルシステム(NFS)またはサーバーメッセージブロック(SMB)でサポートされていることを具体的に説明しようとしています。

SMBはWindowsで広く使用されており、このエントリによると、SMBサーバーは、基になるファイルシステムがサポートしていない場合でもスパースファイルをサポートできることを理解しています。ただし、私が正しい場合、スパースファイルをサポートしないファイルシステムは、「穴」をゼロで埋めるだけであり、これがパフォーマンスの問題につながる可能性があります。

NFSに関しては、スパースファイルをサポートするNFSの使用について何も知りませんでした。

したがって、私の質問は、

NFSおよびSMBでスパースファイルはサポートされていますか?

回答:


12

NFS:スパースファイルを部分的にサポートしています。基本的に、スパースファイルの作成をサポートしますが、読み取り時には、ファイルはゼロを含むように拡張されます。つまり、NFSを介してスパースファイルを作成できますが、その同じファイルを読み取ると、転送中のネットワークデータには元のファイルで見つかったゼロが含まれます。簡単なテストはその動作を示します:

cd /mnt/nfs
truncate test.img -s 1G
ls -lh test.img

-rw-r--r--。1ルートルート1.0G 10月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:少なくとも私のテスト環境では、CIFS v1を備えたSamba v3.6.xサーバーとmount.cifsを使用するLinuxクライアントを使用して、NFSと同じ動作をします。たぶん、Windowsでは動作が異なります...


NFSサーバーの基盤となるファイルシステムがスパースファイルをサポートしていない場合、NFSはスパースファイルをサポートできますか?
アンドリューヘンレ

2
@shodanshok:テストは無効です。ファイルシステム上で同じコマンドを実行サポートスパースファイルは、同じ結果が得られます。ddブロックごとに読み込み、基盤となるファイルシステムがスパースファイルをサポートしているかどうかに関係なく、OSによってホールがゼロに変換されます。ext4で試してみると、同じ数字が表示されます。
15年

@AndrewHenle基礎となるFSがスパースファイルをサポートしていない場合、NFSは存在しないサポートをどのように公開できますか?とにかく、最近のすべての(ext3 / 4、xfsなど)Linuxファイルシステムはその機能をサポートしているため、スパースファイルのサポートなしでファイルシステムを見つけることは非常に困難です。
shodanshok

1
@ablighあなたは間違っています。ddローカルのスパースファイルに対してコマンドを実行すると、はるかに高速な結果が得られます。例についてはこちらをご覧ください:、root@hubble:~# truncate -s 1G test.img root@hubble:~# dd if=test.img of=/dev/null bs=1M iflag=direct 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.10478 s, 10.2 GB/sご覧のように、ローカルのスパースファイルを読み取ると、10 GB / sを
超える

2
@shodanshok-なるほど、転送された量ではなく速度を見ています。おそらくあなたの答えにそれが役立つことを明確にするでしょう。まばらな方法で保存されているファイルの標準的なテストはdu -svs ls -lですが、ネットワーク経由での送信には役立たないのは正しいことです。ただし、どちらの場合も(strace確認されるように)dd、「ホール」をゼロとして含むファイル全体を読み取り、「ゼロ」が発生する場所(サーバーまたはクライアント側)のみが異なります。ただし、(私の回答によれば)NFS 4.2 スパースファイルを完全にサポートていることに注意してください。
15年

10

NFS

はい、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.

仕様がスパースファイルをサポートしているという事実にもかかわらず、怠zyな実装者は、クライアントまたはサーバーのいずれかでスパースファイルのサポートを実装することを避けることができます。

SMB

SMBについてはあまり知りませんが、関連するFS機能ビットが設定されていれば、SMBはスパースファイルもサポートすると考えています。詳細はこちらをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.