JP5856680B2 - ファイルクローンを利用したシングルインスタンス化方法及びそれを用いたファイルストレージ装置 - Google Patents

ファイルクローンを利用したシングルインスタンス化方法及びそれを用いたファイルストレージ装置 Download PDF

Info

Publication number
JP5856680B2
JP5856680B2 JP2014533722A JP2014533722A JP5856680B2 JP 5856680 B2 JP5856680 B2 JP 5856680B2 JP 2014533722 A JP2014533722 A JP 2014533722A JP 2014533722 A JP2014533722 A JP 2014533722A JP 5856680 B2 JP5856680 B2 JP 5856680B2
Authority
JP
Japan
Prior art keywords
file
directory
size
management information
actual data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2014533722A
Other languages
English (en)
Other versions
JP2015503777A (ja
Inventor
智則 榎阪
智則 榎阪
隆喜 中村
隆喜 中村
仁志 亀井
仁志 亀井
匡邦 揚妻
匡邦 揚妻
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JP2015503777A publication Critical patent/JP2015503777A/ja
Application granted granted Critical
Publication of JP5856680B2 publication Critical patent/JP5856680B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1748De-duplication implemented within the file system, e.g. based on file segments
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ファイルストレージ装置及びその管理方法の技術に関するものである。
NAS(Network Attached Storage)は、ネットワークを介して多数のコンピュータがファイルデータを共有するのに相応しいストレージデバイスである。現在では、ファイルデータストレージの多くがNASデバイスを利用している。
高性能なプライマリーファイルサーバに格納されるデータ量が急増している。それに伴い、ファイルサーバへ接続するディスク数やサイズも増加しており、ディスクの購入や維持にかかるコストが増加している。ディスクにかかるコストを削減するため、プライマリーファイルサーバへ保存したデータ量を削減する重複排除技術が注目されている。重複排除技術は主に、ブロック単位で重複排除を行うブロックレベル重複排除と、ファイル単位で重複排除を行うファイルレベル重複排除に分類でき、ファイルレベル重複排除技術は特にシングルインスタンス技術と呼ばれる。
シングルインスタンス技術は、ファイルのデータ全体が一致するファイル群のデータを1つにまとめて、物理的なデータ容量を削減する技術である。シングルインスタンス技術は、ファイル毎に処理を行うためブロックレベル重複排除技術と比較して負荷が低く、プライマリーファイルサーバに適用しやすい。シングルインスタンス技術の一般的な実現方式は特許文献1に記載されている。シングルインスタンス化可能なファイルの重複判定は、一般的にはファイルのハッシュ値を計算し、ハッシュ値比較の結果、一致したファイルに関してさらにバイナリ比較を行うことで判定される。
また、よりサイズの大きいファイルをシングルインスタンス化した方が、データ容量削減効果が大きいため、重複判定の対象となるファイルを、一定以上のサイズのファイルに限定して判定を行う技術についても特許文献1に記載がある
米国特許6,477,544号公報
しかし、何れの技術においても、重複判定はハッシュ値比較を用いており、ハッシュ値比較によるファイル重複検出は、対象ファイルの全ハッシュ値を計算する必要があり、ハッシュ値計算のためにはファイルの実データをリードしなければならない。
つまり、重複していないファイルに関してもファイル重複検出のためにファイルの実データをリードする必要があり、膨大な数のファイル群から一致するファイルを検出してシングルインスタンス化するのは時間がかかる。また、ハッシュ値計算のための処理オーバーヘッドによりファイルサーバの性能低下要因にもなりうる。
ここで我々は実験結果から、ある程度ファイルサイズの大きなファイルに関しては、ファイルサイズが一致していると、バイナリ比較の結果も一致している確率が高いという知見を得た。前述した様に、大きなサイズのファイルの方がシングルインスタンス化の効果があり、重複比較の対象となる事が多いため、ファイル重複検出にファイルサイズの比較が有効であると考えた。そこで、上記課題を解決するために、本発明は、まずファイルサイズ比較によりファイル重複検出を行い、ファイルサイズが一致したファイルに関してバイナリ比較を行う。
より具体的には、ファイルストレージ装置であって、それぞれ管理情報と実データを備える複数のファイルを管理するコントローラと、前記複数のファイルを格納するボリュームを構成する記憶媒体を備え、前記ボリュームは第1のディレクトリ及び第2のディレクトリを備え、前記第1のディレクトリには第1のファイル及び第2のファイルが格納され、前記コントローラは前記第2のディレクトリに、第3のファイルを作成し、前記第2のファイルの実データを前記第3のファイルに移動し、前記第2のファイルが前記計算機からのリードアクセスを受信した際に前記第3のファイルを参照する様に前記第2のファイルの管理情報を設定し、前記第1のファイルの実データと前記第3のファイルの実データのサイズを比較し、前記サイズ比較の結果データサイズが同一であった場合には、前記第1のファイルの実データと前記第3のファイルの実データのバイナリを比較し、前記バイナリ比較の結果バイナリが同一だった場合には、前記第1のファイルが前記計算機からのリードアクセスを受信した際に前記第3のファイルを参照する様に前記第1のファイルの管理情報を設定し、前記第1の実データを削除する構成を備える。
また、前記第1のファイルへのライト要求を受信した場合には、前記コントローラは前記第1のファイルに更新データを格納し、前記更新データでない前記第1のファイルへのリード要求を受信した場合には、前記第3のファイルを参照し前記第3のファイルの実データを読み出し、前記更新データについて前記第1のファイルへのリード要求を受信した場合には、前記第1のファイルが備える前記更新データを読み出す構成を備える。
更に、前記第2のファイルの実データの前記第3のファイルへの移動は、前記コントローラが、前記第3のファイルの管理情報において前記第3のファイルの実データの格納領域として前記第2のファイルの実データ格納領域を示す様に管理情報を設定し、前記第2のファイルの管理情報において前記第2のファイルの実データ格納領域を示す管理情報を削除する構成を備える。
また、前記第2のディレクトリはインデックスディレクトリであって、前記第2のディレクトリに格納されるファイルのサイズをディレクトリ名とする第3のディレクトリを備え、前記第3のファイルは前記第3のファイルのサイズをディレクトリ名とする第3のディレクトリに作成され、前記第3のファイルの実データのサイズと前記第1のファイルの実データのサイズの比較には、前記コントローラは前記第3のファイルの実データのサイズに代えて、前記第3のディレクトリ名に記載のサイズと比較をする構成を備える。
更に、前記サイズ比較の結果データサイズが異なった場合には、前記コントローラは、前記第2のディレクトリに前記第1のファイルサイズをディレクトリ名とする第4のディレクトリを作成し、前記第4のディレクトリに第4のファイルを作成し、前記第1のファイルの実データを前記第4のファイルに移し、前記第1のファイルが前記計算機からのリードアクセスを受信した際に前記第4のファイルを参照する様に前記第1のファイルの管理情報を設定する構成を備える。
また、前記バイナリ比較の結果バイナリが異なった場合には、前記コントローラは、前記第3のディレクトリに第4のファイルを作成し、前記第1のファイルの実データを前記第4のファイルに移し、前記第1のファイルが前記計算機からのリードアクセスを受信した際に前記第4のファイルを参照する様に前記第1のファイルの管理情報を設定する構成を備える。
更に、前記バイナリ比較時に、前記コントローラは、前記第1のファイルおよび前記第3のファイルのハッシュ値を計算し、前記第3のファイルを前記第3のファイルのハッシュ値含む名前に変更し、前記第4のファイルを前記第1のファイルのハッシュ値含む名前で作成する構成を備える。
また、前記サイズ比較の結果データサイズが同一であった場合、前記コントローラは、前記第3ディレクトリに格納されるファイルの数が閾値以上であるかを調査し、前記調査の結果前記第3のディレクトリに格納されるファイルの数が閾値以上であった場合には、前記第3のディレクトリに格納されるファイルと前記第1のファイルとでハッシュ値を比較し、前記ハッシュ値比較の結果前記第1のファイルとハッシュ値が同じファイルについて、前記第1のファイルとバイナリ比較をする構成を備える。加えて、前記ハッシュ値比較は、計算した前記第1のファイルのハッシュ値と前記第3のディレクトリに格納されるファイルの名前に含まれるハッシュ値を比較することで行う構成を備える。
また、前記コントローラは前記第3のファイルが前記第1のディレクトリに格納される前記複数ファイルから参照されている数をカウントし、前記被参照数が0になった場合には、前記コントローラは前記第3のファイルを削除し、前記第3のファイルを削除した結果前記第3のディレクトリにファイルがなくなった場合、前記コントローラは、前記第3のディレクトリを削除する構成を備える。
また、前記コントローラは前記第1のファイルが備える前記更新データについて、前記第3のファイルが備える前記実データに対する前記更新データの割合を観測し、前記観測した割合が閾値以上になった場合、前記第3のファイルが備える前記実データのうち前記更新データ以外の部分について、前記第3のファイルから第1のファイルにコピーし、前記第1のファイルの管理情報から前記第3のファイルを参照する旨を削除する構成を備える。
また、前記第1のディレクトリに格納されるファイルのうち、データの大きいファイルから、前記ファイルサイズ比較を行うことにある。加えて、前記第2のディレクトリは隠しディレクトリであることにある。
本発明に関連する更なる特徴は、以降に続く記述に一部は明記され一部は本記述から明らかになり、或は本発明の実施により学ぶことが出来る。本発明の態様は、要素及び多様な要素の組み合わせ及び以降の詳細な記述と添付されるクレームの様態により達成され実現される。
全ファイルのハッシュ値計算を行う必要がなく、高速にシングルインスタンス化することができる。
本発明の典型的なシステム(情報処理システム)の物理的構成を示すブロック図である。 本発明の情報処理システムのより詳細な物理的及び論理的構成を示す図である。 本発明の実施形態による、ファイルクローン化及びIndexディレクトリへのファイル登録の動作を説明するためのフローチャートである。 本発明のIndexディレクトリとファイルクローン技術の関係を説明するための図である。 本発明のファイルクローン技術を使ってIndexディレクトリへの登録動作を説明するための図である。 本発明のファイルクローン技術を使ってシングルインスタンス化動作(1)を説明するための図である。 本発明のファイルクローン技術を使ってシングルインスタンス化動作(2)を説明するための図である。 本発明のシングルインスタンス化後のファイル更新動作を説明するための図である。 本発明の実施形態による、シングルインスタンスリスト作成処理を説明するためのフローチャートである。 本発明の実施形態による、シングルインスタンス化処理を説明するためのフローチャートである。 本発明の実施形態による、重複検出プログラムの処理(1)を説明するためのフローチャートである。 本発明の実施形態による、重複検出プログラムの処理(2)を説明するためのフローチャートである。 本発明のIndexディレクトリの構成を示す概念図である。 本発明の第2の実施形態による情報処理システムの物理的及び論理的構成を示す図である。 本発明の第2の実施形態による、クローン親ファイルの削除判定処理を説明するためのフローチャートである。 本発明の第3の実施形態による情報処理システムの物理的及び論理的構成を示す図である。 本発明の第3の実施形態による、スプリット処理を説明するためのフローチャートである。
以下、添付図面を参照して本発明の実施形態について説明する。添付図面では、機能的に同じ要素は同じ番号で表示される場合もある。なお、添付図面は本発明の原理に則った具体的な実施形態を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
更に、本発明の実施形態は、汎用コンピュータ上で稼動するソフトウエアで実装しても良いし、専用ハードウエア又はソフトウエアとハードウエアの組み合わせで実装しても良い。なお、本明細書の図では、テーブルやリストを例にして本発明で用いられる情報について説明しているが、テーブルやリストの構造で提供される情報に限られるものではなく、データ構造に依存しない情報であっても良い。
本発明の実施形態によれば、NASヘッドとNASストレージシステムから構成されるNASに於いて、シングルインスタンス機能が実現される。ただし、本発明の実施形態では、NASヘッドとNASストレージシステムの構成に限定されず、NASヘッドに内蔵ディスクを搭載したサーバ等で実現することも可能である。本発明の態様は、NFS(Network File System)プロトコルの採用に限定されず、他のCIFS(Common Internet File System)、HTTP(Hypertext Transfer Protocol)等を含むファイル共有プロトコルを採用することも可能である。
(1)第1の実施形態
図1は、第1の実施形態が適用された計算機システムの一実施形態における、本発明の実施形態によるシステムの物理的概略構成を示す図である。NASデバイス1000は、NASヘッド1100とNASストレージシステム1150で構成される。NASヘッド1100はファイル共有機能を有し、ファイルデータを保存するボリュームを提供するNASストレージシステム1150とネットワーク1190結合する。NASヘッド1100とNASストレージシステム1150は合わせてNASデバイスとして動作する。
NASヘッド1100とNASストレージシステム1150はネットワーク1190を介して接続されている。また、NASデバイス1000は当該NASデバイス1000にアクセスする複数のNASクライアント1180乃至1182に、それぞれネットワーク1191を介して接続されている。ネットワーク1190はFC(Fiber Chanel)及び1191はLAN(Local Area Network)である。もちろんネットワークの種類は前記ネットワークに限定されず、種々のネットワークを利用可能である。NASクライアント1180乃至1182は図示しないがそれぞれCPU及びメモリを含んでいる。
図1に示されるNASストレージシステム1150は、CPU1110、メモリ1120及びキャッシュ1130を含んでいる。メモリ1120には、図2で述べるような各種プログラムが記憶される。例えば、NFSサーバプログラム1121、NOTIFYプログラム1122、ポリシー判定プログラム1123、シングルインスタンスプログラム1124及びファイルシステム1125である。メモリ1120には、各種ドライバソフトウェア等も記憶される。メモリ1120に記憶された各種プログラムは、CPU1110がプログラムを読み込んで実行することにより、後述するシングルインスタンス機能等が実現される。以下の説明において、プログラムまたは機能が主語となる場合、実際には、プログラムを実行するCPUや各種回路によって処理が実行されるものとする。
キャッシュ1130には、NASヘッドが受信したライトデータや、ディスクドライブ1170から読み出されたデータ等が記憶される。NASストレージシステム1150は、ストレージコントローラ1160と、ディスクドライブ1170と、を含んでいる。ストレージコントローラ1160は、CPU1161と、メモリ1162と、キャッシュ1163と、を含んでいる。
図1に示されるように、NASヘッド1100及びNASストレージシステム1150は、自らをネットワーク又は他のデバイスに結合させる為に一つ以上のインターフェース(I/F)を有している。NASヘッド1100はI/F1140及び1141を有し、ストレージコントローラ1160はI/F1164及び1165を有している。また、図示は省略するがNASクライアントもI/Fを含む。
図2は、NASデバイス及びNASクライアントの論理的構成の概略を示す図である。NASデバイス1000の各種要素に搭載されているファイルやアプリケーションについて説明する。NASクライアント1180は、その上で動作するプログラムとしてアプリケーション1210と、NFSクライアント1211と、NASマネージャ1212と、を含む。NASマネージャ1212は、NASデバイス1000の設定を行う。
NASストレージシステム1150は、ストレージコントローラ1160の制御によって提供される、NASヘッド1100が扱うデータ、例えば、データファイル及び各種管理用ファイルなどを格納するボリューム1220を含む。ボリューム1220はディスク1170の記憶領域を基に、ストレージコントローラ1160によって実現される。
NFSサーバプログラム1121は、ファイル共有のためのNFS(Network File System)機能を提供するアプリケーションプログラムである。ファイルシステム1125はNASヘッド1100のファイルシステムで、ボリューム1220上にファイルを格納する。なお、本実施形態では、ファイルは、inode情報、ブロックポインタ及び実データが格納されるブロック領域から構成される。inode情報には、ファイルの構成とブロックポインタの対応関係情報が記録されている。
ファイルシステムとしては、例えばLinux(登録商標)向けのext2(second extended file system)又はext3(third extended file system)、NTFS(Windows NT(登録商標)file system)でよい。ストレージコントローラ1160はFC−SAN(Fibre Channel Storage Area Network)等のブロック形式のストレージ機能を提供する。ファイルシステム1125は、ストレージコントローラ1160が提供するボリューム1220上にデータを格納する。
NOTIFYプログラム1122は、ファイルシステム1125と連携し、管理用ファイルであるファイルリスト1231を作成する。ファイルリスト1231には、ファイルシステム1125において、ある時点(例えば、前回シングルインスタンス処理時)以降に新規作成、更新されたファイルのファイルパスの一覧が記録されている。例えば、ファイルA1241、ファイルB1242、ファイルC1243のファイルパスがファイルリスト1231に記載されているとする(ファイルD1244、ファイルE1245は記載されていない)。初回は、例えばファイルシステムがfindコマンドなどを用いて、ファイルシステムの全ファイルのファイルパスが記載されたファイルリスト1231を作成して用いる。
ポリシー判定プログラム1123は、管理用ファイルであるシングルインスタンスポリシー1232を持ち、NOTIFYプログラム1122とシングルインスタンスプログラム1124と連携し、管理用ファイルであるシングルインスタンスリスト1236を作成する。シングルインスタンスポリシー1232には、ファイルリスト1231からファイルを抽出してシングルインスタンスリスト1236を作成するためのポリシーが記録されている。
例えば、シングルインスタンス化による容量削減効果の高いものについてのみシングルインスタンス化するために、シングルインスタンスポリシー1232にファイルサイズが1MB以上というポリシーが記録されている場合、ファイルリスト1231に記載されているファイルのうち、ファイルサイズ1MB以上のファイルについてのみファイルパスの一覧がシングルインスタンスリスト1236に記録される。例えば、ファイルA1241、ファイルB1242及びファイルC1243が記載されることになる。
また、ファイルサイズ以外にも、更新頻度が閾値以下のファイルについてのみシングルインスタンス化するポリシーや、特定の拡張子のファイルのみをシングルインスタンス化するようここでポリシーを記録することが可能である。
シングルインスタンスプログラム1124は、シングルインスタンスリスト1236に記載されているファイルに関して、ファイルの重複を検出し、重複ファイルをシングルインスタンス化する機能を有する。シングルインスタンスプログラム1124は、ファイル分類プログラム1233と、重複検出プログラム1234と、ファイルクローンプログラム1235と、シングルインスタンスリスト1236と、を含む。
ファイル分類プログラム1233は、最終的にバイナリ比較によってファイルの重複を判定するファイルの分類を行う。ファイル分類プログラム1233は、ファイルサイズ比較により重複ファイルの一次検出を行う。また、ファイルサイズの一致するファイルを検出した場合、前記ファイルのバイナリ比較を行うために重複検出プログラム1234を起動する。
さらに、ファイルサイズ比較を高速化するために、ボリューム1220にIndexディレクトリ1250を作成する。実サイズディレクトリ作成Indexディレクトリ1250は隠しディレクトリであり、シングルインスタンスプログラム1124が利用する情報を格納する。隠しディレクトリとすることで、ユーザによるクローン親ファイル(詳しくは後述する)の更新を防ぐことが出来る。
ただし、Indexディレクトリ1250は必ずしも隠しディレクトリでなくてもよい。また、Indexディレクトリには、例えばファイル拡張子情報を格納するExtentionディレクトリなど他のディレクトリがあってもよい。Exportディレクトリ1240には一般ユーザがアクセスするファイルが格納されており、Indexディレクトリ1250に登録されたファイルはクローン子ファイル(詳しくは後述する)となる。
ここで、ファイルのクローン化とは、同一内容のファイルが複数ある場合、もしくは同一内容のファイルを複製した場合、同一内容の複数のファイルのうち一つのファイルをクローン親ファイルとし、同一内容の複数の他のファイルについてクローン子ファイルとする。クローン子ファイルのinode情報のファイルの構成とブロックポインタの対応関係情報を変更し、クローン子ファイルにアクセスがあった場合にクローン親ファイルのinode情報のうちファイル構成とブロックポインタの対応関係情報が参照されるようにする。そして、クローン子ファイルの実データを削除するものである。これにより、クローン子ファイルはスタブ化され、実データを持つのはクローン親ファイルだけとなり必要な記憶容量を削減する事が出来る。
クローン子ファイルへライトアクセスがあった際には、ブロックポインタがポイントする論理ブロック領域に物理ブロック領域を割り当て、前記物理ブロック領域にデータが格納される。また、クローン子ファイルのinode情報のファイルの構成とブロックポインタの対応関係情報について変更し、更新があった部分へのリード処理については、クローン子ファイルのブロックポインタを参照し、ブロックポインタがポイントする領域に格納されたデータをリードするようにする。前記物理ブロック領域へのアクセスについては当該領域のデータを参照し、他の領域の場合にはクローン親ファイルを参照するようにする。
次に、図3を用いて本実施形態におけるファイルクローン化及び、Indexディレクトリ1250へのファイル登録の流れについて説明する。S17010において、Indexディレクトリの備える複数のレンジサイズディレクトリのうち、Exportディレクトリ1240に格納される登録対象のファイルのファイルサイズを格納対象とするレンジサイズディレクトリに、登録対象のファイルのファイルサイズディレクトリ名として持つ実サイズディレクトリが作成される。
S17020において、S17010で作成した実サイズディレクトリに登録対象のファイルと同一サイズであり、<nohash>.<inode番号>をファイル名とする空ファイルを作成する。このようにIndexディレクトリへの初回登録時は、ハッシュ値情報を登録しないことで、シングルインスタンスリスト1236に記載されている全ファイルのハッシュ値計算による処理オーバーヘッドを削減し、処理が高速化できる。なお、ファイル名はハッシュ値計算が未実施であることをあらわすために定義された任意の文字列であればよい。
S17030において、S17020で作成した空ファイルのブロックポインタを登録対象のファイルの実データを参照するように変更する。S17040において、登録ファイルのinode情報をS17030で作成したファイルのinode情報を参照するように変更する。S17050において、登録対象のファイルのブロックポインタを削除する。
本処理により、Exportディレクトリ1240に親ファイルを参照するスタブファイルであるクローン子ファイル、Indexディレクトリに参照されるクローン親ファイルが作成される。結果、隠しディレクトリであるIndexディレクトリにクローン親ファイルを置くことができ、ユーザによるクローン親ファイルの更新を防ぎ、管理情報の変更による負荷を低減することができる。また、本処理は、コピー処理なしでデータを登録対象のファイルからIndexディレクトリの作成したファイルに移すことができるため、移行処理に伴う負荷を低減することができる。
図2に戻り、例えば、ファイルA1241、ファイルB1242及びファイルC1243のファイルパスがシングルインスタンスリスト1236に記載されているとする。ファイルAが実サイズディレクトリ1251内の<nohash.100>ファイル1252としてクローン親ファイルが登録され、Exportディレクトリ1240内のファイルA1241はクローン子ファイル化される。また、ファイルB1242に関しても、ファイルA1241同様、実サイズディレクトリ1253及びクローン親ファイル1254としてIndexディレクトリ1250に登録され、Exportディレクトリ内のファイルB1242はクローン子ファイル化される。
重複検出プログラム1234は、ハッシュ値比較を行わない重複検出プログラム処理Aと、ハッシュ値比較を行う重複検出プログラム処理Bを備える。以下区別の必要がない場合には重複検出プログラム1234と呼ぶ。重複検出プログラム1234は、ファイルサイズが同一のファイルについてバイナリ比較を行う。例えば、ファイルB1242とファイルC1243に関して、バイナリ比較を行う。
また、この時にバイナリ比較のためにリードしたデータを利用して、ハッシュ値計算も行う。これは、中身は異なるがファイルサイズが同じファイルが大量にある場合、ファイルサイズ比較による重複ファイル検出は、バイナリ比較回数が増加し、重複ファイル検出に時間がかかってしまうという課題があるためである。これを解決するために、中身が異なるがファイルサイズが同じファイルの数が閾値以上である場合には、重複検出プログラムBの処理の一部として、ハッシュ値比較も行えるようにするためである。
重複検出プログラム1234は、計算したハッシュ値を用いて、<nohash>.<inode番号>のファイル名を、<ハッシュ値>.<inode番号>にリネームする。バイナリ比較の結果、バイナリ一致の場合は、ファイルクローンプログラム1235によって、ファイル重複が検出されたファイル、例えばファイルC1243を、クローン子ファイル化する。
前記プロセスで、ファイルBとファイルCのシングルインスタンス化が行われる。バイナリ比較の結果、バイナリ不一致の場合は、Indexディレクトリ1250への登録を行う。バイナリ比較時にハッシュ計算を行っているため、<ハッシュ値>.<inode番号>のファイル名でクローン親ファイルを登録する。また、クローン親ファイルはいくつのクローン子ファイルから参照されているかを管理する参照カウンタを持つ。クローン親ファイルの削除処理は後述するが、クローン子ファイルが削除されるとクローン親ファイルの参照カウンタが減らされ、全てのクローン子ファイルが削除されると参照カウンタは0となり、クローン親ファイルは不要となるため、クローン親ファイルが自動的に削除される。
NFSクライアント1211は、NFSプロトコルを介して、アプリケーション1210がNASデバイス1000上のデータファイル内のデータにアクセス可能にする、NFSクライアント機能を含み、NASヘッド1100のNFSサーバプログラム1121にアクセスする。NFSサーバプログラム1121は、NFSクライアント1211に代わって、NASヘッド1100に結合するNASストレージシステム1150上のボリューム1220にデータが格納されているファイルシステム1125にアクセスする。
次に、図4から図9を用いて、ファイルクローン機能を用いた具体的なシングルインスタンス化の流れについて説明をする。図4は、シングルインスタンスプログラム1124が実行される前のファイルB1302の状態を示す。Exportディレクトリ1240はユーザがアクセスするファイルが格納されている。ファイルB1302はファイルサイズが3.2MB、inode番号が240である。ファイルB1302は、inode情報1410、ブロックポインタ1420及び実データが格納されるブロック領域1431及び1432から構成されている。
Indexディレクトリ1250直下にはSizeディレクトリ1320があり、図4〜図9では省略しているが、ファイルサイズとハッシュ値以外の情報を格納するためのディレクトリ、例えばファイル拡張子情報を格納するExtentionディレクトリなどがあってもよい。前述したレンジサイズディレクトリは、図4〜図9では4Mディレクトリ1335のみ示し、他のレンジサイズディレクトリは省略している。
図5は、BファイルB1302がシングルインスタンスプログラム1124によってIndexディレクトリ1250に登録される処理を示す図である。レンジサイズディレクトリである4Mディレクトリ1335に、ファイルB1302のファイルサイズをディレクトリ名として持つ3.2Mディレクトリ1342が作成される。続いて、3.2Mディレクトリ1342に<nohash>.<inode番号>をファイル名とする空ファイルを作成する。ファイルB1302の場合は、<nohash.240>がファイル名となる。なお、ファイル名はハッシュ値計算が未実施であることをあらわすために定義された任意の文字列であればよい。
<nohash.240>ファイル1352は、inode情報1510、ブロックポインタ1520を持ち、ブロックポインタ1520は、ファイルB1302のブロックポインタ1420と同じブロック領域1431及び1432をポインタする。そして、ファイルB1302のinode情報1410を変更して、ファイルB1302へのデータアクセス時は、<nohash.240>ファイル1352のinode情報1510を経由してブロック領域1431及び1432を参照されるようにする。こうすることで、コピー処理なしでデータをファイルB1302から<nohash.240>ファイル1352に付け替える。この状態の<nohash.240>ファイル1352をクローン親ファイル、ファイルB1302をクローン子ファイルであり、実データを持っているのはクローン親ファイルで、クローン子ファイルはクローン親ファイルを経由して実データを参照する。
図6は、同一の内容のファイルであるファイルB1302とファイルC1303のシングルインスタンス化の処理を示す図である。Exportディレクトリ1240に、クローン子ファイル化されたファイルB1302と通常のファイルであるファイルC1303がある。ファイルC1303はファイルサイズが3.2MB、inode番号が260である。ファイルC1303は、inode情報1610、ブロックポインタ1620及び実データが格納されるブロック領域1631及び1632から構成されている。ファイルB1302とファイルC1303は同一ファイルであるため、ブロック領域1431と1631には同じデータが、ブロック領域1432と1632には同じデータが格納されている。
ファイルC1303のファイルサイズを取得され、<nohash.240>ファイル1352のファイルサイズの比較が行われる。結果、両ファイルは同じファイルサイズであるため両ファイルのバイナリ比較が行われる。具体的には、ブロック領域1431、1432とブロック領域1631、1632のバイナリ比較がなされ、バイナリ一致を確認される。また、バイナリ比較時にディスクリードしたデータを利用して、ハッシュ値が計算される。そして、前記ハッシュ値を用いて、<nohash.240>ファイル1352を<5AF4B.240>にファイル名がリネームされる。
ファイルC1303のinode情報1610を変更して、ファイルC1303へのデータアクセス時は、<5AF4B.240>ファイル1352のinode情報1510を経由してブロック領域1431及び1432が参照されるようにする。そして、ファイルC1303のブロックポインタ1620のポインタ先のブロック領域1631及び1632のデータが削除される。
図7が、ファイルB1302とファイルC1303のシングルインスタンス化の処理後を示す図である。ファイルC1303は、<5AF4B.240>ファイル1352をクローン親ファイルとするクローン子ファイルとなる(ファイルCのinode情報1610はinode情報1710へ、ブロックポインタ1620はブロックポインタ1720へと変更する)。ファイルB1302とファイルC1303はともにクローン子ファイルとなり、クローン親ファイルのブロック領域1431及び1432をともに参照するシングルインスタンス化が実現される。
図8は、ファイルB1302の2つ目の論理ブロック領域1832及びファイルC1303の1つ目の論理ブロック領域1833が更新された場合の処理を示す図である。シングルインスタンス化処理後、ファイルB1302へのファイル更新が行われるまでは、ファイルB1302のブロックポインタ1420がポインタする論理ブロック領域1831及び1832には、物理ブロック領域は割り当てられていない。
ファイル更新により、ファイルB1302の2つ目の論理ブロック領域1832のデータが変更された場合、ブロックポインタ1430がポイントする論理ブロック領域1832に物理ブロック領域が割り当てられ、前記物理ブロック領域にデータが格納される。ファイルC1303のファイル更新も同様に、1つ目の論理ブロック領域1833が更新された場合は、ブロックポインタ1730がポイントする論理ブロック領域1833に物理ブロック領域が割り当てられ、前記物理ブロック領域にデータが格納される。このときに、ファイルB及びファイルCのinode情報を書き換え、物理ブロックが割り当てられた領域にアクセスが来た場合は、当該領域に格納されるデータが参照されるようにする。
ファイル更新後のファイルB1302へのデータアクセス時は、1つ目の論理ブロック領域1831に関しては、物理ブロック領域が割り当てられていないため、クローン親ファイルのinode情報1510を経由して、ブロック領域1431のデータを参照する。2つ目の論理ブロック領域1832に関しては、物理ブロック領域が割り当てられているため、前記物理ブロック領域1832のデータを参照する。
ファイル更新後のファイルC1303へのデータアクセス時は、1つ目の論理ブロック領域1833に関しては、物理ブロック領域が割り当てられているため、前記物理ブロック領域1833のデータを参照する。2つ目の論理ブロック領域1834に関しては、物理ブロック領域が割り当てられていないため、クローン親ファイルのinode情報1510を経由して、ブロック領域1432のデータを参照する。
特許文献1のシングルインスタンス化方法では、シングルインスタンス後にファイル更新を行うと、ファイルの全領域が実体化(物理ブロック領域の割り当て)するため、シングルインスタンス化による容量削減効果が0になってしまう。一方で本発明の方式では、シングルインスタンス後のファイル更新データをクローン子ファイル側で持つため、データ更新されなかった領域は、シングルインスタンス化されたファイル間で引き続き共有するため、データ更新されなかった領域に関するシングルインスタンス化による容量削減効果は維持される。
なお、スナップショット技術においても、更新データを別途持つということが行われているが、本発明の方が管理情報を少なくて済むという違いがある。スナップショットは通常複数世代のスナップショットを取得するため、各世代それぞれ全領域がそれぞれ対応するデータ領域の管理情報を持たなければならない。それに対して、本発明では更新があった部分はクローン子ファイル側を参照し、更新がなかった部分はクローン親ファイル側を参照するという方式のため、追加の管理情報は更新データをクローン子ファイル側で持つだけで、当該更新データがなければクローン親ファイル側を参照するという方式のため、全領域がそれぞれ対応するデータ領域の管理情報は不要である。
Indexディレクトリ1250のツリー構造は、登録されるファイルのファイルサイズによって格納されるディレクトリが決まり、格納されるファイルのファイル名は、ハッシュ値とinode番号で決まる。仮に、Indexディレクトリ1250に格納されるファイルのファイルサイズ、ハッシュ値及びinode番号が途中で変更されると、ファイル移動やリネームといった処理によるIndexディレクトリ1250のメンテナンス処理が必要になる。前記処理による負荷によって、ファイルストレージの性能が低下する場合があると考えられる。
本実施の形態では、Indexディレクトリ1250に格納されるのはクローン親ファイルであり、シングルインスタンス化されるExportディレクトリ1240のファイルは全てクローン子ファイルとし、更新データをクローン子ファイル側で持つことにより、隠しディレクトリであるIndexディレクトリ1250に格納されるクローン親ファイルがユーザに更新されないようにしている。そのため、Indexディレクトリ1250に格納されたファイルは、Exportディレクトリ1240のファイルが更新されても、ファイルサイズ、ハッシュ値及びinode番号が変更されることはない。このため、Indexディレクトリ1250のメンテナンス処理が不要であり、メンテナンス処理の負荷による、ファイルストレージの性能が低下を防ぐことができる。
図9はシングルインスタンスリスト作成フローである。本処理は、ポリシー判定プログラム1123により実行され、シングルインスタンスリスト1236が作成される。本フローはシングルインスタンス化の可否の判断の前に、各ファイルをシングルインスタンス化すべきファイルかどうかを判断する処理といえる。
S10010において、シングルインスタンスポリシーファイル1232が読込まれる。このシングルインスタンスポリシーファイル1232には、シングルインスタンスリストファイル作成時に用いられるポリシーが記載されている。ポリシーとしては、例えば、作成日時、更新日時、アクセス日時、ファイルサイズ、ファイル拡張子、ファイルシステム名、ディレクトリ名、ファイル名などが設定される。これらのポリシーはNASマネージャ1212や接続される入力装置を介し、ユーザのシステム管理者等により設定される。例えば、ファイルがシングルインスタンス化(若しくは図3の様なクローン化)されると、ファイルアクセス応答速度が落ちる可能性があるため、ファイルアクセス確率が高くなりがちな更新日時の新しいファイルについては、シングルインスタンス化しない様に設定をする事が出来る。
S10020において、ファイルリストファイル1231を読込む。このファイルリストファイル1231は、NOTIFYプログラム1122により作成される。ファイルシステム1125は、ファイルの新規作成、ファイル更新、ファイル削除といったファイルへの変更があった場合、NOTIFYプログラム1122に通知する。NOTIFYプログラム1122は、前記通知を受信したら、当該ファイルのファイルパスをファイルリストファイル1231に追加する。
S10030において、ファイルリストファイル1231に記載されているファイルであって、まだポリシー判定をしていないファイルの一つを選択する。S10040において、S10030で選択したファイルがシングルインスタンスポリシーファイル1232に記載されているポリシーをもとに判定する。ポリシーに合致すればS10050にすすみ、合致しなければS10060にすすむ。
S10050において、ポリシーに合致したファイルのファイルパスをシングルインスタンスリストファイル1236に追加する。ここのシングルインスタンスリストファイル1236に追加されたファイルをシングルインスタンス化することが可能かどうかを判断されるファイルである。S10060において、ファイルリストファイル1231に次のファイルがある場合はS10030に戻り、ファイルリストファイル1231に記載されている全ファイルのポリシー判定が終了した場合は本処理を終了する。
<シングルインスタンス化処理のフローチャート>
図10、図11及び図12は、シングルインスタンス化処理を説明するためのフローチャートである。本処理は、シングルインスタンスプログラム1124によって実行される。シングルインスタンスプログラム1124は、ファイル分類プログラム1233、重複検出プログラム1234及びファイルクローンプログラム1235から構成され、各プログラムが連携してシングルインスタンス化処理が行われる。
ファイル分類プログラム1233が主に図10に示すシングルインスタンス化処理の全体的な制御を行い、重複検出プログラム1234が図11及び図12に示す処理を行う。ファイルクローンプログラム1235は、図10、図11及び図12における、ファイルのクローン化処理が行なわれる。
図10を参照して、S11010において、ファイル分類プログラム1233が、シングルインスタンスリスト1236を読込み、シングルインスタンスリスト1236に記載されているファイルを順番に処理する。処理する順番に制限はないが、ファイルサイズの大きなファイルの方が、容量削減量が大きい傾向にあるため、例えばファイルサイズの大きなファイルから順番に処理する。但し大きなファイルから順番に処理するには容量を調べる負荷がかかるため、シングルインスタンスポリシー1232で規定する、シングルインスタンス化対象ファイルサイズを徐々に小さくしていくことで、並び替えと同様の効果を得る事が出来る。あらかじめ設定した所定時間以内にシングルインスタンス化処理が終わらなかったら、処理を打ち切ってもよい。こうすることで、容量削減効果の大きいファイルサイズの大きなファイルのシングルインスタンス化が完了すれば、ある程度の容量削減ができているためである。
S11020において、S11010で選択したファイルのファイルサイズを取得する。例えば、ファイルシステム1125のSTATシステムコール機能を用いて取得する。S11030において、S11010で選択したファイルと同一ファイルサイズのファイルが重複検出プログラム1234で処理中でないかチェックし、処理されている場合は当該ファイルへの処理は後回しにし、S11010に戻って次のファイルを処理する。
これは、後述するファイルサイズ比較においてIndexディレクトリ1250が利用されるが、Indexディレクトリへのファイル登録は重複検出プログラム1234も行うので、同じファイルサイズのファイルをファイル分類プログラム1233と重複検出プログラム1234で同時に処理すると、ファイルサイズ比較で漏れてしまう可能性があるためである。同じファイルサイズのファイルが重複検出プログラム1234で処理されていなければ、S11040にすすむ。
この制御により、ファイル分類プログラム1233は、重複検出プログラム1234起動後、プログラム終了を待たずに次の処理を開始することができ、ファイル分類プログラム1233と重複検出プログラム1234が並行して同時に実行されることで処理の高速化が可能である。また、重複検出プログラム1234を複数並行して同時に起動することも可能である。
S11040において、S11010で選択したファイルと同一ファイルサイズのファイルがIndexディレクトリ1250に登録されているかチェックする。Indexディレクトリには実サイズディレクトリ名としてファイルサイズが記憶されており、ディレクトリのフルパスも事前に分かっているため、例えば、前記実サイズディレクトリをopendirもしくはstatシステムコールなどファイルシステムへ発行した時の、その返り値で、同一ファイルサイズのファイルがIndexディレクトリ1250に登録されているか判定可能である。この結果、Indexサイズリストを作成し、バイナリサーチを行うよりも高速にファイルサイズ判定が行える。登録されていない場合はS11060に進み、登録されている場合はS11050に進む。
S11050においては、前記同一ファイルサイズのファイルの数が閾値未満かを判断し、閾値未満であった場合にはS11051に進み重複検出プログラムAを起動し、閾値以上であった場合にはS11052に進み重複検出プログラムBを起動する。この閾値は、NASデバイス1000で設定可能とし、例えばNASマネージャ1212を用いて設定する。重複検出処理は、同一ファイルサイズのファイルが1個や2個など、少ない場合はハッシュ値比較を用いずに、総当たりでバイナリ比較を行った方が、処理時間が短い場合が多い。
一方で、同一ファイルサイズのファイルが多い場合は、総当たりでバイナリ比較を行うと長時間を要する場合がある。また、ファイルサイズが大きくてバイナリ比較時間が長く、簡易なハッシュ計算であれば、1つ目のファイル比較からハッシュ値比較を用いた方がトータルの処理時間は短くなる場合がある。また逆にファイルサイズが小さくてバイナリ比較時間が短い場合は、実サイズディレクトリ内のファイルが2つなど少ない場合は、ハッシュ値比較を行わずにバイナリ比較のみで判定した方がトータルの処理時間が短くなる場合があるため、実サイズディレクトリ内の3つ目からや4つ目からなどで、ハッシュ値比較を行うとしてもよい。実サイズディレクトリ内の何個目からのファイル比較からハッシュ値比較を併用した方がトータルの処理時間が短くなるかは、比較対象のファイルサイズに依存するため、レンジサイズディレクトリごとに実サイズディレクトリ内の何個目からハッシュ値比較を行うかを変更してもよい。この課題を解決するため、同一ファイルサイズのファイルが多い場合はさらにハッシュ値比較も行うよう、重複検出プログラムBを起動する。
S11010で選択したExportディレクトリ1240のファイルと、S11040で見つけたIndexディレクトリ1250のファイルを指定して、重複検出プログラム1234を起動する。Indexディレクトリ1250のファイルは、同一ファイルサイズのファイルが複数ある場合は、該当するファイル全てを指定する。S11030で説明した制御があるため、起動した重複検出プログラム1234の終了は待たずにS11070に進む。重複検出プログラム1234は複数同時起動可能である。S11060において、S11010で選択したExportディレクトリ1240のファイルに関して、図3及び図5で説明したIndexディレクトリ1250へのファイル登録とクローン子ファイル化を行う。
S11070において、S11010で選択したExportディレクトリ1240のファイルのシングルインスタンス化処理が終了した後、シングルインスタンス化されたファイルをシングルインスタンスリスト1236から削除する。S11080において、シングルインスタンスリスト1236にファイルが残っている場合は、S11010に戻り、次のファイルの処理を行う。ファイルが残っていない場合は、シングルインスタンス化処理は終了とする。
図11は図10のS11051で起動される重複検出プログラムAの処理のフローチャートである。S12010において、ファイル分類プログラム1233によって指定されたファイル間でバイナリの比較を行う。バイナリが一致しなかった場合はS12020へ進み、バイナリが一致した場合はS12030に進む。
S12020において、Indexディレクトリ1250に同一ファイルサイズのファイルが複数個あった場合は、ファイル分類プログラム1233によって複数個のIndexディレクトリ1250のファイルが指定される。次のバイナリ比較候補がある場合はS12010に戻る。次のバイナリ比較候補がない場合はS12040に進む。S12040において、ファイル分類プログラム1233によって指定されたExportディレクトリ1240のファイルに関して、図3及び図5で説明したIndexディレクトリ1250へのファイル登録とクローン子ファイル化を行う。
S12030において、ファイル分類プログラム1233によって指定されたExportディレクトリ1240のファイルに関して、図6で説明したシングルインスタンス化を行う。S12050において、ハッシュ値計算が必要かどうかの判定を行う。Indexディレクトリ1250へのファイル登録は、ファイル分類プログラム1233が指定したIndexディレクトリ1250のファイルに<nohash>のファイルが含まれている場合は、<nohash>ファイルのハッシュ値計算を行う必要があり、S12060に進む。<nohash>のファイルが含まれていない場合は、ハッシュ値計算は不要であり、重複検出プログラムAの処理を終了する。
S12060において、<nohash>のファイルのハッシュ値計算を行う。バイナリ比較後にハッシュ値計算を行えば、ハッシュ値計算で必要となるファイルの実データはキャッシュヒットする確率が高く、高速に処理できる可能性が高い。また、バイナリ比較時のファイルの実データリード時に、ハッシュ値計算も行ってしまってもよい。S12070において、S12060で計算したハッシュ値を用いて、<ハッシュ値>.<inode番号>にリネーム処理し、重複検出プログラムAの処理を終了する。
図12を参照して、Indexディレクトリに同一ファイルサイズのファイル数が閾値以上の場合に実施される場合の重複検出プログラムBについて説明をする。S13010において、ファイル分類プログラム1233によって指定されたExportディレクトリ1240のファイルのハッシュ値を計算する。
S13020において、ファイル分類プログラム1233によって指定されたIndexディレクトリ1250のファイルに関して、ハッシュ値がまだ計算されていない<nohash>のファイルがある場合はハッシュ値計算とリネーム処理が必要である。<nohash>のファイルがありリネーム処理が必要である場合はS13030に進み、不必要であればS13050に進む。S13030において、リネーム処理が必要なファイルのハッシュ値を計算する。S13040において、S13030で計算したハッシュ値を用いて、<ハッシュ値>.<inode番号>にリネーム処理する。
S13050において、S13010で計算したハッシュ値と、ファイル分類プログラム1233によって指定されたIndexディレクトリのファイルのハッシュ値はファイルネームとして記録されているため、それと比較を行う。ハッシュ値が一致しなかった場合はS13060へ進み、ハッシュ値が一致した場合はS13080に進む。S13060において、Indexディレクトリ1250に同一ファイルサイズのファイルが複数個あり、次のハッシュ値比較候補がある場合はS13050に戻る。次のハッシュ値比較候補がない場合はS13070に進む。
S13070において、ファイル分類プログラム1233によって指定されたExportディレクトリ1240のファイルに関して、図3及び図5で説明したIndexディレクトリ1250へのファイル登録とクローン子ファイル化を行う。この時、S13010においてExportディレクトリ1240のファイルのハッシュ値が計算されているため、<nohash>.<inode番号>ではなく、<ハッシュ値>.<inode番号>のファイル名でIndexディレクトリ1250に登録し、重複検出プログラムBの処理を終了する。
S13080において、ハッシュ値が一致していた場合、さらにバイナリ比較を行う。バイナリが不一致だった場合はS13060に進み、バイナリが一致していた場合はS13090に進む。S13090において、ファイル分類プログラム1233によって指定されたExportディレクトリ1240のファイルに関して、図6で説明したシングルインスタンス化を行い、重複検出プログラムBの処理を終了する。また、バイナリ比較時にハッシュ値計算も行っておくことで、中身が異なるがファイルサイズが同じファイルが多い場合でも、ハッシュ値比較により無駄なバイナリ比較回数を減らすことができる。
図13を用いて本発明の処理の一例を示す。Indexディレクトリ1250のシングルインスタンスリスト1236に、ファイルA1301、ファイルB1302、ファイルC1303、ファイルF1306、ファイルG1307、ファイルH1308、ファイルI1309及びファイルJ1310が記載されていた場合(ファイルD1304、ファイルE1305、ファイルK1311、ファイルL1312は未記載)、どのようにIndexディレクトリ1250に登録されるかを例として示す。ファイルA1301のファイルサイズは1.1MB、ファイルB1302とファイルC1303のファイルサイズは3.2MBで中身も同じデータ、ファイルF1306、ファイルG1307、ファイルH1308、ファイルI1309及びファイルJ1310は全てファイルサイズが3.42MBで同じだが、ファイルF1306とファイルG1307の中身が同じデータで、ファイルH1308、ファイルI1309及びファイルJ1310の中身が同じデータで、ファイルF1306及びファイルG1307とは異なるとする。
Indexディレクトリ1250の下にSizeディレクトリ1320があり、前記ディレクトリにファイルサイズ情報とハッシュ値を登録する。本明細書では説明を省略するが、ファイルの拡張子を利用してファイル重複検出を行う場合は、Extensionディレクトリ1321を作成し、前記ディレクトリに拡張子情報を登録していく。Sizeディレクトリ1320、Extensionディレクトリ1321以外にも、ファイル重複検出に利用する情報を登録するための各種ディレクトリを作成してもよい。
Sizeディレクトリ1320内に、レンジサイズディレクトリ1331〜1336を作成する。レンジサイズディレクトリは、ファイルシステムの性能低下を避けるため、格納されるディレクトリやファイルが特定のディレクトリに集中しないようにするためのものである。例えば、256Kディレクトリ1331には、ファイルサイズが256KB未満のファイルを登録する。512Kディレクトリ1332には、ファイルサイズが256KB以上512KB未満のファイルを登録する。1Mディレクトリ1333には、ファイルサイズが512KB以上1MB未満のファイルを登録する。2Mディレクトリ1334には、ファイルサイズが1MB以上2MB未満のファイルを登録する。4Mディレクトリ1335には、ファイルサイズが2MB以上4MB未満のファイルを登録する。8Mディレクトリ1336以降も同様である。
レンジサイズディレクトリの粒度は自由に設定可能であり、理想的には各レンジサイズディレクトリに格納されるディレクトリ数、ファイル数が平準化されるように設定されるのがよい。シングルインスタンス化を行うファイルシステムのファイルを分析し、各ファイルサイズレンジのファイル分布を分析して、レンジサイズディレクトリを設定してもよい。
初期状態では、Sizeディレクトリ1320とレンジサイズディレクトリ1331〜1336が作成されている。ファイルA1301に関する処理を以下に示す。まずファイルA1301と同じファイルサイズがIndexディレクトリ1250にすでに登録されていないかチェックする。ファイルAと同じ1.1Mのファイルはまだ登録されていないため、2Mディレクトリ1334にファイルサイズをディレクトリ名とする実サイズディレクトリ1341を作成する。ファイルA1301に関しては、1.1Mディレクトリ1341が作成される。そして、前記実サイズディレクトリに<nohash>.<100(ファイルAのinode番号)>をファイル名とするクローン親ファイル1351を作成し、Exportディレクトリ1240に格納されているファイルA1301をクローン子ファイル化する。
次に、ファイルB1302に関する処理を以下に示す。ファイルA1301同様、Indexディレクトリにまだ登録されていないファイルサイズのため、レンジサイズディレクトリである4Mディレクトリ1335に実サイズディレクトリである3.2Mディレクトリ1342を作成し、前記ディレクトリに<nohash>.<240(ファイルBのinode番号)>をファイル名とするクローン親ファイル1352を作成し、Exportディレクトリ1240に格納されているファイルB1302をクローン子ファイル化する。
次に、ファイルC1303に関する処理を以下に示す。ファイルB1302とファイルC1303は同一ファイルであるため、シングルインスタンス化されるべきファイルである。まずIndexディレクトリ1250にすでに同一ファイルサイズが登録されていないかチェックし、3.2Mディレクトリ1342があるため、すでに同一ファイルサイズのファイルが存在することが分かる。前記チェックがファイル重複検出のためのファイルサイズ比較であり、例えば、opendirシステムコールによって実サイズディレクトリをオープンしたり、もしくはstatシステムコールによって実サイズディレクトリ情報を取得するなどすると、その返り値で同一ファイルサイズのファイルがすでに存在するかが分かる。ファイルサイズ比較の結果、同一ファイルサイズのファイルがすでに存在したため、実サイズディレクトリ1342に格納されているファイル1352とファイルC1303でバイナリ比較を行う。
ファイルB1302とファイルC1303は同一ファイルであるため、ファイル1352とファイルC1303のバイナリ比較の結果は一致する。バイナリ比較の結果、ファイルC1303を、ファイル1352をクローン親ファイルとするクローン子ファイルとする。これにより、ファイルB1302とファイルC1303のシングルインスタンス化が実現される。また、バイナリ比較時にハッシュ値計算も行う。ハッシュ関数は何を用いてもよく、ファイルの全データを使用する通常のハッシュ計算以外に、例えば、ファイルの先頭4KBと末尾4KBそれぞれを、SHA1(Secure Hash Algorithm 1)ハッシュ関数でハッシュ値を計算し、それぞれを加算した値の先頭5桁をハッシュ値として使用してもよい。最終的なファイル重複判定はバイナリ比較により行うため、計算コストの小さいハッシュ値計算方式でも十分である。この計算したハッシュ値をもちいて、ファイル1352を、<nohash.240>から<5AF4B.240>にファイル名をリネームする。
次に、ファイルF1306に関する処理を以下に示す。ファイルA1301同様、Indexディレクトリにまだ登録されていないファイルサイズのため、レンジサイズディレクトリである4Mディレクトリ1335に実サイズディレクトリである3.42Mディレクトリ1343を作成し、前記ディレクトリに<nohash>.<263(ファイルFのinode番号)>をファイル名とするクローン親ファイル1353を作成し、Exportディレクトリ1240に格納されているファイルF1306をクローン子ファイル化する。
次に、ファイルG1307に関する処理を以下に示す。ファイルF1306とファイルG1307は同一ファイルであるため、シングルインスタンス化されるべきファイルである。まずIndexディレクトリ1250にすでに同一ファイルサイズが登録されていないかチェックし、3.42Mディレクトリ1343があるため、すでに同一ファイルサイズのファイルが存在することが分かる。ファイルサイズ比較の結果、同一ファイルサイズのファイルがすでに存在したため、実サイズディレクトリ1343に格納されているファイル1353とファイルG1307でバイナリ比較を行う。
ファイルF1306とファイルG1307は同一ファイルであるため、ファイル1353とファイルG1307のバイナリ比較の結果は一致する。そのため、ファイルG1307を、ファイル1353をクローン親ファイルとするクローン子ファイルとする。これにより、ファイルF1306とファイルG1307のシングルインスタンス化が実現される。また、バイナリ比較時にハッシュ値計算も行う。計算したハッシュ値をもちいて、ファイル1353を、<nohash.263>から<2B44F.263>にファイル名をリネームする。
次に、ファイルH1308に関する処理を以下に示す。ファイルH1308は、ファイルF1306とファイルG1307とファイルサイズは等しいが、中身のデータが異なるため、シングルインスタンス化されるファイルではない。まずIndexディレクトリ1250にすでに同一ファイルサイズが登録されていないかチェックし、3.42Mディレクトリ1343があるため、すでに同一ファイルサイズのファイルが存在することが分かる。ファイルサイズ比較の結果、同一ファイルサイズのファイルがすでに存在したため、実サイズディレクトリ1343に格納されているファイル1353とファイルH1308でバイナリ比較を行う。
ファイルF1306とファイルH1308は同一ファイルでないため、ファイル1353とファイルH1308のバイナリ比較の結果は一致しない。この時、以降の処理でファイルH1308と同一ファイルがあった場合、シングルインスタンス化するため、ファイルH1308をIndexディレクトリ1250に登録する。前記バイナリ比較時にハッシュ値計算を行っておき、3.42Mディレクトリ1343に<ハッシュ値>.<ファイルHのinode番号>をファイル名(3AB8F.431)とするクローン親ファイル1354を作成し、Exportディレクトリ1240に格納されているファイルH1308をクローン子ファイル化する。
バイナリ比較は、ファイルサイズが大きいファイルの場合はファイル全体がメモリ上に格納できないため、通常は一定サイズずつメモリに読込み、データ比較を行う。この時、データ不一致が発生した時点で、以降のデータ読込みはキャンセルしてしまってよい。そのため、ハッシュ値計算を先頭4KBと末尾4KBのデータを使用する方式としている場合は、バイナリ比較中にデータ不一致が発生した場合は、先頭から順にバイナリ比較を行うと末尾4KBのデータが読込まれていない場合がある。そこで、バイナリ比較は先頭と末尾をまず行う方式とすることで、ハッシュ値計算時のキャッシュヒット率をあげることができる。
次に、ファイルI1309に関する処理を以下に示す。ファイルH1308とファイルI1309は同一ファイルであるため、シングルインスタンス化されるべきファイルである。まずIndexディレクトリ1250にすでに同一ファイルサイズが登録されていないかチェックし、3.42Mディレクトリ1343があるため、すでに同一ファイルサイズのファイルが存在することが分かる。ここでは同一ファイルサイズのファイルがすでに存在したため、実サイズディレクトリ1343に格納されているファイル1353及びファイル1354と、ファイルI1309でバイナリ比較を行う。ファイル1353とファイル1354はバイナリ比較の結果、バイナリ不一致であったためIndexディレクトリ1250に別々に登録されているので、実サイズディレクトリ内に複数ファイルが格納されている場合、それぞれのファイルのバイナリが異なることが保証されている。
Indexディレクトリ1250に登録されているファイル1353とファイル1354はファイル名にハッシュ値が入っているため、ハッシュ値計算しなくてもハッシュ値比較を行うことができるが、ファイルI1309のハッシュ値は計算しないと分からないため、まずはファイルI1309とファイル1353のバイナリ比較を行い、バイナリ比較と一緒にハッシュ値計算を行う。ファイルI1309とファイル1353の中身のデータは異なるため、バイナリ比較の結果は、バイナリ不一致となる。
次に、ファイルI1309とファイル1354の比較であるが、この時にはファイルI1309のハッシュ値が分かっているため、まずファイルI1309とファイル1354のハッシュ値比較を行う。ハッシュ値が一致した場合は、さらにバイナリ比較を行い、ハッシュ値若しくはバイナリ不一致だった場合は、実サイズディレクトリ内に次の比較対象がある場合は次のファイルとハッシュ値比較をする。ファイルI1309の場合は、ファイル1354とのハッシュ値比較の結果、ハッシュ値が一致し、さらにバイナリ比較の結果もバイナリ一致となる。
そのため、ファイルI1309を、ファイル1354をクローン親ファイルとするクローン子ファイルとする。これにより、ファイルH1308とファイルI1309のシングルインスタンス化が実現される。なお、何れの実ファイルともハッシュ値若しくはバイナリがバイナリ不一致となった場合は、当該実サイズディレクトリに<ハッシュ値>.<inode番号>をファイル名とするクローン親ファイルを作成し、Exportディレクトリに格納されているファイルをクローン子ファイル化する。
次に、ファイルJ1310に関する処理を以下に示す。ファイルH1308、ファイルI1309及びファイルJ1310は同一ファイルであるため、シングルインスタンス化されるべきファイルである。まずIndexディレクトリ1250にすでに同一ファイルサイズが登録されていないかチェックし、3.42Mディレクトリ1343があるため、すでに同一ファイルサイズのファイルが存在することが分かる。ファイルサイズ比較の結果、同一ファイルサイズのファイルがすでに存在するため、実サイズディレクトリ1343に格納されているファイル1353及びファイル1354と、ファイルJ1310でバイナリ比較を行う。
ファイルJ1310とファイル1353の中身のデータは異なるため、バイナリ比較の結果は、バイナリ不一致となる。つぎに、ファイルJ1310とファイル1354の比較であるが、この時にはファイルJ1310のハッシュ値が分かっているため、まずファイルJ1310とファイル1354のハッシュ値比較を行う。ファイルJ1310とファイル1354とのハッシュ値比較の結果、ハッシュ値が一致し、さらにバイナリ比較の結果もバイナリ一致となる。そのため、ファイルJ1310を、ファイル1354をクローン親ファイルとするクローン子ファイルとする。これにより、ファイルH1308、ファイルI1309及びファイルJ1310のシングルインスタンス化が実現される。
また、前記では実サイズディレクトリの1つ目のファイルとの比較はバイナリ比較、2つ目のファイルからハッシュ値比較としたが、まずExportディレクトリのファイルのハッシュ値を計算し、実サイズディレクトリの1つ目のファイルからハッシュ値比較としてもよい。ファイルサイズが大きくてバイナリ比較時間が長く、簡易なハッシュ計算であれば、1つ目のファイル比較からハッシュ値比較を用いた方がトータルの処理時間は短くなる場合がある。また逆にファイルサイズが小さくてバイナリ比較時間が短い場合は、実サイズディレクトリ内のファイルが2つなど少ない場合は、ハッシュ値比較を行わずにバイナリ比較のみで判定した方がトータルの処理時間が短くなる場合があるため、実サイズディレクトリ内の3つ目からや4つ目からなどで、ハッシュ値比較を行うとしてもよい。実サイズディレクトリ内の何個目からのファイル比較からハッシュ値比較を併用した方がトータルの処理時間が短くなるかは、比較対象のファイルサイズに依存するため、レンジサイズディレクトリごとに実サイズディレクトリ内の何個目からハッシュ値比較を行うかを変更してもよい。
このように本発明は、まずファイルサイズ比較によりファイル重複検出を行い、ファイルサイズが一致したファイルに関してバイナリ比較を行う。ファイルサイズ比較の場合、ファイルのメタデータのみリードすればよいため、ハッシュ値計算のようにファイルの実データをリードする必要がなく、リード処理によるオーバーヘッドがなく処理が高速化できる。
また、本願発明はファイルサイズが同じ場合にバイナリ比較の結果も同一である傾向の多いファイルサイズの大きなファイルに特に有効だが、ファイルサイズが小さいもので会ってもシングルインスタンス技術の目的である容量削減効果および処理の高速化に有効である。
そして、バイナリ比較を行った時にハッシュ値計算も行い、Indexディレクトリにハッシュ値情報を追加することで、ファイルサイズは同じだが、中身のデータは異なるファイルが多かった場合には、ハッシュ値比較も可能とすることで、無駄なバイナリ比較を減らすことができる。
(2)第2の実施形態
以下、本発明の第2の実施形態について説明する。なお、以下の説明では、第1の実施形態との相違点を主に説明し、第1の実施形態との共通点については説明を省略、或いは簡略する。
本発明の第2の実施形態では、クローン親ファイルの自動削除処理について示す。クローン親ファイルは隠しディレクトリであるIndexディレクトリ1250に格納されているため、ユーザには非公開である。そのため、不要となったクローン親ファイルはNASデバイス1000が削除しなければ、ゴミファイルとして残ってしまう。そこで、NASデバイス1000は、クローン親ファイルが不要となった時点で、自動的にクローン親ファイルが削除される機能を有する。例えば、前記機能はファイルシステム1125で実現される。クローン親ファイルが不要となるのは、クローン親ファイルを参照しているクローン子ファイルがなくなった時である。そのため、クローン子ファイルが削除された時、クローン親ファイルの削除処理を行うか判定する。
図14において、ファイルB13010とファイルC13020が、ファイル13030をクローン親ファイルとしてシングルインスタンス化されている場合において、ファイルB13010とファイルC13020がユーザによって削除されて、ファイル13030が自動削除される場合を例として示す。
ユーザは、NFSクライアント13050を使用して、NFSサーバプログラム13060を介して、ファイルシステム13070にアクセスする。ユーザには、Exportディレクトリ1240のファイルが公開されており、Indexディレクトリ1250のファイルは見えない。クローン親ファイルであるファイル13030は、ファイルB13010とファイルC13020に参照されているため、参照カウンタは2となっている。まず、ユーザがファイルB13010を削除する。クローン子ファイルが削除された場合、参照先であるクローン親ファイルの参照カウンタを−1する。これにより、クローン親ファイルであるファイル13030の参照カウンタは1となる。クローン親ファイルであるファイル13030は、まだファイルC13020に参照されているため、削除されない。
次に、ユーザがファイルC13020を削除する。クローン親ファイルであるファイル13030の参照カウンタは、さらに−1され、0となる。クローン親ファイルであるファイル13030を参照しているクローン子ファイルがなくなったため、ファイル13030は不要であるため、システムによって、例えばファイルシステム13070によって、ファイル13030は削除される。
さらに、ファイル13030が格納されていた実サイズディレクトリ13040が空になったため、3.2MBのファイルサイズのファイルがIndexディレクトリ1250に登録されていないため、実サイズディレクトリ13040も削除される。また、実サイズディレクトリの削除に関しては、ファイル分類プログラム1233において、ファイルサイズ比較時に、実サイズディレクトリは存在するが、実サイズディレクトリ内のファイル数が0の場合は、Indexディレクトリへのファイル登録処理が行われるようにすることで、前記実サイズディレクトリの削除処理を代替えしてもよい。
図15において、クローン親ファイルの削除判定処理のフローチャートを示す。本処理は、例えばファイルシステム13070が実行する。ユーザがExportディレクトリ1240に格納されているクローン子ファイルを削除したのを契機に、ファイルシステム13070が図15で示す処理を実行する。
S14010において、クローン子ファイルが削除される。S14020において、削除されたクローン子ファイルが参照しているクローン親ファイルの参照カウンタを−1する。S14030において、前記クローン親ファイルの参照カウンタが0になった場合はS14040に進み、0にならなかった場合は本処理を終了する。S14040において、前記クローン親ファイルを削除する。
S14050において、前記クローン親ファイルが格納されていた実サイズディレクトリ13040に格納されているファイル数が0になった場合はS14060に進み、0にならなかった場合は本処理を終了する。S14060において、前記実サイズディレクトリを削除し、処理を終了する。
本処理により、クローン子ファイルが削除等によりなくなった場合には、不要となるクローン親ファイルが削除される事となる。これによりデータを持つクローン親ファイルがボリューム上に残される事がなくなり効率的にボリュームの記憶容量を使う事が出来る。また、実サイズディレクトリも削除するため、図10のファイルサイズ比較において、空のディレクトリとの比較をすることもなくなるため、処理は高速化し、エラーも減少する。
(3)第3の実施形態
以下、本発明の第3の実施形態について説明する。なお、以下の説明では、第1の実施形態との相違点を主に説明し、第1の実施形態との共通点については説明を省略、或いは簡略する。
本発明の第3の実施形態では、スプリット処理について示す。スプリット処理とは、クローンファイルを通常ファイルに戻す処理であるが、本願発明において、シングルインスタンス化されたファイルを通常ファイルに戻す処理において、スプリット処理を利用する。スプリット処理すると、クローン親ファイルを参照しているクローン子ファイルが減るため、クローン親ファイルを参照しているクローン子ファイルがなくなった場合は、クローン親ファイルの削除も行う。
スプリットが使用されるケースは、例えば、クローン子ファイルに更新が行われることで、クローン子ファイルとクローン親ファイルの差分が大きくなってきた場合にはクローン親ファイルのデータが無駄になる場合があり、前記状況を解消するために用いられたり、誤ったファイルをクローン子ファイル化してしまった場合や、クローン子ファイルへのアクセス頻度が上がったために通常ファイルに戻したい場合などに用いられる。
図16において、ファイルB15010とファイルC15020が、ファイル15030をクローン親ファイルとしてシングルインスタンス化されている場合において、ファイルB15010とファイルC15020がスプリット処理された場合を例として示す。スプリット処理は、例えばNASマネージャ15200を用いて、システム管理者がスプリットしたいファイルを指定してスプリットコマンドをNASデバイス1000に発行することで実行される。
システム管理者が、まずファイルB15010をスプリットする。ファイルB15010が持っている更新データ以外の部分、つまりクローン親ファイルを参照している部分を、クローン親ファイルからクローン子ファイルにデータコピーし、ファイルB15010がクローン子ファイルから通常ファイルに変換される。そして、参照先であったクローン親ファイルの参照カウンタを−1する。これにより、クローン親ファイルであるファイル15030の参照カウンタは1となる。クローン親ファイルであるファイル15030は、まだファイルC15020に参照されているため、削除されない。
次に、システム管理者が、ファイルC15020をスプリットする。ファイルC15020が持っている更新データ以外の部分、つまりクローン親ファイルを参照している部分を、クローン親ファイルからクローン子ファイルにデータコピーし、ファイルC15020がクローン子ファイルから通常ファイルに変換される。そして、クローン親ファイルであるファイル15030の参照カウンタは、さらに−1され、0となる。
クローン親ファイルであるファイル15030を参照しているクローン子ファイルがなくなったため、ファイル15030は不要であるため、システムによって、例えばファイルシステム15070によって、ファイル15030は削除される。さらに、ファイル15030が格納されていた実サイズディレクトリ15040が空になったので、3.2MBのファイルサイズのファイルがIndexディレクトリ1250の登録されていないため、実サイズディレクトリ15040も削除される。
図17において、スプリット処理のフローチャートを示す。本処理は、例えばファイルシステム15070が実行する。システム管理者がNASマネージャ15200を用いてNASデバイス1000にスプリットコマンドを発行し、前記コマンドを受領したNASデバイス1000がファイルシステム15070にスプリット処理開始を通知し、ファイルシステム15070が図17で示す処理を実行する。
また、クローン子ファイルとクローン親ファイルの差分が大きくなってきたかどうかは、システム管理者には分かりにくいため、ファイルシステム15070が判定する方式としてもよい。スプリットコマンド発行時に、クローン子ファイル側の更新データが全体の何%以上になったらスプリット処理を行うかのしきい値をオプション指定する。しきい値のオプション指定が省略された場合は、S16001の判定により、S16010の処理から始まりスプリット処理が行われる。しきい値のオプションが指定された場合は、S16002において、クローン子ファイルが持つ更新データ容量をチェックし、しきい値を超えていればS16010に進んでスプリット処理が行われる。しきい値を超えていなければスプリット処理は行われず、処理終了となる。
さらに、スプリットコマンドはファイル指定、ディレクトリ指定、ファイルシステム指定をサポートする。ディレクトリ指定の場合は当該ディレクトリ内のファイル全てに関してスプリット処理が行われ、ファイルシステム指定の場合は当該ファイルシステム内のファイル全てに関してスプリット処理が行われる。
S16010において、クローン子ファイルが持っている更新データ以外の部分、つまりクローン親ファイルを参照している部分を、クローン親ファイルからクローン子ファイルにデータコピーする。これにより、クローン子ファイル側で全データを持った状態となる。S16020において、クローン子ファイルのinode情報を変更して通常ファイルに変換する。S16030において、通常ファイルに変換されたクローン子ファイルが参照しているクローン親ファイルの参照カウンタを−1する。
S16040において、前記クローン親ファイルの参照カウンタが0になった場合はS16050に進み、0にならなかった場合は本処理を終了する。S16050において、前記クローン親ファイルを削除する。S16060において、前記クローン親ファイルが格納されていた実サイズディレクトリ16040に格納されているファイル数が0になった場合はS16070に進み、0にならなかった場合は本処理を終了する。S16070において、前記実サイズディレクトリを削除し、処理を終了する。
上記実施形態の効果として、クローン親ファイルとクローン子ファイルの差が大きくなった場合に、スプリットされるため、クローン親ファイルのデータが無駄になるのを防ぐことが出来る。以上、本発明の好適な幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
最後に、ここで述べたプロセス及び技術は本質的に如何なる特定の装置に関連することはなく、コンポーネントの如何なる相応しい組み合わせによってでも実装できることを理解する必要がある。更に、汎用目的の多様なタイプのデバイスがここでの記述に従って使用可能である。
加えて、本技術分野の通常の知識を有する者には、本発明のその他の実装がここに開示された本発明の明細書及び実施形態の考察から容易に明らかになる。明細書と具体例は典型的なものに過ぎず、記述された実施形態の多様な態様及び/又はコンポーネントは、データを管理する機能を有するコンピュータ化ストレージシステムに於いて、単独又は如何なる組み合わせでも使用することが出来る。
1000 NASデバイス
1100 NASヘッド
1122 NOTIFYプログラム
1123 ポリシー判定プログラム
1124 シングルインスタンスプログラム
1125 ファイルシステム
1150 NASストレージシステム
1160 ストレージコントローラ
1180、1181、1182 NASクライアント
1240 Exportディレクトリ
1250 Indexディレクトリ

Claims (13)

  1. ファイルストレージ装置であって、
    それぞれ管理情報と実データを備える複数のファイルを管理するコントローラと、
    前記複数のファイルを格納するボリュームを構成する記憶媒体を備え、
    前記ボリュームは第1のディレクトリ及び第2のディレクトリを備え、
    前記第1のディレクトリには第1のファイル及び第2のファイルが格納され、
    前記コントローラは
    前記第2のディレクトリに第3のファイルを作成し、
    前記第3のファイルの実データの格納領域として前記第2のファイルの実データ格納領域を示す様に、前記第3のファイルの管理情報を設定し、
    計算機から前記第2のファイルへのリードアクセスを受信した際に前記第3のファイルを参照する様に前記第2のファイルの管理情報を設定するとともに、前記第2のファイルの管理情報から、前記第2のファイルの実データ格納領域を示す管理情報を削除し、
    前記第1のファイルの実データと前記第3のファイルの実データのサイズを比較し、
    前記サイズ比較の結果データサイズが同一であった場合には、前記第1のファイルの実データと前記第3のファイルの実データのバイナリを比較し、
    前記バイナリ比較の結果バイナリが同一だった場合には、前記計算機から前記第1のファイルへのリードアクセスを受信した際に前記第3のファイルを参照する様に前記第1のファイルの管理情報を設定するとともに前記第1のファイルの管理情報から前記第1のファイルの実データ格納領域を示す管理情報を削除する
    ことを特徴とするファイルストレージ装置。
  2. 前記第1のファイルへのライト要求を受信した場合には、
    前記コントローラは、
    前記第1のファイルに更新データを格納し、
    前記更新データでない前記第1のファイルへのリード要求を受信した場合には、前記第3のファイルを参照し前記第3のファイルの実データを読み出し、
    前記更新データについて前記第1のファイルへのリード要求を受信した場合には、前記第1のファイルが備える前記更新データを読み出す
    こと特徴とする請求項1のファイルストレージ装置。
  3. 前記第2のディレクトリはインデックスディレクトリであって、
    前記第2のディレクトリに格納されるファイルのサイズをディレクトリ名とする第3のディレクトリを備え、
    前記第3のファイルは前記第3のファイルのサイズをディレクトリ名とする第3のディレクトリに作成され、
    前記第3のファイルの実データのサイズと前記第1のファイルの実データのサイズの比較には、前記コントローラは前記第3のファイルの実データのサイズに代えて、前記第3のディレクトリ名に記載のサイズと比較をする
    ことを特徴とする請求項1記載のファイルストレージ装置。
  4. 前記サイズ比較の結果データサイズが異なった場合には、
    前記コントローラは、
    前記第2のディレクトリに前記第1のファイルサイズをディレクトリ名とする第4のディレクトリを作成し、
    前記第4のディレクトリに第4のファイルを作成し、
    前記第4のファイルの実データの格納領域として前記第1のファイルの実データ格納領域を示す様に、前記第4のファイルの管理情報を設定し、
    前記計算機から前記第1のファイルへのリードアクセスを受信した際に前記第4のファイルを参照する様に前記第1のファイルの管理情報を設定するとともに、前記第1のファイルの管理情報から、前記第1のファイルの実データ格納領域を示す管理情報を削除する、
    ことを特徴とする請求項記載のファイルストレージ装置。
  5. 前記バイナリ比較の結果バイナリが異なった場合には、
    前記コントローラは、
    前記第3のディレクトリに第4のファイルを作成し、
    前記第4のファイルの実データの格納領域として前記第1のファイルの実データ格納領域を示す様に、前記第4のファイルの管理情報を設定し、
    前記計算機から前記第1のファイルへのリードアクセスを受信した際に前記第4のファイルを参照する様に前記第1のファイルの管理情報を設定するとともに、前記第1のファイルの管理情報から、前記第1のファイルの実データ格納領域を示す管理情報を削除する、
    ことを特徴とする請求項記載のファイルストレージ装置。
  6. 前記バイナリ比較時に、
    前記コントローラは、
    前記第1のファイルおよび前記第3のファイルのハッシュ値を計算し、
    前記第3のファイルを前記第3のファイルのハッシュ値含む名前に変更し、
    前記第4のファイルを前記第1のファイルのハッシュ値含む名前で作成する
    ことを特徴とする請求項記載のファイルストレージ装置。
  7. 前記サイズ比較の結果データサイズが同一であった場合、
    前記コントローラは、
    前記第3ディレクトリに格納されるファイルの数が閾値以上であるかを調査し、
    前記調査の結果前記第3のディレクトリに格納されるファイルの数が閾値以上であった場合には、
    前記第3のディレクトリに格納されるファイルと前記第1のファイルとでハッシュ値を比較し、
    前記ハッシュ値比較の結果前記第1のファイルとハッシュ値が同じファイルについて、
    前記第1のファイルとバイナリ比較をする
    ことを特徴とする請求項記載のファイルストレージ装置。
  8. 前記ハッシュ値比較は、計算した前記第1のファイルのハッシュ値と前記第3のディレクトリに格納されるファイルの名前に含まれるハッシュ値を比較することで行う
    ことを特徴とする請求項記載のファイルストレージ装置。
  9. 前記コントローラは
    前記第3のファイルが前記第1のディレクトリに格納される前記複数ファイルから参照されている数をカウントし、
    前記被参照数が0になった場合には、
    前記コントローラは前記第3のファイルを削除し、
    前記第3のファイルを削除した結果前記第3のディレクトリにファイルがなくなった場合、
    前記コントローラは、前記第3のディレクトリを削除する
    ことを特徴とする請求項記載のファイルストレージ装置。
  10. 前記コントローラは
    前記第1のファイルが備える前記更新データについて、前記第3のファイルが備える前記実データに対する前記更新データの割合を観測し、
    前記観測した割合が閾値以上になった場合、前記第3のファイルが備える前記実データのうち前記更新データ以外の部分について、前記第3のファイルから前記第1のファイルにコピーし、前記第1のファイルの管理情報から前記第3のファイルを参照する旨を削除する
    ことを特徴とする請求項2記載のファイルストレージ装置。
  11. 前記第1のディレクトリに格納されるファイルのうち、データの大きいファイルから、
    前記サイズ比較を行うことを特徴とする請求項1記載のファイルストレージ装置。
  12. 前記第2のディレクトリは隠しディレクトリであることを特徴とする請求項1記載のファイルストレージ装置。
  13. ファイルストレージ装置のシングルインスタンス化方法であって、
    前記ファイルストレージ装置は、
    それぞれ管理情報と実データを備える複数のファイルを管理するコントローラと、前記複数のファイルを格納するボリュームを構成する記憶媒体を備え、
    前記ボリュームは第1のディレクトリ及び第2のディレクトリを備え、
    前記第1のディレクトリには第1のファイル及び第2のファイルが格納され、
    前記コントローラは
    前記第2のディレクトリに、第3のファイルを作成し、前記第3のファイルの実データの格納領域として前記第2のファイルの実データ格納領域を示す様に、前記第3のファイルの管理情報を設定し、
    計算機から前記第2のファイルへのリードアクセスを受信した際に前記第3のファイルを参照する様に前記第2のファイルの管理情報を設定するとともに、前記第2のファイルの管理情報から、前記第2のファイルの実データ格納領域を示す管理情報を削除し
    前記第1のファイルの実データと前記第3のファイルの実データのサイズを比較し、
    前記サイズ比較の結果データサイズが同一であった場合には、前記第1のファイルの実データと前記第3のファイルの実データのバイナリを比較し、
    前記バイナリ比較の結果バイナリが同一だった場合には、前記計算機から前記第1のファイルへのリードアクセスを受信した際に前記第3のファイルを参照する様に前記第1のファイルの管理情報を設定するとともに前記第1のファイルの管理情報から前記第1のファイルの実データ格納領域を示す管理情報を削除する
    ことを特徴とするシングルインスタンス化方法。
JP2014533722A 2012-01-25 2012-01-25 ファイルクローンを利用したシングルインスタンス化方法及びそれを用いたファイルストレージ装置 Expired - Fee Related JP5856680B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/000464 WO2013111187A1 (en) 2012-01-25 2012-01-25 Single instantiation method using file clone and file storage system utilizing the same

Publications (2)

Publication Number Publication Date
JP2015503777A JP2015503777A (ja) 2015-02-02
JP5856680B2 true JP5856680B2 (ja) 2016-02-10

Family

ID=48798080

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014533722A Expired - Fee Related JP5856680B2 (ja) 2012-01-25 2012-01-25 ファイルクローンを利用したシングルインスタンス化方法及びそれを用いたファイルストレージ装置

Country Status (5)

Country Link
US (2) US8862558B2 (ja)
EP (1) EP2791831B1 (ja)
JP (1) JP5856680B2 (ja)
CN (1) CN104081391B (ja)
WO (1) WO2013111187A1 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130086753A (ko) * 2012-01-26 2013-08-05 삼성전자주식회사 컨텐츠의 중복 여부를 확인할 수 있는 휴대용 단말기의 장치 및 방법
JP2013175132A (ja) * 2012-02-27 2013-09-05 Fuji Xerox Co Ltd 文書管理サーバ装置、文書管理装置、文書管理システム、及び文書管理プログラム
US8776236B2 (en) * 2012-04-11 2014-07-08 Northrop Grumman Systems Corporation System and method for providing storage device-based advanced persistent threat (APT) protection
US9262423B2 (en) * 2012-09-27 2016-02-16 Microsoft Technology Licensing, Llc Large scale file storage in cloud computing
JP6033949B2 (ja) * 2013-02-19 2016-11-30 株式会社日立製作所 情報処理システム
US10256977B2 (en) 2014-02-18 2019-04-09 Synopsys, Inc. Methods and systems for efficient representation of file sets
US9547657B2 (en) 2014-02-18 2017-01-17 Black Duck Software, Inc. Methods and systems for efficient comparison of file sets
US9569110B2 (en) * 2014-11-18 2017-02-14 International Business Machines Corporation Efficient management of cloned data
CN104461780B (zh) * 2014-11-28 2017-12-15 华为技术有限公司 一种释放数据块的方法及装置
US9575681B1 (en) 2016-04-29 2017-02-21 International Business Machines Corporation Data deduplication with reduced hash computations
CN106021031B (zh) * 2016-05-30 2018-09-28 厦门市美亚柏科信息股份有限公司 一种btrfs文件***的删除数据恢复方法和装置
CN106095331B (zh) * 2016-05-31 2020-06-23 浙江科澜信息技术有限公司 一种固定大文件内部资源的控制方法
US11500836B2 (en) * 2017-06-27 2022-11-15 Salesforce, Inc. Systems and methods of creation and deletion of tenants within a database
JP6360956B1 (ja) * 2017-11-01 2018-07-18 株式会社Osk データ取込システム
CN107861726A (zh) * 2017-12-15 2018-03-30 苏州咖博士咖啡***科技有限公司 一种基于NandFlash的文件处理***的实例化方法
US10769117B2 (en) * 2018-01-18 2020-09-08 International Business Machines Corporation Effective handling of HSM migrated files and snapshots
US11461279B2 (en) * 2018-03-26 2022-10-04 Apple Inc. Share pools for sharing files via a storage service
CN108831531A (zh) * 2018-06-07 2018-11-16 滨州学院 一种基于云计算的自适应医学图像远程处理方法及应用***
CN109783467A (zh) * 2019-01-12 2019-05-21 郑州云海信息技术有限公司 一种分布式文件***的嵌套目录文件个数配额设置方法
CN110008179B (zh) * 2019-04-02 2023-06-16 深圳创维汽车智能有限公司 文件存储方法、行车记录仪及可读存储介质
US11487625B2 (en) * 2019-10-31 2022-11-01 Rubrik, Inc. Managing files according to categories
CN111917556B (zh) * 2020-07-23 2022-02-08 平安证券股份有限公司 交互文件检测方法、装置、终端及存储介质
US20220197944A1 (en) * 2020-12-22 2022-06-23 Netapp Inc. File metadata service
US11916950B1 (en) 2021-04-12 2024-02-27 Vmware, Inc. Coordinating a distributed vulnerability network scan
US11528317B1 (en) 2021-05-05 2022-12-13 Vmware, Inc. Proxy-enabled communication across network boundaries by self-replicating applications

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5732265A (en) * 1995-11-02 1998-03-24 Microsoft Corporation Storage optimizing encoder and method
TW360819B (en) * 1996-10-16 1999-06-11 Canon Kk File management system of image data
JP4075203B2 (ja) * 1999-04-09 2008-04-16 株式会社日立製作所 データバックアップシステム
US6477544B1 (en) 1999-07-16 2002-11-05 Microsoft Corporation Single instance store for file systems
JP4173673B2 (ja) * 2002-03-20 2008-10-29 株式会社日立製作所 ファイルバックアップ方法および記憶装置
US7693952B2 (en) * 2003-03-27 2010-04-06 Microsoft Corporation Availability and scalability in a messaging system in a manner transparent to the application
JP2007526543A (ja) * 2003-06-24 2007-09-13 インターウォーヴェン ジャーナリングおよび親マップ置換を含むWebサイト開発用システムおよび方法
US7203708B2 (en) 2003-11-06 2007-04-10 Microsoft Corporation Optimizing file replication using binary comparisons
US7546324B2 (en) * 2003-11-13 2009-06-09 Commvault Systems, Inc. Systems and methods for performing storage operations using network attached storage
US7536377B1 (en) * 2003-12-18 2009-05-19 Xilinx, Inc. Component naming
EP2216782A1 (en) * 2004-07-22 2010-08-11 Panasonic Corporation Playback apparatus and playback method
JP2006092268A (ja) * 2004-09-24 2006-04-06 Fuji Photo Film Co Ltd 画像ファイル記録システムおよびその制御方法
CN100426248C (zh) * 2005-06-03 2008-10-15 鸿富锦精密工业(深圳)有限公司 网络附加存储设备测试***及方法
WO2007086096A1 (ja) 2006-01-24 2007-08-02 Fujitsu Limited 情報処理方法、情報処理プログラム及び情報処理装置
US7461222B2 (en) * 2006-02-14 2008-12-02 Hitachi, Ltd. Method for mirroring data between clustered NAS systems
JP4806572B2 (ja) * 2006-02-15 2011-11-02 株式会社日立製作所 データミラーリングによって参照負荷を分散するストレージシステムにおけるアクセスの制御
JP5124989B2 (ja) * 2006-05-26 2013-01-23 日本電気株式会社 ストレージシステム及びデータ保護方法とプログラム
US20080016132A1 (en) * 2006-07-14 2008-01-17 Sun Microsystems, Inc. Improved data deletion
US20080065667A1 (en) * 2006-09-11 2008-03-13 Hopkins Donald F Transaction oriented resilient file system
WO2009008036A1 (ja) * 2007-07-06 2009-01-15 Fujitsu Limited ファイル管理システム,装置,プログラムおよび該プログラムを記録したコンピュータ読取可能な記録媒体
US8055864B2 (en) * 2007-08-06 2011-11-08 International Business Machines Corporation Efficient hierarchical storage management of a file system with snapshots
CN101232514A (zh) * 2008-01-24 2008-07-30 创新科存储技术(深圳)有限公司 网络附加存储节点的元数据同步方法及网络附加存储节点
JP2009230583A (ja) * 2008-03-24 2009-10-08 Hitachi Software Eng Co Ltd ファイル共有方法及びシステム、並びに、サーバ装置、クライアント装置、及びプログラム
JP5018611B2 (ja) * 2008-04-10 2012-09-05 パナソニック株式会社 ネットワーク制御機器、ネットワーク制御方法
TWI476610B (zh) * 2008-04-29 2015-03-11 Maxiscale Inc 同級間冗餘檔案伺服器系統及方法
JP2009282604A (ja) * 2008-05-20 2009-12-03 Nec Corp 重複データ排除システム、重複データ排除方法及び重複データ排除プログラム
US8386443B2 (en) 2008-10-06 2013-02-26 Dell Products L.P. Representing and storing an optimized file system using a system of symlinks, hardlinks and file archives
JP5180865B2 (ja) * 2009-02-10 2013-04-10 株式会社日立製作所 ファイルサーバ、ファイル管理システムおよびファイル管理方法
US8443153B1 (en) * 2010-01-06 2013-05-14 Netapp, Inc. Dynamic balancing of performance with block sharing in a storage system
US8396843B2 (en) * 2010-06-14 2013-03-12 Dell Products L.P. Active file instant cloning
US8600949B2 (en) * 2011-06-21 2013-12-03 Netapp, Inc. Deduplication in an extent-based architecture
US8805796B1 (en) * 2011-06-27 2014-08-12 Emc Corporation Deduplicating sets of data blocks
JP5594256B2 (ja) * 2011-08-17 2014-09-24 富士通株式会社 情報処理方法、情報処理プログラム及び情報処理装置

Also Published As

Publication number Publication date
US20130191350A1 (en) 2013-07-25
US8862558B2 (en) 2014-10-14
EP2791831A1 (en) 2014-10-22
US9684669B2 (en) 2017-06-20
JP2015503777A (ja) 2015-02-02
CN104081391A (zh) 2014-10-01
EP2791831B1 (en) 2020-03-11
US20140379672A1 (en) 2014-12-25
WO2013111187A1 (en) 2013-08-01
CN104081391B (zh) 2018-06-08

Similar Documents

Publication Publication Date Title
JP5856680B2 (ja) ファイルクローンを利用したシングルインスタンス化方法及びそれを用いたファイルストレージ装置
US20220335027A1 (en) Key-value store and file system integration
US10776315B2 (en) Efficient and flexible organization and management of file metadata
US10747718B2 (en) Mapping structure for maintaining metadata for snapshots in a virtualized storage environment
US8898119B2 (en) Fingerprints datastore and stale fingerprint removal in de-duplication environments
CN109725851B (zh) 智能快照分层
US8904120B1 (en) Segmented fingerprint datastore and scaling a fingerprint datastore in de-duplication environments
US9043287B2 (en) Deduplication in an extent-based architecture
US9817835B2 (en) Efficient data synchronization for storage containers
EP3532934A1 (en) Reducing stable data eviction with synthetic baseline snapshot and eviction state refresh
US20220131879A1 (en) Malicious activity detection and remediation in virtualized file servers
US11288128B2 (en) Indexing a relationship structure of a filesystem
Manogar et al. A study on data deduplication techniques for optimized storage
KR20150064593A (ko) 데이터 연관정보를 이용한 중복제거 방법 및 시스템
US20220318099A1 (en) File analytics systems and methods including retrieving metadata from file system snapshots
US20210342084A1 (en) Using a secondary storage system to implement a hierarchical storage management plan
US20240241798A1 (en) Multi-phase file recovery from cloud environments
US20220318204A1 (en) File analytics systems and methods
US10521159B2 (en) Non-disruptive automatic application regrouping
US20140344538A1 (en) Systems, methods, and computer program products for determining block characteristics in a computer data storage system
US11947497B2 (en) Partial in-line deduplication and partial post-processing deduplication of data chunks
US20240168923A1 (en) File analytics systems and methods
US20230222057A1 (en) Automatic movement of deduped data to archival tiers of cloud storage based on access patterns

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150825

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151006

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151211

R150 Certificate of patent or registration of utility model

Ref document number: 5856680

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees