ファイルサイズの話(5年目の真実)

〜〜〜前置き〜〜〜

100MBのファイルを3台のIQに書き込むとします。すると、ノード1に50MBのデータ、ノード2に50MBのデータ、ノード3に50MBのパリティと(言うイメージで)書き込まれます。これで、筐体をまたいだRAID5のような保護になります。*1

100MBのファイルを5台のIQに書き込んで、なおかつより高い保護レベルで保存する場合には、33MB, 33MB, 33MB, 33MBパリティ、33MBパリティというように書き込んで、筐体をまたいだRAID6のようになります。

同じく100MBのファイルを18台に書き込むと、16+2で書き込まれ、6.25MBずつかかれます。

最初の例ではパリティオーバーヘッドは50%、次の例では40%、最後の例では11%となります。ノードを追加すれば追加するほどパリティオーバーヘッドが小さくなります。

ただし、50台なら48+2で書き込むわけではなくて、あまり細かくわけると効率が下がるため、一つの塊は16+2までにしか分けません。

その他、3パリティ、4パリティの話、小さいファイルの話、2:1という不思議なパリティの話など色々ありますが、今日の話題とはそれるのでまた今度。

〜〜〜さて、本題です〜〜〜

OneFSはこのようにデータ保護をRAIDではなくファイルシステムレベルで行っているため、NFSクライアントからduでみると、「実際に利用している容量」、つまり3ノードで100MBのファイルであれば150MBと表示されます。これはRAIDストレージになれているお客様からすると変な動きと映るのでなんとかならないものかとずっと思っていたんですが、duコマンドに対して、NFSサーバは論理容量と、実使用量を返していて、duコマンドが実使用量を表示している、ということを5年目にして始めて知りました。

簡単に言うと、 du -b オプションをつければ、duで論理容量が表示できるという。。。

しらなかったーー。誰か、そういってよー。

  • bオプションをつけるとsparseファイル(空ファイル)の容量も一緒に表示されちゃうという制限はありますが、知っておくと助かりますね。まだまだ知らないことはたくさんです。

*1:パリティディスクというものはなく、ストライプごとにどこに書くかは変わりますので、50MBのパリティがまとめて同じディスクにかかれるわけではありません