読者です 読者をやめる 読者になる 読者になる

重複排除 技術解説(2)重複排除の単位

引き続き、ASCII.technologies 2011年1月号に寄稿した「重複排除技術が革新するストレージの世界」の第二章の技術解説です。まずは、「重複排除の単位」です。


[第2章 重複排除技術解説 序文]
重複排除のユーザメリットについてここまで説明してきた。本章では、そのメリットを実現するための技術と方式について解説していこう。
重複排除は様々な方式が市場に存在し、どの方式を選ぶかによって効果が大きく変わる。しかし、ベンダーはそれぞれ自分たちの方式の優れた点のみを主張するため、各方式の特性の違いをユーザが理解するのはなかなか難しい。
本記事では、重複排除の各方式の特性の違いを読者に理解してもらうべく、以下の五つのポイントにおいて方式を整理し、それぞれの方式がどういった特性の違いを生むのかについて解説する。重複排除技術を使った製品を比較する際には、この五点について聞けばその特性はほぼ理解できるはずだ。
また、ベンダーがなぜそういった方式を選んだのか、つまり設計思想という観点に関しても多少考察を加えている。これにより、その方式が採用された背景をある程度理解していただく事が可能だと思う。

  • 重複排除の単位
  • 重複の判定方法
  • 重複排除するタイミング
  • 重複排除を行う場所
  • 重複排除の範囲


[2.1節 重複排除の単位 序文]
まず最初に、どういった粒度でデータを比較し重複排除を行うのかという点、つまり「重複排除の単位」について取り上げる。この方式の違いは、重複排除の効果を左右する最も重要なポイントの一つであり、製品がどの方式を使っているかによって期待できる重複排除効果は大きく変わってくる。
現在、市場にある重複排除製品で使われている主な方式は以下の三つである。それぞれ説明していこう。

  • ファイル単位
  • 固定長ブロック単位
  • 可変長ブロック単位

ファイル単位の重複排除

ファイル単位の重複排除というのは最も単純な方式で、ファイルが同じ(重複)だった場合にはひとつにまとめてしまうというやり方である。シングルインスタンスという名前で呼ばれることもある。ファイルサーバ上に複数の社員が同じファイルをコピーするなど、重複ファイルがストレージ内に多く存在する場合は大きな効果を発揮する。
この方式の弱点は、ファイルに少しでも変更が入ると重複排除がまったく効かなくなってしまうことだ。ファイルに更新が入る場合、多くの場合はファイルの一部だけが書き換えられて新しいバージョンが作られる。ファイル単位の重複排除では、こういったバージョン間の重複部分を認識できない。その結果、後に説明するブロック単位の二方式と比べて、ファイル単位の方式は重複排除効果が劣る結果になる。
この方式のメリットは、三つの方式の中で実装が一番簡単なので、プライマリストレージにこの機能が組み込まれているケースが多いということである。たとえば、EMC CelerraやWindows Storage Serverの様な、プライマリストレージとして使えるNASにこの機能が搭載されている。ファイルサーバにほとんど使われない重複ファイルが多く眠っているというユーザなら、検討してみるべきだろう。

固定長ブロック単位の重複排除

次に固定長ブロック単位の重複排除だが、これはファイルの構成要素であるブロックの単位で重複排除を行う方式である。ブロックサイズは数キロバイト程度なので、ファイルよりもずっと細かい単位で重複を見つけることができる。同じブロックを持っていればその部分は重複排除され、内容が異なるブロックだけが新たに容量を使う。
この方式では、ファイル単位の重複排除ではできなかった、ファイルのバージョン間の重複排除を行うことができるようになり、重複排除の削減率が高くなる。この方式を採用しているベンダーには、たとえばNetAppがある。
開発のし易さという面では、ファイル単位に次いでこの方法が実装しやすい。ファイルシステムの多くは内部で固定長ブロックを使っているので、ファイルシステムに後付けでこの機能を追加する場合に相性がよいのである。
この方式の弱点は、ファイルの更新の際にブロック長の倍数と合わない単位でデータが挿入されると、ブロックを切り分ける場所にズレが発生してしまい、それ以降のブロックで重複排除が全く効かなくなってしまうという点である。固定長ブロック方式では、データパターンと関係なく決められた長さごとにデータをブロックに格納するので、どこかでズレが発生してしまうと、同じデータでもブロックの内容が全く変わってきてしまうのである。
この弱点の影響は実は小さくない。現在、重複排除技術が最も適用されているのはバックアップであるが、バックアップストレージ側で重複排除を行う場合にこの問題が発生してしまうためである。
バックアップソフトウェアのほとんどは、オリジナルのファイル群をまとめて大きなファイルにアグリゲートし、その上でディスクに書くという仕様になっている。小さなファイルを一つ一つ書いていてはHDDの性能を出し切れないためだ。このようにまとめられたファイルをストレージ側で受信して固定長で切るとすぐにズレが発生する。あるファイルの長さが変わったりすると、それ以降のデータの位置が全てずれてしまうためだ。
そのため、バックアップストレージでは、この固定長ブロック単位の重複排除という方式はほとんど使われていない 。もちろん、固定長ブロックよりも粒度が粗いファイル単位の重複排除も使われていない。そこでは、次に説明する可変長ブロック方式が主に使われている。

可変長ブロック単位の重複排除

可変長ブロック方式では、ブロックを切り分けるタイミングをデータパターンを見ながら決めていく。つまり、データストリームをブロックに切り分けていく際に、この様な数字のパターンが出てきたらブロック終端とする、という動きになる 。なお、ブロックという言葉は固定長のものに使われることが多いので、可変長ブロックのことをチャンクやセグメントと呼ぶベンダーも多い。
このようにデータパターンに基づいてブロックを切り分けていくようにすれば、たとえファイルへのデータ挿入がズレを発生させたとしても、ブロックを切り分けるタイミングはほとんど変わらない。ブロックの切り分け位置は、先頭からの長さではなくデータパターンに基づいて決まるからである。これにより、たとえバックアップソフトウェアがいくらファイルをアグリゲートしても、重複排除を引き続き効率的に行うことができる。
この可変長ブロックという技術は、バックアップストレージ側で重複排除を効率よく行うための主要技術の一つになっている。前章で説明した20分の1のメカニズムは、可変長ブロック単位の重複排除技術を使うことを前提としたものだ。バックアップストレージ側に重複排除技術を適用することを検討されている読者は、適用する製品が可変長ブロック方式であることを確認した方がよいだろう。