(57)【要約】      （修正有）【課題】マウントを実施するホスト機器に依存しないで、ＧＰＴ規格のメディアのパーティションを高速かつ効率的にマウントする方法を提供する。【解決手段】先頭の論理ブロックアドレスのセクタにマスターブートレコードが記憶され、マスターブートレコードの後続のセクタからＧＰＴヘッダが記憶され、ＧＰＴヘッダの後続のセクタからエントリ配列が記憶され、エントリ配列の後続のセクタからパーティションが記憶されるという、ＧＰＴ規格でフォーマットされた記憶媒体のパーティションをマウントする方法であって、マスターブートレコードにアクセスして、マスターブートレコードから得られる情報によって記憶媒体がＧＰＴ規格でフォーマットされていると判断した場合に、予め定義したパーティションテーブル情報を用いて、エントリ配列を取得し、取得したエントリ配列から得られる情報を用いてパーティションのマウント処理を実施する。【選択図】図３
2015005009.tif 000002
【特許請求の範囲】
【請求項１】
先頭の論理ブロックアドレスのセクタにマスターブートレコードが記憶され、マスターブートレコードの後続のセクタからＧＰＴヘッダが記憶され、ＧＰＴヘッダの後続のセクタからエントリ配列が記憶され、エントリ配列の後続のセクタからパーティションが記憶されるという、ＧＰＴ規格でフォーマットされた記憶媒体のパーティションをマウントする方法であって、
前記マスターブートレコードにアクセスして、前記マスターブートレコードから得られる情報によって前記記憶媒体がＧＰＴ規格でフォーマットされていると判断した場合に、予め定義したパーティションテーブル情報を用いて、エントリ配列を取得する取得工程と、
前記取得工程でエントリ配列の取得に成功した場合に、取得したエントリ配列から得られる情報を用いてパーティションのマウント処理を実施するマウント工程と、
を有することを特徴とするパーティションのマウント方法。
【請求項２】
前記取得工程でエントリ配列の取得に失敗した場合に、前記ＧＰＴヘッダにアクセスして、前記ＧＰＴヘッダから得られるパーティションテーブル情報を用いてエントリ配列を再び取得する再取得工程、
をさらに有することを特徴とする請求項１に記載のパーティションのマウント方法。
【請求項３】
前記パーティションテーブル情報が、パーティションテーブルの開始位置、各パーティションエントリのサイズ、およびパーティションエントリの個数であることを特徴とする請求項１または２に記載のパーティションのマウント方法。
【請求項４】
前記マウント工程の後、書き込み処理が初めて行われるまでの間に、ＧＰＴヘッダの正当性の検証を実施する工程をさらに有することを特徴とする請求項１乃至３のいずれか一項に記載のパーティションのマウント方法。
【請求項５】
先頭の論理ブロックアドレスのセクタにマスターブートレコードが記憶され、マスターブートレコードの後続のセクタからＧＰＴヘッダが記憶され、ＧＰＴヘッダの後続のセクタからエントリ配列が記憶され、エントリ配列の後続のセクタからパーティションが記憶されるという、ＧＰＴ規格でフォーマットされた記憶媒体のパーティションをマウントする装置であって、
前記マスターブートレコードにアクセスして、前記マスターブートレコードから得られる情報によって前記記憶媒体がＧＰＴ規格でフォーマットされていると判断した場合に、予め定義したパーティションテーブル情報を用いて、エントリ配列を取得するエントリ取得手段と、
前記エントリ取得手段がエントリ配列の取得に成功した場合に、取得したエントリ配列から得られる情報を用いてパーティションのマウント処理を実施するマウント手段と、
を有することを特徴とするパーティションのマウント装置。
【請求項６】
先頭の論理ブロックアドレスのセクタにマスターブートレコードが記憶され、マスターブートレコードの後続のセクタからＧＰＴヘッダが記憶され、ＧＰＴヘッダの後続のセクタからエントリ配列が記憶され、エントリ配列の後続のセクタからパーティションが記憶されるという、ＧＰＴ規格でフォーマットされた記憶媒体のパーティションをマウントするコンピュータを、
前記マスターブートレコードにアクセスして、前記マスターブートレコードから得られる情報によって前記記憶媒体がＧＰＴ規格でフォーマットされていると判断した場合に、予め定義したパーティションテーブル情報を用いて、エントリ配列を取得するエントリ取得手段と、
前記エントリ取得手段がエントリ配列の取得に成功した場合に、取得したエントリ配列から得られる情報を用いてパーティションのマウント処理を実施するマウント手段、
として機能させることを特徴とするコンピュータが読み取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶媒体のパーティションのマウント方法、マウント装置、およびプログラムに関する。
【背景技術】
【０００２】
近年、記憶装置の容量の増大に伴い、組み込みシステムでも大容量の記憶装置を取り扱うための新しいパーティション規格への対応が要求されている。これら大容量の記憶装置を取り扱う規格としてＧＰＴ（GUID  Partition  Table）という規格が存在する。GUIDは、Globally  Unique  Identifierを意味する。
ＧＰＴ規格のメディア（記憶媒体）にアクセスする際に、ＣＲＣ３２の計算によりＧＰＴヘッダの正当性を確かめるため、Ｐｒｉｍａｒｙ、Ｂａｃｋｕｐ両方のＧＰＴヘッダおよびＧＰＴパーティションテーブル全体にアクセスした上でＣＲＣ３２の計算を行う。
【０００３】
メディアのパーティション規格がＭＢＲ（Master  Boot  Record）規格である場合は、必要となるＩ／ＯはＭＢＲ領域にアクセスする一回だけであるため比較的高速にマウント処理が完了する。これに対してパーティション規格がＧＰＴ規格である場合は、パーティション情報の取得時およびＣＲＣの計算時に多数のＩ／Ｏが発生し、かつＣＲＣ３２の計算にも演算コストがかかる。このため、パーティション規格がＧＰＴ規格の場合はＭＢＲ規格の場合と較べてマウント処理に時間がかかる。
【０００４】
このようなマウント処理にかかる時間への対策として、特許文献１においては、ＭＢＲ領域内のパーティションレコードに登録されない領域にファイルシステム起動用のファイルを配置することが開示されている。ＭＢＲ領域内のパーティションレコードに登録されない領域にファイルシステム起動用のファイルを配置し、ファイルシステム起動時は予めそのファイルをメモリにロードして独自のファイルシステムにより各パーティションのマウントを実行している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−２６５９７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、この方法が有効なのは記憶装置のパーティションが特殊な状態にフォーマットされている場合に限られ、かつホスト機器でもその特殊なファイルシステムに対応している必要がある。すなわち、特許文献１の技術を用いると、ＧＰＴ規格から外れてしまうため、ＧＰＴ規格に沿ってフォーマットすることによる互換性が低下してしまう。
そこで、本発明はこれらの問題を鑑みて、規格通りにフォーマットされたＧＰＴパーティションを高速かつ効率的にマウントする方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本発明に係るマウント方法は、
先頭の論理ブロックアドレスのセクタにマスターブートレコードが記憶され、マスターブートレコードの後続のセクタからＧＰＴヘッダが記憶され、ＧＰＴヘッダの後続のセクタからエントリ配列が記憶され、エントリ配列の後続のセクタからパーティションが記憶されるという、ＧＰＴ規格でフォーマットされた記憶媒体のパーティションをマウントする方法であって、
前記マスターブートレコードにアクセスして、前記マスターブートレコードから得られる情報によって前記記憶媒体がＧＰＴ規格でフォーマットされていると判断した場合に、予め定義したパーティションテーブル情報を用いて、エントリ配列を取得する取得工程と、
前記取得工程でエントリ配列の取得に成功した場合に、取得したエントリ配列から得られる情報を用いてパーティションのマウント処理を実施するマウント工程と、
を有することを特徴とする。
【発明の効果】
【０００８】
本発明に係るマウント方法によれば、ＧＰＴ規格のメディアのパーティションのマウントを、より高速かつ効率的に実行することができる。
【図面の簡単な説明】
【０００９】
【図１】組み込みコンピュータのハードウェア構成の概略を示すブロック図である。
【図２】オペレーティングシステムの機能構成を示す概念図である。
【図３】マウント方法の処理の流れを示すフローチャートである。
【図４】ＭＢＲ規格のメディアの概念図である。
【図５】ＧＰＴ規格のメディアの概念図である。
【図６】ＧＰＴ規格のメディアにおけるＭＢＲ領域の概念図である。
【発明を実施するための形態】
【００１０】
＜実施形態１＞
まず、ＧＰＴ規格とＭＢＲ規格について説明を補足する。
ＧＰＴ規格はＭＢＲ（Master  Boot  Record）規格の置き換えを意図する新しいパーティション規格である。ＭＢＲ規格がパーティションの位置を３２ビットの開始セクタ番号とセクタ数で表現するのに対し、ＧＰＴ規格では６４ビットの開始セクタ番号と終了セクタ番号で表現する。これにより、１セクタを５１２バイトで換算した場合、扱える記憶装置の容量が従来の２ＴＢから８ＺＢまで増量することとなった。また、ＧＰＴ規格ではパーティション情報の拡張性、ＣＲＣ３２によるパーティション破壊のチェック機能、バックアップによるパーティション破壊時の復旧機能などが加わったのも大きな特徴である。
【００１１】
図４は、ＭＢＲ規格のメディア（記憶媒体）の概念図である。同図に示すように、ＭＢＲ規格のメディアは０番セクタにＭＢＲ領域が存在し、ＭＢＲ領域内の４４６バイトオフセットからパーティションレコードがはじまる。パーティションレコードは１エントリが１６バイトの全４本のエントリから構成される。そして、先頭から５バイト目にパーティションの種類が、末尾８バイトの内、前方４バイトにパーティションの開始セクタ番号が、後方４バイトにパーティションの全セクタ数が格納されている。
表１にマスターブートレコードの構造を示し、表２に各パーティションテーブルの構造を示す。CHSは、シリンダ数、ヘッド数、セクタ数を意味する。LBAは、論理ブロックアドレス（Logical  Block  Addressing）を意味する。
【００１２】
【表１】
2015005009.tif 000003
【００１３】
【表２】
2015005009.tif 000004
【００１４】
図５は、ＧＰＴ規格のメディアの概念図である。同図に示すように、ＧＰＴ規格のメディアは０番セクタ（ＬＢＡ０）にＭＢＲ領域、１番セクタ（ＬＢＡ１）にＰｒｉｍａｒｙＧＰＴヘッダ、最終セクタにＢａｃｋｕｐＧＰＴヘッダが配置される構成となっている。ＰｒｉｍａｒｙＧＰＴヘッダとＢａｃｋｕｐＧＰＴヘッダの内容はパーティション構造が壊れていない限りＣＲＣ３２の値やＰｒｉｍａｒｙ、Ｂａｃｋｕｐに依存する値など一部を除き同一である。
ＧＰＴヘッダにはパーティションエントリ配列の開始セクタ番号やパーティションエントリのサイズ、パーティションエントリの個数が格納されている。ＭＢＲ規格とは異なり、ＧＰＴ規格では、パーティションエントリのサイズおよびパーティションエントリの個数は、メディアごとに可変となっている。
パーティションエントリ配列を構成する各パーティションエントリ（以下、単に「エントリ」とも記載する）には、各パーティションの開始セクタ番号やパーティション名などが格納されている。
表３にＧＰＴ規格のメディアにおけるＭＢＲ、ヘッダ、エントリ、パーティションの関係を示し、表４にＧＰＴ規格のメディアにおけるヘッダの構造を示し、表５にＧＰＴ規格のメディアにおけるエントリの構造を示す。
表３に示すように、先頭の論理ブロックアドレス（ＬＢＡ）のセクタにマスターブートレコード（ＭＢＲ）が記憶され、ＭＢＲの後続のセクタからＧＰＴヘッダが記憶される。そして、ＧＰＴヘッダの後続のセクタからエントリ配列が記憶され、エントリ配列の後続のセクタからパーティションが記憶される。
【００１５】
【表３】
2015005009.tif 000005
【００１６】
【表４】
2015005009.tif 000006
【００１７】
【表５】
2015005009.tif 000007
【００１８】
メディアがＧＰＴ規格であることはＭＢＲ領域内の第一パーティションのパーティションタイプ、開始セクタ番号、全セクタ数に基づいて判別することができる。
メディアがＧＰＴ規格である場合、図６に示すように、第一パーティションのパーティションタイプはＧＰＴ規格であることを表す値である“０ｘＥＥ”となっている。また、開始セクタ番号は１番セクタとなっている。セクタ数は記憶装置の全セクタ数−１（ＭＢＲの領域分）となっている。ただし、記憶装置の全セクタ数が０ｘ１００００００００よりも大きい場合は０ｘＦＦＦＦＦＦＦＦと記載される。
ＭＢＲ領域内の第一パーティションの内容が上記内容となっている場合、ホスト機器はＭＢＲ領域のパーティションレコードを無視してＧＰＴパーティションテーブルを参照することとなる。
【００１９】
従来のＭＢＲ規格のメディアにおいてはパーティションのマウントを行う場合、ＭＢＲ領域を読み込み、そのパーティションレコードの中から有効なパーティションのエントリを探索することによりマウントに必要な情報を得ることが出来た。
【００２０】
一方、ＧＰＴ規格のメディアにおいては、まずＭＢＲ領域を読み込んで、メディアがＧＰＴ規格であることを確認した後に、１番セクタのＧＰＴヘッダを読み込む。
１番セクタのＧＰＴヘッダを読み込んで、ＧＰＴパーティションテーブル（パーティションエントリ配列）を解析するために必要な情報を取得する。具体的には、ＧＰＴパーティションテーブル（パーティションエントリ配列）の開始位置、各パーティションエントリのサイズ、パーティションエントリの個数などの情報を取得する。
このようにして取得したＧＰＴパーティションテーブルの情報を用いてＧＰＴパーティションテーブルを読み込み、有効なＧＰＴパーティションのマウントに必要な情報（パーティションタイプ、パーティション開始ＬＢＡなど）を得ることができる。
【００２１】
＜実施形態１＞
次に、本発明の一実施形態である実施形態１を説明する。
本実施形態におけるファイルシステムの構成を、図１および図２を参照して説明する。
図１は本実施形態のハードウェア構成の概略であり、組み込みコンピュータ１０１は、バス１０２、ＣＰＵ１０３、ＲＯＭ１０４、ＲＡＭ１０５、記憶装置１０６を有している。ここで、記憶装置１０６は組み込みコンピュータ１０１に対して着脱可能であってもよい。
【００２２】
図２は本実施形態の機能構成を示し、アプリケーションプログラム２０１、オペレーティングシステム２０２、ファイルシステム２０３、デバイスドライバ２０４、記憶装置２０５から構成される。
組み込みコンピュータ１０１においてＣＰＵ１０３は、バス１０２によって相互に接続されたＲＯＭ１０４、ＲＡＭ１０５、記憶装置１０６の制御を行う。ＣＰＵ１０３はＲＯＭ１０４に格納されたアプリケーションプログラム、ファイルシステムプログラムを実行することにより、記憶装置１０６に記録されたパーティションの操作を行う。その際、ＲＡＭ１０５は作業領域として利用される。すなわち、ＣＰＵ１０３はファイルシステムプログラムを実行することで、後述するフローチャートの処理を実行するファイルシステムの機能を実現する。
【００２３】
アプリケーションプログラム２０１は、記憶装置２０５に対してアクセスを行う際、オペレーティングシステム２０２を通して行う。オペレーティングシステム２０２を通してファイルシステム２０３のパーティション読み込みＡＰＩ（Application  Programming  Interface）を呼び出す。そして、デバイスドライバ２０４を通してマウント処理を実行する。本実施例はマウントするパーティションの番号を１番に指定したＡＰＩの呼び出しによるマウントの例とし、その処理の詳細を図３のフローチャートを用いて説明する。
【００２４】
ステップＳ３０１において、ファイルシステム２０３は、アプリケーションプログラム２０１から呼び出されたパーティション読み込みＡＰＩに応じて記憶装置２０５に対するアクセスを行う。その際、まずは記憶装置のパーティションがＭＢＲ規格かＧＰＴ規格か判断するために０番セクタのＭＢＲ領域にアクセスする。この時、ＧＰＴ規格だった場合はステップＳ３０２（エントリ取得工程）へ、記憶装置のパーティションがＭＢＲ規格だった場合はステップＳ３０３へ進む。
【００２５】
ステップＳ３０２において、ファイルシステム２０３は、記憶装置２０５に記憶されているＧＰＴヘッダにアクセスすることなく、ファイルシステム内において予め定義されている値を用いてパーティションエントリの取得を試みる（エントリ取得工程）。ファイルシステム内において予め定義されている値とは、例えば、ＧＰＴパーティションテーブルの開始位置は２番セクタであり、パーティションエントリの個数は１２８個であり、パーティションエントリのサイズは１２８バイトである。これらの値はＯＳ（Operating  System）としてＷｉｎｄｏｗｓ（登録商標）を使用してＧＰＴ規格に沿って記憶装置をフォーマットした際のデフォルトの値であり、予めファイルシステムに記憶されているものとする。
その後ステップＳ３０４へ進み、指定されたエントリの取得に成功した場合はステップＳ３０５へ進み、失敗した場合（ｎｏ−Ａ）はステップＳ３０７へ進む。
【００２６】
ステップＳ３０３において、ファイルシステム２０３はＭＢＲ領域のパーティションレコードへアクセスする。
その後ステップＳ３０４へ進み、指定されたエントリの取得に成功した場合はステップＳ３０５へ進み、失敗した場合（ｎｏ−Ｂ）はエラーとなる。
【００２７】
ステップＳ３０５においてファイルシステム２０３は、ＭＢＲ規格又はＧＰＴ規格のいずれかのパーティション情報に基づいてマウント処理を実施する。ファイルシステム２０３はマウントを試みる。
その後ステップＳ３０６へ進み、マウントに成功した場合はステップＳ３０８へ進み、失敗した場合は失敗の内容に応じてステップＳ３０７へ進む又はエラーとなる。
ステップＳ３０１でＧＰＴ規格であると判断された場合（Ｓ３０１でｙｅｓ）であって、初めてのマウント処理に失敗した場合（ｎｏ−Ｃ）はステップＳ３０７へ進む。
ステップＳ３０１でＧＰＴ規格であると判断された場合であって、２回目のマウント処理に失敗した場合又はステップＳ３０１でＧＰＴ規格ではないと判断された場合（Ｓ３０１でｎｏ）であって、マウント処理に失敗した場合（ｎｏ−Ｄ）はエラーとなる。
ファイルシステム２０３は取得したパーティション情報が正しくない場合（その場所にパーティションが存在しない等）や、対応していないファイルシステムフォーマットだった場合にマウント処理に失敗する。
【００２８】
ステップＳ３０７において、ファイルシステム２０３は、ＧＰＴパーティションテーブルの開始位置、パーティションエントリの個数、パーティションエントリのサイズを、ＧＰＴヘッダにアクセスすることで取得する。そして、取得したＧＰＴパーティションテーブルの開始位置などの情報を用いてＧＰＴパーティションテーブル（パーティションエントリ配列）にアクセスする（エントリ再取得工程）。
その後ステップＳ３０４へ進み、指定されたエントリの取得に成功した場合はステップＳ３０５へ、失敗した場合はエラーとなる。
【００２９】
ステップＳ３０８においてファイルシステム２０３は、ステップＳ３０５においてＧＰＴヘッダの正当性を検証する必要があるかを判断する。正当性を検証する必要がある場合、つまりマウントしたパーティションがＧＰＴ規格のパーティションだった場合、ステップＳ３０９へ進み、一方、マウントしたパーティションがＭＢＲ規格のパーティションだった場合はマウント処理を完了する。
ただし、マウントしたパーティションがＧＰＴ規格のパーティションであっても、内臓記憶装置などのパーティションであって、既にマウントしたことがあり、その際にエラーがなくＧＰＴヘッダの正当性が保証されている場合はマウント処理を完了しても良い。
【００３０】
ステップＳ３０９においてファイルシステム２０３はＧＰＴヘッダの正当性の確認を実施する。ＧＰＴヘッダの正当性の確認とは、ＧＰＴヘッダに記載の値が正しいか、ＰｒｉｍａｒｙとＢａｃｋｕｐに関係性のある値が適切か、ＧＰＴパーティションテーブル全体とＧＰＴヘッダ自身に対して実行されるＣＲＣ３２の計算結果が正しいかどうかで判断される。ＧＰＴヘッダの正当性の確認は、マウント処理成功後のシステムがビジーでない間に行われ、最初の書き込みが発生する前に終わらなければならない。
その後ステップＳ３１０へ進み、ＧＰＴヘッダの正当性が確認された場合はマウント処理を完了し、正当性が確認されなかった場合はエラーとなる。ステップＳ３１０で正当性が確認されなかった場合は、メディアの読み込みのみを許可し、書き込みを禁止するなどとしても良い。
以上のように、本実施形態によればＧＰＴ規格のメディアであって、かつ実際のパーティションテーブルの開始位置などが予め定義された値と同じ値である場合にパーティションのマウントを、より高速かつ効率的に実行することができる。
【００３１】
＜その他の実施形態＞
前述した実施形態はＧＰＴパーティションエントリの情報をＧＰＴパーティションエントリの開始セクタ番号を２番セクタ、パーティションエントリサイズを１２８バイト、パーティションエントリの個数を１２８個とした。この数値はＯＳとしてＷｉｎｄｏｗｓ（登録商標）を使用してフォーマットした場合のデフォルトの値である。
しかし、本発明ではＧＰＴパーティションテーブルの情報は上記の値に限定されない。例えば、記憶装置のフォーマットもホスト機器自身が行う場合、ＧＰＴパーティションエントリの各情報はホスト機器が既定の値を具備しておく必要がある。その場合は、自身がフォーマットした記憶装置のＧＰＴパーティションテーブルにアクセスする際も、その既定のＧＰＴパーティションテーブルの情報を用いてアクセスすることになる。
また、前述した実施形態は「ＧＰＴパーティションテーブル情報の事前定義」と「ＧＰＴヘッダ検証実行の繰り下げ」の機能を実施しているが、どちらか一方の機能だけを実現するようにしてよい。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）が読み取り可能なプログラムを読み出して実行する処理である。
【符号の説明】
【００３２】
１０１  組み込みコンピュータシステム
１０２  バス
１０３  ＣＰＵ
１０４  ＲＯＭ
１０５  ＲＡＭ
１０６  記憶装置
２０１  アプリケーションプログラム
２０２  オペレーティングシステム
２０３  ファイルシステム
２０４  デバイスドライバ
２０５  記憶装置
【図１】
2015005009.tif 000008
【図２】
2015005009.tif 000009
【図３】
2015005009.tif 000010
【図４】
2015005009.tif 000011
【図５】
2015005009.tif 000012
【図６】
2015005009.tif 000013