以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理システムを示す図である。第1の実施の形態の情報処理システムは、情報処理装置1,2を含む。情報処理装置1,2はLAN(Local Area Network)などのネットワークに接続されている。この情報処理システムでは、情報処理装置1(第1の装置)から情報処理装置2(第2の装置)へソフトウェアの移行を行う。移行前の段階では、情報処理装置1は移行対象のソフトウェアを動作させるためのデータを記憶している。情報処理装置2はそのデータを記憶していない。
情報処理装置1は、メモリ1a、記憶装置1bおよびプロセッサ1cを有する。情報処理装置2は、メモリ2a、記憶装置2bおよびプロセッサ2cを有する。メモリ1a,2aは、例えば、RAM(Random Access Memory)などの揮発性の記憶装置である。記憶装置1b,2bは、例えば、HDD(Hard Disk Drive)などの不揮発性の記憶装置である。
プロセッサ1c,2cは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)でもよいし、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路でもよい。また、プロセッサ1c,2cは、複数のプロセッサの集合(マルチプロセッサ)でもよい。プロセッサ1c,2cは、例えば、RAMなどの揮発性の記憶装置に記憶されたプログラムを実行する。
記憶装置1bは、移行対象のソフトウェアを動作させるためのデータ3を記憶する。移行対象のソフトウェアは、情報処理装置1で動作するオペレーティングシステム(OS:Operating System)でもよいし、情報処理装置1のOS上で動作する所定のアプリケーションでもよい。データ3は、ソフトウェアの実行可能コードや動作用のパラメータ情報などの集合である。例えば、情報処理装置2にもデータ3を格納すれば、情報処理装置2でも、情報処理装置1と同じ設定でソフトウェアを利用できる。
プロセッサ1cは、記憶装置1bにデータ3を保持しながら、データ3をエンコードしたデータ(エンコード後データ3aという)を情報処理装置2に送信する。例えば、プロセッサ1cは記憶装置1bからデータ3の複数の部分を、部分毎に順番にメモリ1aに読み出す。プロセッサ1cは、部分毎にエンコードして情報処理装置2に送信する。
ここで、エンコード(符号化)は、所定の手順でデータ3を変換する処理であるといえる。例えば、エンコードは暗号化でもよいし、ビット反転などでもよい。なお、ここでのエンコードは可逆変換である。情報処理装置2による後述のデコードによりエンコード前のデータ3を復元できなければ、情報処理装置2によりソフトウェアを適切に動作させることができないからである。
プロセッサ2cは、エンコード後データ3aを受信し、記憶装置2bに格納する。例えば、プロセッサ2cは、データ3の部分毎のエンコード結果を情報処理装置1から順次受信し、それらを結合してエンコード後データ3aを得ることができる。その結果、情報処理装置1にデータ3が保持され、情報処理装置2にエンコード後データ3aが保持された状態となる。その後、プロセッサ1cは、プロセッサ2cによりエンコード後データ3aのデコードが開始される前に、データ3のエンコードを開始する。また、プロセッサ2cは、プロセッサ1cによりデータ3のエンコードが開始された後に、エンコード後データ3aのデコードを開始する。
プロセッサ1cは、情報処理装置2によるエンコード後データ3aのデコードが完了される前に、記憶装置1bに格納されたデータ3をエンコード後のデータ3b(エンコード後データ3bという)に置き換える。例えば、プロセッサ1cは、記憶装置1bからデータ3の複数の部分を順番にメモリ1aに読み出し、部分毎にエンコードする。プロセッサ1cは、そのエンコード結果を当該部分に対応する記憶装置1bの記憶領域に上書きする。プロセッサ1cは、これを繰り返すことで、記憶装置1bのデータ3をエンコード後データ3bに置き換えることができる。
なお、データ3をエンコード後データ3bに置き換えるときのエンコード方法は、エンコード後データ3aを生成したときと同じ方法でもよいし異なる方法でもよい。例えば、可逆変換でもよいし不可逆変換でもよい。ただし、情報処理装置2でのデコード途中における障害(例えば、記憶装置2bの故障)に対する復旧を考えると可逆変換が好ましい。エンコード後データ3bを逆変換することで、データ3を復元できるからである。
また、情報処理装置2によるデコード(復号)は、所定の手順でエンコード後データ3aを逆変換する処理であるといえる。例えば、エンコード時に暗号化が行われていれば、デコードでは暗号を復号することになる。エンコード時にビット反転が行われていれば、デコードでもビット反転を行うことになる。デコードの結果、情報処理装置2はデータ3を得る。
ここで、プロセッサ1cが記憶装置1bのデータ3をエンコード後データ3bに置き換える処理は、情報処理装置2の立場から表すこともできる。すなわち、プロセッサ1cは、情報処理装置1に格納されているデータ3のエンコード後データ3bへの置き換えが完了された後に、エンコード後データ3aのデコードを完了する。
プロセッサ1cによるデータ3のエンコードと、プロセッサ2cによるエンコード後データ3aのデコードとは並行して行われることになる。プロセッサ1c,2cは、互いに通信して、情報処理装置1でのエンコードが、情報処理装置2でのデコードよりも先に完了するように、互いの変換処理の進行を制御する。例えば、プロセッサ1c,2cは、エンコード後データ3aのデコードが行われている間(記憶装置2bにデコード中のデータ3cが格納されている間)に、記憶装置1b内のデータ3がエンコード後データ3bに置き換えられるように制御する。
情報処理装置1によれば、データ3が保持されながら、データ3をエンコードしたエンコード後データ3aが情報処理装置2に送信される。情報処理装置2によるエンコード後データ3aのデコードが開始される前に情報処理装置1により保持されるデータ3のエンコードが開始され、情報処理装置2による当該デコードが完了される前に、情報処理装置1により保持されるデータ3がエンコード後データ3bに置き換えられる。
これにより、移行元および移行先の両装置で移行対象のソフトウェアが並列に動作すること(移行対象のソフトウェアの両装置による並列動作)を抑制できる。具体的には、次の通りである。エンコード後データ3a,3bは、データ3とは異なる情報であり、エンコード後データ3a,3bからはソフトウェアを動作させることはできない。このため、情報処理装置1でデータ3を、情報処理装置2でエンコード後データ3aを、それぞれ同時に保持したとしても、移行対象のソフトウェアが情報処理装置2で動作することはない。また、情報処理装置2でエンコード後データ3aのデコードが完了しているときには、情報処理装置1ではエンコード後データ3bが保持されていることになる。このため、デコードが完了して情報処理装置2がデータ3を保持しても、情報処理装置1で移行対象のソフトウェアが動作することはない。よって、移行対象のソフトウェアが情報処理装置1,2で並列に動作することを抑制できる。
ここで、例えば、データ3に状態情報を設定可能とし、情報処理装置1でデータ3の状態情報を使用不可状態に設定してから情報処理装置2へデータ3のコピーを送信することも考えられる。しかし、この場合、データ3自体は両方の装置上に存在することになる。このため、状態情報が無視されたり(例えば、状態情報のチェックを行う機能が適切に動作しないなど)、状態情報の設定が不測の処理により改変されたりするだけで、移行対象のソフトウェアが情報処理装置1,2で並列に動作し得る。また、ユーザによる運用上のミスによって、移行対象のソフトウェアが情報処理装置1,2で並列に動作してしまうおそれもある。データ3が両方の装置上に存在する限り、これらのリスクは残る。
一方、第1の実施の形態によれば、情報処理装置1,2によりデータ3を同時に保持させないので、上記のような不測の事態においても、移行対象のソフトウェアが情報処理装置1,2で並列に動作することを抑制できる。よって、状態情報を用いる方法よりも安全にソフトウェアの移行を行える。
また、データ3のうち送信済の部分を情報処理装置1から削除しながら、情報処理装置2にデータ3を送信することも考えられる。しかし、この場合、送信中に通信障害が発生すると、情報処理装置1,2の何れにも元のデータ3が存在しないことになる。このため、移行途中であったソフトウェアの復旧が困難になり得る。
これに対し、情報処理装置1は、データ3を保持しながらエンコード後データ3aを情報処理装置2に送信する。このため、仮にエンコード後データ3aの送信中に通信障害が発生しても、情報処理装置1上にデータ3が残る。このデータ3を用いて、情報処理装置1上でソフトウェアを動作させたり、データ3の移動を再度行ったりすることができる。よって、第1の実施の形態の方法は、データ3を削除しながら移行先の装置に送信する方法よりも安全である。
なお、ソフトウェアの複製がライセンス違反になることもある。例えば、移行対象のソフトウェアについて装置1台につき1ライセンスという契約であれば、情報処理装置1,2上でそのソフトウェアが同時に利用可能になると、ライセンス違反になる。一方、第1の実施の形態の方法では、情報処理装置1,2上に同時にソフトウェアの複製を存在させない。このため、ライセンスにより複製が制限されているソフトウェアを移行する場合に、ライセンス違反となるリスクを低減できるという利点もある。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、サーバ100,200を含む。サーバ100,200は、ネットワーク10に接続されている。ネットワーク10は例えばLANなどのネットワークである。
サーバ100は、所定のアプリケーションにより実現されるサービスをクライアントコンピュータ(図示を省略)に提供するサーバコンピュータである。サーバ100には、提供するサービスに応じたアプリケーションが予めインストールされる。
インストールとは、サーバ100でソフトウェアを利用可能にする際に、ソフトウェアを動作させるためのデータをサーバ100が備える所定の記憶装置に格納することを示す。ここで、後述するように、サーバ100は揮発性/不揮発性の両方の記憶装置を備える。以下の説明では、単にインストールという場合、あるソフトウェアを動作させるためのデータを不揮発性の記憶装置に格納することを指すものとする。あるソフトウェアを動作させるためのデータをRAMなどの揮発性の記憶装置にのみ格納する場合はその旨を明示する。また、ソフトウェアを動作させるためのデータは、ソフトウェアの実行可能コードや動作用のパラメータ情報などの集合である。
サーバ100上のアプリケーションの実行は、サーバ100上のOSによって制御される。すなわち、サーバ100にはOSもインストールされている。例えば、サーバ100のOSは、サーバ100上のアプリケーションに対して、サーバ100が備えるプロセッサやRAMなどのリソースの割り当てを制御する。
例えば、サーバ100は、Web3階層システムの何れかの階層の機能を実現するものでもよい。具体的には、サーバ100は、Webサーバ、アプリケーションサーバおよびDB(DataBase)サーバの何れかでもよい。例えば、Webサーバとして機能させるなら、Webサーバ機能を実現するアプリケーションがサーバ100にインストールされる。アプリケーションサーバとして機能させるなら所定の業務ロジックを実現するアプリケーションがサーバ100にインストールされる。DBサーバとして機能させるなら、DB機能を実現するアプリケーションがサーバ100にインストールされる。また、サーバ100は、ファイルサーバやメールサーバなど他のサービスを提供するものでもよい。
なお、サーバ100は、スタンドアロンで(他のコンピュータと連携せずに)所定のサービスをユーザに提供するコンピュータでもよい。例えば、ユーザは、サーバ100を直接操作して、サーバ100にインストールされた所定のアプリケーションを利用してもよい。具体的には、文書作成用のアプリケーション、表計算用のアプリケーション、データ管理用のアプリケーションおよび作図用のアプリケーションなどをサーバ100にインストールし、これらのアプリケーションをユーザにより利用可能とすることが考えられる。
サーバ200は、サーバ100で動作するソフトウェアの移行先となるサーバコンピュータである。例えば、サーバ100をサーバ200に入れ替える場合に、サーバ100上のソフトウェアがサーバ200へ移行される。このとき、サーバ100のソフトウェアの利用環境をサーバ200でも引き継ぎたいことがある。その場合、サーバ100にインストールされた各ソフトウェアについて、一連の移行作業(例えば、サーバ200へのインストール作業や動作用の設定作業など)をユーザが行うとすると、ユーザにとって手間である。
そこで、サーバ100,200は、ソフトウェアの移行を支援する機能を提供する。移行対象のソフトウェアは、サーバ100にインストールされたOSやアプリケーションを含む。以下の説明では、サーバ100を“移行元”、サーバ200を“移行先”と表記することで、両者を区別することがある。ここで、サーバ100は第1の実施の形態の情報処理装置1(第1の装置)の一例である。サーバ200は第1の実施の形態の情報処理装置2(第2の装置)の一例である。
図3は、サーバのハードウェア例を示す図である。サーバ100は、プロセッサ101、RAM102、HDD103、通信部104、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を有する。各ユニットがサーバ100のバスに接続されている。サーバ200もサーバ100と同様のユニットを用いて実現できる。
プロセッサ101は、サーバ100の情報処理を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、サーバ100の主記憶装置である。RAM102は、揮発性の記憶装置である。RAM102は、プロセッサ101に実行させるOSのプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101の処理に用いられる各種データを記憶する。
HDD103は、サーバ100の補助記憶装置である。HDD103は、不揮発性の記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、サーバ100にインストールされたOSのプログラム、アプリケーションのプログラム、および各種データが格納される。サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
通信部104は、ネットワーク10を介してサーバ200を含む他のコンピュータと通信を行えるインタフェースである。通信部104は、有線インタフェースでもよいし、無線インタフェースでもよい。通信部104は、例えば、プロセッサ101からの命令に従って、ネットワーク10を介して接続された他のコンピュータからプログラムをダウンロードしてRAM102またはHDD103に格納することもできる。
画像信号処理部105は、プロセッサ101からの命令に従って、サーバ100に接続されたディスプレイ11に画像を出力する。
入力信号処理部106は、サーバ100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。
ディスクドライブ107は、レーザ光などを利用して、光ディスク13に記録されたプログラムやデータを読み取る駆動装置である。ディスクドライブ107は、例えば、プロセッサ101からの命令に従って、光ディスク13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
機器接続部108は、サーバ100に周辺機器を接続するためのインタフェースである。機器接続部108は、例えば、プロセッサ101からの命令に従って、外部記憶装置14、または、リーダライタ装置15などを介してメモリカード16から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
図4は、サーバの機能例を示す図である。サーバ100は、バッファ110、データ記憶部120および移行元処理部130を有する。バッファ110はRAM102に確保した記憶領域として実現できる。データ記憶部120はHDD103に確保した記憶領域として実現できる。移行元処理部130は、プロセッサ101により実行されるプログラムのモジュールとして実現できる。
バッファ110は、移行元処理部130の作業用の記憶領域である。バッファ110は、移行元処理部130によりデータ記憶部120から読み出されたデータを記憶する。
データ記憶部120は、ソフトウェアを動作させるためのデータを記憶する。当該データは、前述のようにソフトウェアの実行可能コードや動作用のパラメータ情報などを含む。データ記憶部120は、OS管理外領域121およびOS管理領域122を含む。
OS管理外領域121は、サーバ100にインストールされたOSの管理対象外の領域である。すなわち、当該OSは、OS管理外領域121に格納された情報を操作することができない。OS管理外領域121は、移行元処理部130による処理の進捗管理用の情報(進捗情報)を記憶する。
OS管理領域122は、サーバ100にインストールされたOSにより管理される領域である。当該OSは、OS管理領域122に格納された情報を操作できる。OS管理領域122は、サーバ100にインストールされたOSやアプリケーションのデータを記憶する。また、OS管理領域122は、当該OSやアプリケーションを用いて作成されたユーザデータなども記憶する。OS管理領域122に格納されたデータは、サーバ100からサーバ200へOSやアプリケーションを移行させる際の主な移動対象である。
移行元処理部130は、サーバ200と連携して、サーバ100からサーバ200へのソフトウェアの移行を制御する。移行元処理部130は、管理部131、暗号化部132およびハッシュ処理部133を有する。
管理部131は、ソフトウェアの移行処理の全体を管理する。ソフトウェアの移行処理では、次の2段階の処理を行う。第1段階は、OS管理領域122に格納されたデータをOS管理領域122に保持しながら、そのデータを暗号化してサーバ200に送信する処理である。第2段階は、OS管理領域122のデータを暗号化し、サーバ200で暗号化後のデータを復号する処理である。
管理部131は、第1段階ではサーバ100からサーバ200に対して暗号化されたデータを送信し、その進捗を管理する。管理部131は、第2段階ではOS管理領域122の暗号化を暗号化部132に実行させ、その進捗を管理する。管理部131は、各段階における処理の進捗情報をOS管理外領域121に格納する。管理部131は、障害によりソフトウェアの移行が中断されると、OS管理外領域121に格納された情報に基づいて、ソフトウェアの移行を再開する。
暗号化部132は、OS管理領域122に格納されたデータの暗号化を行う。後述するように、データ記憶部120の記憶領域はブロックと呼ばれる固定長の単位で管理される。暗号化部132は、OS管理領域122のデータをブロック単位に順次読み出し、ブロック単位に読み出されたデータを暗号化する。以下の説明では、ブロック単位のデータをブロックデータということがある。この場合、ブロックデータは、OS管理領域122に記憶されたデータの一部分である。暗号化部132による暗号化の前後で、暗号化対象のブロックデータのサイズは変わらないものとする。
ハッシュ処理部133は、暗号化部132によって暗号化されたブロックデータのハッシュ値を計算し、OS管理外領域121に記録する。ハッシュ処理部133がハッシュ化に用いる手順(ハッシュ関数など)は、ハッシュ処理部133に予め与えられる。
サーバ200は、バッファ210、データ記憶部220および移行先処理部230を有する。バッファ210は、サーバ200が備えるRAMに確保した記憶領域として実現できる。データ記憶部220は、サーバ200が備えるHDDに確保した記憶領域として実現できる。移行先処理部230は、サーバ200が備えるプロセッサにより実行されるプログラムのモジュールとして実現できる。
バッファ210は、移行先処理部230の作業用の記憶領域である。バッファ210は、移行先処理部230によりデータ記憶部220から読み出されたデータを記憶する。
データ記憶部220は、サーバ100から取得されたデータを記憶する。データ記憶部220は、OS管理外領域221およびOS管理領域222を有する。
OS管理外領域221は、サーバ200にインストールされるOSの管理対象外の領域である。すなわち、当該OSは、OS管理外領域221に格納された情報を操作することができない。OS管理外領域221は、移行先処理部230による処理の進捗情報を記憶する。
OS管理領域222は、OS管理領域122に格納されたデータの移動先の記憶領域である。前述の第1段階では、OS管理領域122上のデータを暗号化したデータが、OS管理領域222に格納される。暗号化したデータが復号されてOS管理領域222上に格納されると、サーバ100にインストールされていたOSおよびアプリケーションと同等のOSおよびアプリケーションが、サーバ200上で利用可能になる。その際に、OS管理領域222内の情報は、当該OSによって操作可能になる(そのため、この領域を「OS管理領域」と称している)。
移行先処理部230は、サーバ100と連携して、サーバ100からサーバ200へのソフトウェアの移行を制御する。移行先処理部230は、管理部231、復号部232およびハッシュ処理部233を有する。
管理部231は、管理部131と連携してソフトウェアの移行処理の全体を管理する。管理部231は、前述の第1段階ではサーバ100から暗号化されたデータを受信し、その進捗を管理する。管理部231は、前述の第2段階ではOS管理領域222のデータの復号を復号部232に実行させ、その進捗を管理する。管理部231は、各段階における処理の進捗情報をOS管理外領域221に格納する。管理部231は、障害によりソフトウェアの移行が中断されると、OS管理外領域221に格納された情報に基づいて、ソフトウェアの移行を再開する。
復号部232は、OS管理領域222に格納されたデータの復号を行う。復号部232は、OS管理領域222のブロックデータを順次読み出し、復号する。復号部232による復号の前後で、復号対象のブロックデータのサイズは変わらない。
ハッシュ処理部233は、復号部232によって復号されたブロックデータのハッシュ値を計算し、OS管理外領域221に記録する。ハッシュ処理部233がハッシュ化に用いる手順(ハッシュ関数など)は、ハッシュ処理部233に予め与えられる。
ここで、移行元処理部130および移行先処理部230は、移行対象のOSとは別個に実現される。移行元処理部130および移行先処理部230からデータ記憶部120,220の全ての領域にアクセス可能とするためである。例えば、移行元処理部130および移行先処理部230は、サーバ100,200で動作する所定のオンメモリOS上で実行されてもよい。その場合、移行元処理部130および移行先処理部230は、オンメモリOSが提供する機能(他のコンピュータとの通信機能などの基本的な機能)を利用できる。例えば、Windows(登録商標)系のオンメモリOSとして、Windows PE(Preinstallation Environment)が知られている。また、Linux(登録商標)系のオンメモリOSとして、KNOPPIXやUbuntu(登録商標)などが知られている。
オンメモリOS、移行元処理部130および移行先処理部230のプログラムは、所定の記録媒体(光ディスク13、外部記憶装置14およびメモリカード16など)やネットワーク10に接続された他のコンピュータ上に格納しておくことができる。サーバ100,200は、記録媒体から読み取ったプログラムまたは他のコンピュータからダウンロードしたプログラムをサーバ100,200が備えるRAMに格納し、実行することで、オンメモリOS、移行元処理部130および移行先処理部230の機能を発揮できる。
図5は、記憶領域の例を示す図である。データ記憶部120は、MBR(Master Boot Record)領域123、OS管理外領域121およびOS管理領域122を含む。OS管理外領域121およびOS管理領域122は、図4で説明した記憶領域である。データ記憶部220も、データ記憶部120と同様の構造により実現できる。
MBR領域123は、データ記憶部120内の各記憶領域を管理するためのMBRと呼ばれる情報を格納する記憶領域である。例えば、MBR領域123は、データ記憶部120の先頭ブロック(あるいは、先頭セクタ)に存在している。OS管理領域122は、MBR領域よりも後ろの領域に配置される。
このとき、MBR領域123とOS管理領域122との間に所定数ブロック分の空き領域(例えば、数10kB(kilo Bytes)〜数MB(Mega Bytes)程度)が存在することがある。例えば、URL“http://www.kozupon.com/etc/disk_os.html”にこの空き領域の例示がある。そこで、この空き領域をOS管理外領域121として利用することが考えられる。
ただし、それ以外の領域をOS管理外領域121として利用してもよい。例えば、データ記憶部120において、OS管理領域122よりも後方の領域がサーバ100にインストールされたOSにより利用されないことが明らかであれば、その領域をOS管理外領域121として利用してもよい。例えば、データ記憶部120の最後のブロックから前側の所定数のブロック範囲を含む領域が当該OSにより利用されないことが明らかであれば、その領域をOS管理外領域121として利用することも考えられる。
ここで、OS管理外領域121は、進捗テーブル121a、変換テーブル121bおよび復旧用データ群121cを記憶する。進捗テーブル121a、変換テーブル121bおよび復旧用データ群121cは、移行の進捗をブロック単位に管理するための情報である。また、これらの情報はOS管理外領域221にも格納される。
図6は、ブロックの例を示す図である。データ記憶部120の記憶領域は、ブロックと呼ばれる単位で管理される。データ記憶部220の記憶領域も同様に、ブロックと呼ばれる単位で管理される。一例として、1ブロックのサイズ(すなわち、1ブロックデータのサイズ)を512B(Bytes)とする。ただし、4kB=4096Bなど他のサイズでもよい。
例えば、OS管理領域122に含まれる各ブロックの物理的な位置は、ブロック番号によって把握できる。先頭のブロックから昇順にブロック番号が対応付けられている。例えば、OS管理領域122には、ブロック番号“320”,“321”,“322”,・・・の複数のブロックが含まれる。例えば、ブロック番号“320”のブロックには、ブロックデータA1が格納されている。ブロック番号“321”のブロックには、ブロックデータA2が格納されている。ブロック番号“322”のブロックには、ブロックデータA3が格納されている。
移行元処理部130は、ブロック番号によって、そのブロック番号に対応するブロックのデータ記憶部120上の物理的な位置を特定できる。移行先処理部230は、ブロック番号によって、そのブロック番号に対応するブロックのデータ記憶部220上の物理的な位置を特定できる。
図7は、進捗テーブルの例を示す図である。図7(A)は、進捗テーブル121aを例示している。進捗テーブル121aは、OS管理外領域121に格納される。図7(B)は、進捗テーブル221aを例示している。進捗テーブル221aは、OS管理外領域221に格納される。
進捗テーブル121a,221aは、サーバ100からサーバ200へのデータ送信処理や、サーバ100,200でのデータ変換(暗号化/復号)処理の進捗を管理するための情報である。以下では、進捗テーブル121aを説明するが、進捗テーブル221aも同様のデータ構造である。進捗テーブル121aは、ブロック番号および可逆変換キーの項目を含む。
ブロック番号の項目には、処理済のブロックのブロック番号が登録される。可逆変換キーの項目には、暗号化に用いる鍵が登録される。第2の実施の形態では、一例として、サーバ100,200は、暗号化/復号に共通鍵を用いる。サーバ100,200は、この共通鍵を可逆変換キーとして保持する。
例えば、進捗テーブル121aには、ブロック番号が“322”、可逆変換キーが“keyX”という情報が登録される。これは、ブロック番号“322”のブロックまで処理済であることを示す。また、ブロックデータの暗号化/復号に用いる共通鍵が“keyX”であることを示す。
図8は、変換テーブルの例を示す図である。図8(A)は、変換テーブル121bを例示している。変換テーブル121bは、OS管理外領域121に格納される。図8(B)は、変換テーブル221bを例示している。変換テーブル221bは、OS管理外領域221に格納される。
変換テーブル121b,221bは、データ変換(暗号化/復号)の詳細を管理するため(主に、障害時の復旧)に用いられる。以下では、変換テーブル121bを説明するが、変換テーブル221bも同様である。変換テーブル121bは、リスト番号、ブロック番号およびハッシュ値の項目を含む。
リスト番号の項目には、リスト番号が登録される。リスト番号は、後述する復旧用データ群に含まれる要素を示す番号である。ブロック番号の項目には、変換の対象となったブロック番号が登録される。ハッシュ値の項目には、変換後のブロックデータに対して算出されたハッシュ値が登録される。変換後のブロックデータとは、サーバ100であれば暗号化後のブロックデータであり、サーバ200であれば復号後のブロックデータである。
例えば、変換テーブル121bには、リスト番号が“1”、ブロック番号が“321”、変換後(サーバ100なので暗号化後)のブロックデータのハッシュ値が“HA1”という情報が登録される。これは、リスト番号が“1”であり、当該ブロックデータがブロック番号“321”に対応しており、変換後(暗号化後)のブロックデータに対してハッシュ値“HA1”を算出済であることを示す。
図9は、復旧用データ群の例を示す図である。図9(A)は、復旧用データ群121cを例示している。復旧用データ群121cは、OS管理外領域121に格納される。図9(B)は、復旧用データ群221cを例示している。復旧用データ群221cは、OS管理外領域221に格納される。
復旧用データ群121c,221cは、データ変換時のエラーに対する復旧用のブロックデータを格納した配列である。復旧用データ群121c,221cでは、前述のリスト番号に対応する要素として、変換前のブロックデータが、復旧用データとして登録される。すなわち、サーバ100であれば暗号化前のブロックデータが復旧用データとなる。また、サーバ200であれば復号前のブロックデータが復旧用データとなる。例えば、復旧用データ群121cは、ブロック番号“321”に対応するブロックデータの復旧用データ(暗号化前)を含む。その復旧用データはリスト番号“1”に対応する。
例えば、変換テーブル121bおよび復旧用データ群121cは、リングバッファによって実現できる。OS管理外領域121の記憶領域を循環して再利用すれば、OS管理外領域121の全体サイズが比較的小さくても当該領域を効率的に利用できるからである。その場合、例えば、OS管理外領域121のサイズに応じて、リスト番号“1”から“N”(Nは2以上の整数)までのレコードを格納できる。リスト番号は昇順に用いられる。リスト番号“N”の次のレコードに情報を書き込むときは、リスト番号“1”に対応するレコードが上書きされる。
次に、第2の実施の形態のソフトウェアの移行処理の手順を説明する。具体的には、OS管理領域122に格納されたデータを、OS管理領域222に移行することで、ソフトウェアの利用環境をサーバ100からサーバ200へ移行する。移行に際して、移行対象のOSを起動させずに、移行元処理部130および移行先処理部230をサーバ100,200上に実現させる。
例えば、ユーザは、サーバ100の起動時に、移行元処理部130のプログラムを格納した記録媒体をサーバ100に挿入する。すると、サーバ100のBIOS(Basic Input/Output System)により記録媒体からオンメモリOSがブートされ、移行元処理部130の機能が発揮される。前述のように、サーバ100は、起動時に他のコンピュータからプログラムをダウンロードすることで、オンメモリOSをネットワークブートすることもできる。サーバ200も同様にして、オンメモリOSや移行先処理部230の機能を発揮できる。
図10は、移行処理の例を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。
(S11)管理部131は、サーバ200(移行先サーバ)のサーバ証明書を、サーバ200に要求する。
(S12)管理部231は、サーバ100からサーバ証明書の要求を受信する。
(S13)管理部231は、要求されたサーバ200のサーバ証明書をサーバ100に送信する(サーバ証明書の応答)。ここで、管理部231は、セッションキー(共通鍵)生成用の情報(例えば、乱数など)をこの応答に含める。
(S14)管理部131は、サーバ200のサーバ証明書を受信する。
(S15)暗号化部132は、管理部131により取得された共通鍵生成用の情報を用いて共通鍵を生成する。
(S16)暗号化部132は、進捗テーブル121aを生成し、OS管理外領域121に格納する。進捗テーブル121aのブロック番号の初期値は、例えば、0である。暗号化部132は、生成した共通鍵(“keyX”)を進捗テーブル121a(可逆変換キーの項目)に登録する。
(S17)管理部131は、暗号化部132は、OS管理領域122のブロックを、先頭(ブロック番号が最小のブロック)から順番に読み出し、ステップS15で生成した共通鍵を用いてそのブロックデータを暗号化する。このとき、OS管理領域122内のデータは、OS管理領域122内にそのまま保持されることになる。管理部131は、暗号化後のブロックデータ(暗号化ブロックデータという)をサーバ200に順次送信する。管理部231は、暗号化ブロックデータを順次受信する。
(S18)管理部131は、ステップS15で生成した共通鍵を、サーバ200の公開鍵を用いて暗号化し、サーバ200に送信する。例えば、サーバ200の公開鍵は、ステップS14で取得したサーバ200のサーバ証明書に含まれる。
(S19)管理部231は、サーバ100から暗号化後の共通鍵を受信する。復号部232は、管理部231により取得された暗号化後の共通鍵を、秘密鍵で復号する。秘密鍵は、サーバ100に提供したサーバ証明書の公開鍵に対応するものである。公開鍵と秘密鍵とを用いた暗号化の手法は公開鍵暗号方式と呼ばれることもある。復号部232は、復号した共通鍵(“keyX”)を進捗テーブル221aに登録する。
(S20)管理部231は、共通鍵の取得を完了した旨(完了通知)をサーバ100に送信する。
(S21)管理部131は、サーバ200から完了通知を受信する。
(S22)管理部131は、サーバ200と連携して、OS管理領域122内のデータ(移行データ)の変換を行う。具体的には、サーバ100はOS管理領域122の暗号化(順変換)を行う。サーバ200はOS管理領域222の復号(逆変換)を行う。
なお、管理部131は、生成された共通鍵を暗号化してサーバ200に送信するものとしたが、鍵の交換方法は上記の方法に限られない。例えば、ステップS18において、管理部131は、共通鍵(“keyX”)生成用の情報をサーバ200に送信し、サーバ200に共通鍵を生成させることも考えられる。
また、サーバ100,200は、ステップS11の前に、自身のサーバ証明書および秘密鍵を予め取得しておく。例えば、サーバ100,200に読み取らせるブート用の記録媒体に各サーバのサーバ証明書や秘密鍵を格納しておくことができる。あるいは、サーバ100,200が他のコンピュータからプログラムをダウンロードする場合、当該他のコンピュータに各サーバのサーバ証明書や秘密鍵を格納しておき、プログラムとともにダウンロード可能にしてもよい。サーバ100,200は、取得したサーバ証明書や秘密鍵をOS管理外領域に格納する。
図11は、移行データの送信処理の例を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。以下に示す手順は、図10のステップS17に相当する。
(S31)管理部131は、OS管理領域122から1つのブロックデータを読み取る。管理部131は、OS管理領域122の先頭ブロック(ブロック番号が最小のブロック)から順番に読み取る。
(S32)管理部131は、読み取ったブロックデータをバッファ110に格納する。
(S33)暗号化部132は、バッファ110に格納されたブロックデータを、OS管理外領域121に記憶された進捗テーブル121aに含まれる鍵(可逆変換キー)“keyX”を用いて暗号化する。これにより、暗号化部132は、1つのブロックデータに対して1つの暗号化ブロックデータを生成する。暗号化前のブロックデータのサイズと暗号化ブロックデータのサイズとは同一である。
(S34)管理部131は、生成された暗号化ブロックデータをサーバ200に送信する。
(S35)管理部231は、サーバ100から暗号化ブロックデータを受信する。
(S36)管理部231は、暗号化ブロックデータをバッファ210に格納する。
(S37)管理部231は、バッファ210に格納された暗号化ブロックデータをOS管理領域222に書き込む。管理部231は、OS管理領域222の先頭ブロックから順番に暗号化ブロックデータを書き込んでいく。OS管理領域122の先頭ブロックのブロック番号と、OS管理領域222の先頭ブロックのブロック番号とは一致とする。
(S38)管理部231は、OS管理外領域221に記憶された進捗テーブル221aを更新する。具体的には、管理部231は、ステップS37で書き込んだブロック位置に対応するブロック番号を、進捗テーブル221aに登録する。例えば、ステップS37で書き込んだブロック位置がブロック番号“322”に対応していれば、管理部231は、進捗テーブル221aのブロック番号に“322”を登録する。例えば、管理部231は、現在登録されているブロック番号に1(または1単位分の値)を加算したブロック番号を登録してもよい。
(S39)管理部231は、暗号化ブロックデータの受信を完了した旨(完了通知)をサーバ100に送信する。
(S40)管理部131は、サーバ200から完了通知を受信する。
(S41)管理部131は、進捗テーブル121aを更新する。具体的には、管理部131は、ステップS31で読み取ったブロック位置に対応するブロック番号を、進捗テーブル121aのブロック番号に登録する。例えば、ステップS31で読み取ったブロック位置がブロック番号“322”に対応していれば、管理部131は、進捗テーブル121aのブロック番号に“322”を登録する。例えば、管理部131は、現在登録されているブロック番号に対して1(または1単位分の値)を加算したブロック番号を登録してもよい。
(S42)管理部131は、OS管理領域122内の全ブロックデータを(暗号化した上で)サーバ200に送信済であるか否かを判定する。全ブロックデータを送信済である場合、処理を終了する。全ブロックを送信済でない場合、処理をステップS31に進める。
このようにして、サーバ100は、OS管理領域122内のデータをブロック単位に暗号化して、サーバ200へ順次送信する。前述のように、暗号化ブロックデータは、暗号化前のブロックデータと同一のサイズである。このため、進捗テーブル121a,221aに登録されるブロック番号は、ステップS41の完了時には一致する。
なお、図5で例示したように、データ記憶部120にMBR領域123などの他の領域が存在している場合もある。その場合、何れかのタイミング(例えば、図10のステップS17の前やステップS22の後)に、管理部131,231は、当該他の領域のデータをデータ記憶部220に複製してもよい。例えば、管理部131,231は、データ記憶部220の先頭ブロックにMBR領域123を複製する。
図12は、暗号化ブロックデータの送信処理の例を示す図である。以下、図12に示す処理をステップ番号に沿って説明する。なお、図12では暗号化ブロックデータを、暗号化BL(BLock)データと略記している(以降の図でも同様に略記することがある)。
(ST11)移行元処理部130は、OS管理領域122からブロックデータA1を読み取り、バッファ110に格納する。
(ST12)移行元処理部130は、共通鍵“keyX”を用いて、ブロックデータA1を暗号化し、暗号化ブロックデータA1eを生成する。前述のように、共通鍵“keyX”は、OS管理外領域121に記憶された進捗テーブル121aに登録されている。
(ST13)移行元処理部130は、暗号化ブロックデータA1eをサーバ200に送信する。移行先処理部230は、暗号化ブロックデータA1eを受信し、バッファ210に格納する。
(ST14)移行先処理部230は、暗号化ブロックデータA1eをOS管理領域222のブロック番号“320”のブロックに書き込む。
(ST15)移行先処理部230は、暗号化ブロックデータA1eを書き込んだブロックのブロック番号“320”を、OS管理外領域221に記憶された進捗テーブル221aに登録する。移行先処理部230は、暗号化ブロックデータA1eの受信を完了した旨(完了通知)をサーバ100に通知する。
(ST16)移行元処理部130は、サーバ200から完了通知を受信すると、ブロックデータA1に対応するブロック番号“320”を進捗テーブル121aに登録する。以降、移行元処理部130は、ブロックデータA2,・・・の送信を順次行う。
このように、サーバ100は、OS管理領域122のデータを保持したまま、そのデータを暗号化してサーバ200に送信する。全ブロックデータの送信が完了した段階において、サーバ100では、OS管理領域122上のデータがそのまま残ることになる。また、サーバ200は、暗号化後のデータをOS管理領域222に格納した状態となる。
なお、サーバ100からサーバ200への暗号化ブロックデータの送信中に、通信障害により暗号化ブロックデータの送信が中断されることがある。その場合、管理部131,231は、進捗テーブル121a,221aそれぞれに登録されたブロック番号を比較して、小さい方のブロック番号を起点に、サーバ100からサーバ200へのデータ送信を再開する。ここで、OS管理領域122内に移行対象のデータは残っているので、データ送信を最初からやり直してもよい。ただし、最初からやり直すよりも、途中から再開する方がデータ送信を速く完了させることができる。
図13は、移行元における移行データの変換処理の例を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。以下に示す手順は、図10のステップS22に相当する。
(S51)管理部131は、OS管理領域122から1つのブロックデータを読み取る。管理部131は、OS管理領域122の先頭ブロックから順番に読み取る。管理部131は、読み取ったブロックデータをバッファ110に格納する。
(S52)管理部131は、OS管理外領域121に記憶された復旧用データ群121cに、読み取ったブロックデータを追加する(ブロックデータの退避)。これにより、当該ブロックデータにリスト番号が対応付けられる。
(S53)管理部131は、読み取ったブロックデータのブロック番号を、そのリスト番号に対応付けて、OS管理外領域121に記憶された変換テーブル121bに登録する。
(S54)暗号化部132は、ステップS51でバッファ110に格納されたブロックデータを、OS管理外領域121に記憶された進捗テーブル121aに含まれる鍵(可逆変換キー)“keyX”を用いて暗号化し、暗号化ブロックデータを生成する。
(S55)ハッシュ処理部133は、暗号化ブロックデータのハッシュ値を計算し、変換テーブル121bに記録する。
(S56)管理部131は、ステップS51で読み取り対象となったOS管理領域122上のブロックデータを、ステップS54で生成された暗号化ブロックデータへ置き換える。
(S57)管理部131は、進捗テーブルを更新する。具体的には、管理部131は、ステップS51で読み取ったブロックのブロック番号を、進捗テーブル121aのブロック番号に登録する。例えば、ステップS51で読み取ったブロックのブロック番号が“322”であれば、管理部131は進捗テーブル121aのブロック番号に“322”を登録する。例えば、管理部131は、現在登録されているブロック番号に対して1(または1単位分の値)を加算したブロック番号を登録してもよい。
(S58)管理部131は、サーバ200へ進捗データを送信する。進捗データは、進捗テーブル121aに登録されたブロック番号を含む。例えば、ステップS57でブロック番号を“322”に更新したなら、進捗データに含まれるブロック番号は“322”である。管理部131は、当該進捗データに対するサーバ200からの応答(サーバ200からの進捗データ)の到着を待機する。
(S59)管理部131は、サーバ200から進捗データを受信する。例えば、ステップS58で、ブロック番号“322”を含む進捗データを送信したなら、サーバ200から受信する進捗データに含まれるブロック番号も“322”である。
(S60)管理部131は、OS管理領域122に含まれる全ブロックデータの暗号化を終了したか否かを判定する。終了していない場合、処理をステップS51に進める。終了した場合、処理をステップS61に進める。
(S61)管理部131は、移行完了通知をサーバ200に送信する。管理部131は、移行完了通知を受信した旨の応答をサーバ200から受信する。
(S62)管理部131は、OS管理外領域121に格納されたデータ(進捗テーブル121a,変換テーブル121bおよび復旧用データ群121c)を消去する。
なお、ステップS52は、ステップS54またはステップS55の後に行われてもよい。その場合、少なくともステップS54またはステップS55の後までは、ステップS51で読み取った(暗号化前の)ブロックデータをバッファ110に保持しておく。
サーバ200は、ステップS58で送信された進捗データを受信すると、進捗データに含まれるブロック番号と同じブロック番号の暗号化ブロックデータを復号する。サーバ100のOS管理領域122の暗号化に伴って、サーバ200のOS管理領域222の復号も進行する。
図14は、移行先における移行データの変換処理の例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
(S71)管理部231は、サーバ100から進捗データを受信する。
(S72)管理部231は、OS管理領域222から1つの暗号化ブロックデータを読み取る。管理部231は、OS管理領域222の先頭ブロックから順番に読み取る。管理部231は、読み取った暗号化ブロックデータをバッファ210に格納する。ここで、ステップS72で読み取られるブロックのブロック番号は、受信した進捗データに含まれるブロック番号と一致する。
(S73)管理部231は、OS管理外領域221に記憶された復旧用データ群221cに、読み取った暗号化ブロックデータを追加する(ブロックの退避)。これにより、当該暗号化ブロックデータにリスト番号が対応付けられる。
(S74)管理部231は、読み取った暗号化ブロックデータのブロック番号を、そのリスト番号に対応付けて、OS管理外領域221に記憶された変換テーブル221bに登録する。
(S75)復号部232は、ステップS72でバッファ210に格納された暗号化ブロックデータを、OS管理外領域221に記憶された進捗テーブル221aに含まれる鍵(可逆変換キー)“keyX”を用いて復号し、ブロックデータを生成する。前述のように、暗号化ブロックデータのサイズと、復号後のブロックデータのサイズとは同一である。
(S76)ハッシュ処理部233は、復号後のブロックデータのハッシュ値を計算し、変換テーブル221bに記録する。
(S77)管理部231は、ステップS72で読み取り対象となったOS管理領域222上の暗号化ブロックデータを、ステップS75で生成された復号後のブロックデータへ置き換える。
(S78)管理部231は、進捗テーブルを更新する。具体的には、管理部231は、ステップS72で読み取ったブロックのブロック番号を、進捗テーブル221aのブロック番号に登録する。例えば、ステップS72で読み取ったブロックのブロック番号が“322”であれば、管理部231は進捗テーブル221aのブロック番号に“322”を登録する。例えば、管理部231は、現在登録されているブロック番号に対して1(または1単位分の値)を加算したブロック番号を登録してもよい。
(S79)管理部231は、サーバ100へ進捗データを送信する。進捗データは、進捗テーブル221aに登録されたブロック番号を含む。例えば、ステップS78でブロック番号を“322”に更新したなら、進捗データに含まれるブロック番号は“322”である。
(S80)管理部231は、サーバ100から移行完了通知を受信したか否かを判定する。移行完了通知を受信していない場合、処理を終了する(管理部231は、サーバ100から次の進捗データを受信するまで待機する)。移行完了通知を受信した場合、管理部231は移行完了通知を受信した旨をサーバ100に応答して、処理をステップS81に進める。
(S81)管理部231は、OS管理外領域221に格納されたデータ(進捗テーブル221a,変換テーブル221bおよび復旧用データ群221c)を消去する。
その後、サーバ200は、ステップS80で移行完了通知を受信していなければ、サーバ100からの次の進捗データの受信を待機する(ステップS71の進捗データの受信を待機)。そして、サーバ200は、サーバ100から移行完了通知を受信するまで、上記ステップS71〜S80を繰り返し実行し、暗号化ブロックデータを順次復号する。
なお、ステップS73は、ステップS75またはステップS76の後に行われてもよい。その場合、少なくともステップS75またはステップS76の後までは、ステップS72で読み取った暗号化ブロックデータをバッファ210に保持しておく。
図15は、移行元におけるブロックデータの暗号化の例を示す図である。以下、図15に示す処理をステップ番号に沿って説明する。なお、ブロックデータA2を暗号化する(ブロックデータA1を暗号化ブロックデータA1eに置換済である)場合を想定する。
(ST21)移行元処理部130は、OS管理領域122からブロックデータA2を読み取り、バッファ110に格納する。
(ST22)移行元処理部130は、OS管理外領域121にブロックデータA2を書き込む(ブロックデータA2の退避)。
(ST23)移行元処理部130は、共通鍵“keyX”を用いて、ブロックデータA2を暗号化し、暗号化ブロックデータA2eを生成する。前述のように、共通鍵“keyX”は、OS管理外領域121に記憶された進捗テーブル121aに登録されている。
(ST24)移行元処理部130は、暗号化ブロックデータA2eのハッシュ値を算出し、OS管理外領域121に記憶された変換テーブル121bに登録する。
(ST25)移行元処理部130は、OS管理領域122に格納されたブロックデータA2を暗号化ブロックデータA2eへ置き換える。
(ST26)移行元処理部130は、進捗テーブル121aを更新する。そして、移行元処理部130は、サーバ200へ進捗データを送信する。すると、サーバ200はOS管理領域222に格納された暗号化ブロックデータA2eを復号する。
ここで、前述のように、ブロックデータを退避させておく記憶領域(復旧用データ群121cを格納する領域)は、循環して再利用される。例えば、ブロックデータA2が当該記憶領域に書き込まれ、サーバ200でのブロックデータA2eの復号が完了した後、サーバ100における以降のブロックデータの暗号化が進行すると、復旧用データ群121cからブロックデータA2が削除されることになる。他のブロックデータによって上書きされるからである。よって、復旧用データ群121cに、OS管理領域122に格納された全てのブロックデータが格納されることはない。
図16は、移行先における暗号化ブロックデータの復号の例を示す図である。以下、図16に示す処理をステップ番号に沿って説明する。なお、暗号化ブロックデータA2eを復号する(暗号化ブロックデータA1eをブロックデータA1に置換済である)場合を想定する。
(ST31)移行先処理部230は、OS管理領域222から暗号化ブロックデータA2eを読み取り、バッファ210に格納する。
(ST32)移行先処理部230は、OS管理外領域221に暗号化ブロックデータA2eを書き込む(暗号化ブロックデータA2eの退避)。
(ST33)移行先処理部230は、共通鍵“keyX”を用いて、暗号化ブロックデータA2eを復号し、ブロックデータA2を生成する。前述のように、共通鍵“keyX”は、OS管理外領域221に記憶された進捗テーブル221aに登録されている。
(ST34)移行先処理部230は、ブロックデータA2のハッシュ値を算出し、OS管理外領域221に記憶された変換テーブル221bに登録する。
(ST35)移行先処理部230は、OS管理領域222に格納された暗号化ブロックデータA2eをブロックデータA2へ置き換える。
(ST36)移行先処理部230は、進捗テーブル221aを更新する。そして、移行先処理部230は、サーバ100へ進捗データを送信する。すると、サーバ100はOS管理領域122に格納されたブロックデータA3を暗号化する。以降、サーバ200における暗号化ブロックデータA3eの復号、サーバ100における次のブロックデータの暗号化、・・・と、順番に変換が行われる。
このようにして、サーバ100からサーバ200へのOSやアプリケーションの移行が行われる。
図17は、移行の流れの例を示す図である。データD10は、移行対象のデータである。データD10は、OS管理領域122に含まれる複数のブロックデータの集合であるともいえる。データD10は、サーバ100にインストールされたOSを動作させるためのデータを含む。また、サーバ100にアプリケーションがインストールされていれば、そのアプリケーションを動作させるためのデータを含む。
データD10は、移行を行う直前では、OS管理領域122に格納されており、OS管理領域222には格納されていない(ステップST101)。サーバ100は、データD10を保持しながら、データD10をブロックデータ単位に暗号化して、サーバ200に順次送信する(ステップST102)。全ブロックデータの送信が完了した段階において、サーバ100では、OS管理領域122上のデータがそのまま残ることになる。また、サーバ200は、データD10の暗号化後のデータ(暗号化データD20)をOS管理領域222に格納した状態となる(ステップST103)。
図18は、移行の流れの例(続き)を示す図である。変換の直前では、サーバ100は、OS管理領域122にデータD10を格納している。サーバ200は、暗号化データD20をOS管理領域222に格納している(ステップST111)。
サーバ100は、OS管理領域122に格納されたデータD10の暗号化を開始する。また、サーバ200は、OS管理領域222に格納された暗号化データD20の復号を開始する。サーバ100での暗号化の開始後から完了前のあるタイミングに着目すると、サーバ100のOS管理領域122には、暗号化中であるデータD10aが格納されている。データD10aは、暗号化済の部分D11aと未暗号化の部分D12aとを含む。他方、当該タイミングにおいて、サーバ200のOS管理領域222には、復号中であるデータD20aが格納されている。データD20aは、復号済の部分D21aと未復号の部分D22aとを含む(ステップST112)。
サーバ200が復号を完了する前に、サーバ100は暗号化を完了する。サーバ100が暗号化を完了したタイミングに着目すると、サーバ100のOS管理領域122には、データD10を暗号化した暗号化データD10bが格納されている。本例では、暗号化に用いた鍵や手順が同じなので、暗号化データD10b,D20は同一である。他方、当該タイミングにおいて、サーバ200のOS管理領域222には、復号中であるデータD20bが格納されている。データD20bは、復号済の部分D21bと未復号の部分D22bとを含む(ステップST113)。部分D21bのサイズは、部分D21aよりも大きい。部分D22bのサイズは、部分D22aよりも小さい。ステップST112に比べて復号が進んでいるからである。前述の手順に従えば、部分D22bは最後の1ブロックデータに相当する。
サーバ100が暗号化を完了した後に、サーバ200は復号を完了する。サーバ200が復号を完了したタイミングに着目すると、サーバ100のOS管理領域122には、暗号化データD10bが格納されている。他方、当該タイミングにおいて、サーバ200のOS管理領域222には、暗号化データD20を復号して得られたデータD10が格納されている(ステップST114)。
ここで、移行対象のOSやアプリケーションがサーバ100,200で並列に動作してしまうと、システム障害の要因になり得る。例えば、OSで設定されたIP(Internet Protocol)アドレスなどの識別情報がネットワーク10上で重複して存在すると、その識別情報を指定した通信を正常に行えないおそれがある。また、例えば、データベースやファイルサーバなどのデータ管理用のアプリケーションが移行対象であれば、サーバ100,200の両方により管理対象のデータベースなどが個別に操作されると、データ不整合を生じるおそれがある。また、他のアプリケーションについてもそのアプリケーションにおけるデータ不整合や他のサーバとの連携における不具合などが生じ得る。
そこで、第2の実施の形態の方法では、移行対象のソフトウェアのデータを暗号化することで、サーバ100,200の両方で当該ソフトウェアが並列に動作することを抑制する。
具体的には、暗号化データD10b,D20はデータD10とは異なる情報である。このため、サーバ100でデータD10を、サーバ200で暗号化データD20を、それぞれ同時に保持したとしても、移行対象のOSやアプリケーションがサーバ200で動作することはない。また、サーバ200で暗号化データD20のデコードが完了するとき、サーバ100では暗号化データD10bが保持されていることになる。サーバ200でデータD10を、サーバ100で暗号化データD10bを、それぞれ同時に保持したとしても、移行対象のOSやアプリケーションがサーバ100で動作することはない。これにより、移行対象のソフトウェアがサーバ100,200で並列に動作することを抑制できる。
例えば、データD10に状態情報を設定可能とし、サーバ100でデータD10の状態情報を使用不可状態に設定してからサーバ200へデータD10のコピーを送信することも考えられる。しかし、この場合、データD10自体はサーバ100,200の両方に存在することになる。このため、状態情報が無視されたり(例えば、状態情報のチェックを行う機能が適切に動作しないなど)、状態情報の設定が不測の処理により改変されたりするだけで、移行対象のOSやアプリケーションがサーバ100,200で並列に動作し得る。また、移行時のオペレーションにおける人為的なミスによって、移行対象のソフトウェアがサーバ100,200で並列に動作してしまうおそれもある。データD10自体がサーバ100,200の両方に存在する限り、これらのリスクは残る。
一方、第2の実施の形態によれば、サーバ100,200によりデータD10を同時に保持させないので、上記のような不測の事態においても、移行対象のOSやアプリケーションがサーバ100,200で並列に動作することを抑制できる。よって、OSやアプリケーションの移行を安全に行える。
また、データD10のうち送信済の部分をサーバ100から削除しながら、サーバ200にデータD10を送信することも考えられる。しかし、この場合、送信中に通信障害が発生すると、サーバ100,200の何れにも元のデータD10が存在しないことになる。このため、移行途中であったOSやアプリケーションの復旧が困難になり得る。
これに対し、サーバ100は、データD10を保持しながら暗号化データD20をサーバ200に送信する。このため、仮に暗号化データD20の送信中に通信障害が発生しても、サーバ100上にデータD10が残るので、サーバ100上でOSやアプリケーションを動作させたり、データD10の送信を再度行ったりすることができる。よって、第2の実施の形態の方法は、データD10を削除しながら送信する方法よりも安全である。
また、例えば、サーバ200での復号が完了する前に、サーバ200のHDDなどの故障でデータ記憶部220にアクセスできなくなることもある。その場合、OS管理領域122の暗号化データD10b(あるいは、部分D11a)を復号することで、元のデータD10を復旧することができる。すなわち、サーバ200での復号中に、サーバ100で暗号化したデータを保持することで、障害に対する信頼性を向上させることができる。
特に、サーバ100でのデータD10の暗号化と、サーバ200での暗号化データD20の復号とを並行して行うことで、ソフトウェアの移行を高速化できる。例えば、OS管理領域122,222(すなわち、HDD)に対するデータの書き込みには所定時間を要する。この点、例えば、図13のステップS56において、管理部131はHDD103に対して書き込み指示を行った後にステップS57に移行できる。同様に、図14のステップS77において、管理部231はサーバ200のHDDに対して書き込み指示を行った後にステップS78に移行できる。よって、HDDに対する書き込み完了を待たずにサーバ100,200で暗号化/復号を並行して進めることができ、ソフトウェアの移行を高速化できる。
更に、第2の実施の形態では、サーバ100,200上に同時にソフトウェアの複製を存在させない。OS管理領域222の暗号化ブロックデータが復号されるのは、OS管理領域122で当該暗号化ブロックデータに対応するブロックデータが暗号化された後だからである。このため、ライセンスにより複製が制限されているソフトウェアを移行する場合に、ライセンス違反となるリスクを低減できるという利点もある。
また、第2の実施の形態の方法では、サーバ100,200を用いてソフトウェアの移行を行える。このため、移行の進捗を管理するコンピュータを別個に用意しなくてもよいという利点もある。
ところで、サーバ100での暗号化およびサーバ200での復号が行われている間に、サーバ100,200で電源断やサーバの動作エラーなどの障害が発生することがある。このような障害に伴い、OS管理領域122,222に不正なブロックデータ(エラーデータということがある)が書き込まれるおそれがある。この場合、移行元処理部130や移行先処理部230は、OS管理外領域に格納された情報に基づいて、OS管理領域内のエラーデータを検索し、復旧させることができる。
図19は、移行元における復旧処理の例を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。ステップS91の直前において、サーバ100で電源断などの障害が発生し、移行元処理部130が再起動されたとする。
(S91)管理部131は、OS管理外領域121に記憶された変換テーブル121bを読み取る。管理部131は、進捗テーブル121aや変換テーブル121bに登録された情報から、変換処理が中断されていることを検出する。
(S92)管理部131は、変換テーブル121bに登録された全レコードについてハッシュ値のチェックを行ったか否かを判定する。全レコードのハッシュ値をチェック済である場合、処理をステップS104に進める。未チェックのレコードがある場合、処理をステップS93に進める。
(S93)管理部131は、変換テーブル121bに登録されたレコードを1つ抽出する。例えば、(最小のリスト番号から)リスト番号の昇順にレコードを抽出する。あるいは、(変換テーブル121bに登録された最小のブロック番号から)ブロック番号の昇順にレコードを抽出してもよい。
(S94)管理部131は、ステップS93で抽出したレコード(着目するレコード)にハッシュ値の登録があるか否かを判定する。ハッシュ値の登録がある場合、処理をステップS95に進める。ハッシュ値の登録がない場合、処理をステップS104に進める。
(S95)管理部131は、着目するレコードに登録されたブロック番号を取得する。管理部131は、OS管理領域122の当該ブロック番号で示されるブロック位置を読み取る(当該ブロック番号に対応する暗号化ブロックデータの読み取り)。
(S96)ハッシュ処理部133は、その暗号化ブロックデータのハッシュ値を計算する。
(S97)ハッシュ処理部133は、計算されたハッシュ値が、着目するレコードに登録されたハッシュ値と一致しているか否かを判定する。一致している場合、処理をステップS92に進める。一致していない場合、処理をステップS98に進める。ハッシュ値が一致していない場合、ハッシュ処理部133は、その暗号化ブロックデータをエラーデータと特定できる。
(S98)管理部131は、着目するレコードに登録されたリスト番号を取得する。管理部131は、OS管理外領域121に記憶された復旧用データ群121cから、そのリスト番号に対応する復旧用データを読み取る。当該復旧用データは、ステップS95で取得したブロック番号に対応する暗号化前のブロックデータである。
(S99)暗号化部132は、復旧用データ(暗号化前のブロックデータ)を暗号化し、暗号化ブロックデータを生成する。
(S100)ハッシュ処理部133は、生成された暗号化ブロックデータのハッシュ値を計算し、変換テーブル121bの着目するレコードに登録する。
(S101)管理部131は、OS管理領域122のエラーデータを、新たに生成された暗号化ブロックデータへ置き換える。
(S102)管理部131は、進捗テーブルを更新する。具体的には、管理部131は、ステップS95で取得したブロック番号を、進捗テーブル121aのブロック番号に登録する。
(S103)管理部131は、サーバ200へ進捗データを送信する。進捗データは、ステップS102で進捗テーブル121aに登録されたブロック番号を含む。サーバ200は、進捗データを受信すると、進捗データに含まれるブロック番号に対応する暗号化ブロックデータの復号を行う。
(S104)管理部131は、図13で説明した手順による通常の変換処理を再開する。例えば、ステップS92で全レコードをチェック済、または、ステップS94で抽出したレコードにハッシュ値なしと判定されていれば、変換テーブル121bに登録された最大のブロック番号のブロックデータから通常の変換処理を再開すればよい。また、ステップS103で進捗データを送信したなら、それに対する応答(進捗データ)をサーバ200から受信して、次のブロックから通常の変換処理を再開する。
このようにして、管理部131は、電源断などの障害が起こっても、OS管理外領域121に格納されたハッシュ値を用いて、OS管理領域122の置き換えに失敗したエラー部分(エラーデータ)を検索できる。また、OS管理外領域121に格納された復旧用データを用いて、エラーデータを適切な暗号化ブロックデータに復旧できる。
上記の復旧方法によれば、サーバ100で復旧処理を行っている間、サーバ100からサーバ200への進捗データの送信は中断される。このため、サーバ200での逆変換(復号)の処理も中断されることになる。よって、サーバ100での暗号化が完了する前に、サーバ200での復号が完了することを抑制できる。
ここで、ステップS94でハッシュ値の登録がない場合に処理をステップS104に進めてよい理由は、着目するレコードにハッシュ値が登録されていなければ、そのレコードに対応するブロックは未変換(未暗号化)であると判断できるからである。すなわち、そのブロックから通常の変換(暗号化)処理を再開すればよいと判断できる。
図20は、移行先における復旧処理の例を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。ステップS111の直前において、サーバ200で電源断などのエラーが発生し、移行先処理部230が再起動されたとする。
(S111)管理部231は、OS管理外領域221に記憶された変換テーブル221bを読み取る。管理部231は、進捗テーブル221aや変換テーブル221bに登録された情報から、変換処理が中断されていることを検出する。
(S112)管理部231は、変換テーブル221bに登録された全レコードについてハッシュ値のチェックを行ったか否かを判定する。全レコードのハッシュ値をチェック済である場合、処理をステップS124に進める。未チェックのレコードがある場合、処理をステップS113に進める。
(S113)管理部231は、変換テーブル221bに登録されたレコードを1つ抽出する。例えば、(最小のリスト番号から)リスト番号の昇順にレコードを抽出する。あるいは、(変換テーブル221bに登録された最小のブロック番号から)ブロック番号の昇順にレコードを抽出してもよい。
(S114)管理部231は、ステップS113で抽出したレコード(着目するレコード)にハッシュ値の登録があるか否かを判定する。ハッシュ値の登録がある場合、処理をステップS115に進める。ハッシュ値の登録がない場合、処理をステップS124に進める。
(S115)管理部231は、着目するレコードに登録されたブロック番号を取得する。管理部231は、OS管理領域222の当該ブロック番号で示されるブロック位置を読み取る(当該ブロック番号に対応するブロックデータの読み取り)。
(S116)ハッシュ処理部233は、そのブロックデータのハッシュ値を計算する。
(S117)ハッシュ処理部233は、計算されたハッシュ値が、着目するレコードに登録されたハッシュ値と一致しているか否かを判定する。一致している場合、処理をステップS112に進める。一致していない場合、処理をステップS118に進める。ハッシュ値が一致していない場合、ハッシュ処理部233は、そのブロックデータをエラーデータと特定できる。
(S118)管理部231は、着目するレコードに登録されたリスト番号を取得する。管理部231は、OS管理外領域221に記憶された復旧用データ群221cから、そのリスト番号に対応する復旧用データを読み取る。当該復旧用データは、ステップS115で取得したブロック番号に対応する復号前の暗号化ブロックデータである。
(S119)復号部232は、復旧用データ(暗号化ブロックデータ)を復号し、復号後のブロックデータを生成する。
(S120)ハッシュ処理部233は、生成されたブロックデータのハッシュ値を計算し、変換テーブル221bの着目するレコードに登録する。
(S121)管理部231は、OS管理領域222のエラーデータを、新たに生成されたブロックデータへ置き換える。
(S122)管理部231は、進捗テーブルを更新する。具体的には、管理部231は、ステップS115で取得したブロック番号を、進捗テーブル221aのブロック番号に登録する。
(S123)管理部231は、サーバ200へ進捗データを送信する。進捗データは、ステップS122で進捗テーブル221aに登録されたブロック番号を含む。サーバ200は、進捗データを受信すると、進捗データに含まれるブロック番号の次のブロック番号に対応するブロックデータの暗号化を行う。
(S124)管理部231は、管理部231は、図14で説明した手順による通常の逆変換処理を再開する。例えば、ステップS112で全レコードをチェック済、または、ステップS114で抽出したレコードにハッシュ値なしと判定されていれば、変換テーブル221bに登録された最大のブロック番号の暗号化ブロックデータから通常の逆変換処理を再開すればよい。また、ステップS123で進捗データを送信したなら、次の進捗データをサーバ100から受信して、次のブロックから通常の逆変換処理を再開する。
このようにして、管理部231は、電源断などの障害が起こっても、OS管理外領域221に格納されたハッシュ値を用いて、OS管理領域222のデコード後のブロックデータの書き込みに失敗したエラー部分(エラーデータ)を検索できる。また、OS管理外領域221に格納された復旧用データを用いて、エラーデータを適切なブロックデータに復旧できる。
ここで、ステップS114でハッシュ値の登録がない場合に処理をステップS124に進めてよい理由は、着目するレコードにハッシュ値が登録されていなければ、そのレコードに対応するブロックは未変換(未復号)であると判断できるからである。すなわち、そのブロックから通常の逆変換(復号)処理を再開すればよいと判断できる。
なお、管理部131,231は、復旧処理を行う直前に、相手側のサーバに対して進捗データが送られてくるのを待機するよう通知しておいてもよい。そうすれば、相手側のサーバでの変換を中断し、当該サーバを待機モードとすることができる。相手側のサーバは、復旧処理を完了したサーバから進捗データを受信したときは、進捗データに含まれるブロック番号を起点に通常の変換(または、逆変換)処理を継続する。
図21は、移行元における復旧処理の例を示す図である。以下、図21に示す処理をステップ番号に沿って説明する。なお、サーバ100において、エラーデータA2xを復旧する場合を想定する。
(ST41)移行元処理部130は、OS管理領域から122からエラーデータA2xを読み取り、バッファ110に格納する。
(ST42)移行元処理部130は、エラーデータA2xのハッシュ値Hxを算出する。
(ST43)移行元処理部130は、エラーデータA2xのブロック番号に対応するハッシュ値をOS管理外領域121に記憶された変換テーブル121bから取得する。移行元処理部130は、ハッシュ値Hxと変換テーブル121bに登録されたハッシュ値とを比較する。ここで、両ハッシュ値は一致していないものとする。このため、移行元処理部130は、エラーデータA2xを書き込みに失敗した部分であると特定する。
図22は、移行元における復旧処理の例(続き)を示す図である。以下、図22に示す処理をステップ番号に沿って説明する。以下に示す処理は、図21のステップST43に後続する処理である。
(ST44)移行元処理部130は、エラーデータA2xのブロック番号を基に、OS管理外領域121に記憶された変換テーブル121bからリスト番号を取得する。移行元処理部130は、OS管理外領域121に記憶された復旧用データ群121cからそのリスト番号に対応する復旧用データを読み取る。当該復旧用データは、エラーデータA2xのブロック番号に対応する元のブロックデータA2である。
(ST45)移行元処理部130は、共通鍵“keyX”を用いて、ブロックデータA2を暗号化し、暗号化ブロックデータA2eを生成する。前述のように、共通鍵“keyX”はOS管理外領域121に記憶された進捗テーブル121aに登録されている。
(ST46)移行元処理部130は、暗号化ブロックデータA2eのハッシュ値を算出し、OS管理外領域121に記憶された変換テーブル121bに登録する。
(ST47)移行元処理部130は、OS管理領域122に格納されたエラーデータA2xを暗号化ブロックデータA2eへ置き換える。そして、移行元処理部130は、サーバ200へ進捗データを送信する。すると、サーバ200はOS管理領域222に格納された暗号化ブロックデータA2eを復号する。
このようにして、サーバ100は、OS管理外領域121に格納された復旧用データ(ブロックデータA2)を用いて、OS管理領域122のエラーデータA2xを適正な暗号化ブロックデータA2eに置き換え、変換を再開できる。図20で説明したように、サーバ200も同様にしてエラーデータの復旧を行える。これにより、障害に対する信頼性を向上できる。
特に、サーバ100,200は、復旧管理用のデータ(変換テーブルおよび復旧用データ群)を不揮発性のOS管理外領域121,221に保持する。したがって、電源断などの障害が発生したとしても、復旧管理用のデータを保持することができる。しかも、OS管理外領域121は、サーバ100にインストールされたOSやアプリケーションの動作時にはアクセスされない領域である。よって、復旧管理用のデータ(未エンコードのもの)をOS管理外領域121に格納しておいても、これらのソフトウェアがサーバ100で動作することはない。
このようにして、サーバ100からサーバ200へのOSやアプリケーションの移行をより安全に行える。なお、サーバ100,200で同時に障害が発生することもある。その場合、移行元処理部130および移行先処理部230は、次の起動時に相互に通信して、進捗テーブルのブロック番号を通知し合うことが考えられる。その場合、小さい方のブロック番号を起点にして両サーバで変換処理を再開することが考えられる。
図23は、記憶領域の他の例を示す図である。サーバ100にインストールされたOSやアプリケーションを、次のようにサーバ200に移行してもよい。例えば、データ記憶部120のOS管理領域122を基本領域122aおよび拡張領域122bの2つに区分できることがある。基本領域122aは、OS起動用のデータを格納する領域である。例えば、基本領域122aはプライマリパーティションと呼ばれることもある。
拡張領域122bは、基本領域122aにインストールされたOSにより利用可能であるが、当該OSの起動には用いられない領域である。例えば、拡張領域122bは拡張パーティションと呼ばれることもある。拡張領域122bには、OSにより認識可能な論理領域を作成して、種々のアプリケーションをインストールできる。
この場合、最初に、第2の実施の形態の方法を用いて基本領域122aをデータ記憶部220に移行させ(第1の移行)、次に、同方法を用いて拡張領域122bをデータ記憶部220に移行させてもよい(第2の移行)。
第1の移行では、データ記憶部220に、基本領域122aに対応する基本領域222aが作成される。すなわち、第1の移行では、基本領域122aにインストールされたOS(アプリケーションもインストールされていればそのアプリケーション)が移行される。第2の移行では、拡張領域122bに対応する拡張領域222bが作成される。すなわち、第2の移行では、拡張領域122bにインストールされたアプリケーションが移行される。
このように、データ記憶部120の記憶領域を複数の区分に分けて、区分単位に移行を行ってもよい。第1の移行では、移行対象のOSやアプリケーションがサーバ100,200で並列に動作することやライセンス違反を抑制できる。第2の移行では、移行対象のアプリケーションがサーバ100,200で並列に動作することやライセンス違反を抑制できる。
更に、サーバ100でブロックデータを暗号化後のデータに置き換えている場合でも、当該OSの動作用のデータが未暗号化であると、当該OSが動作してしまうおそれがある(例えば、拡張領域122bを先に移行する場合)。また、サーバ200で暗号化ブロックデータを復号後のデータに置き換えている場合でも、当該OSの動作用のデータが復号済になれば、サーバ200上で当該OSが動作するおそれがある(例えば、基本領域122aを先に移行する場合)。そこで、移行対象のOSからは使用できないOS管理外領域121,221に復旧管理用のデータを格納しておくことで、サーバ100,200の何れか一方で当該OSが動作してしまったとしても、復旧管理用のデータを保護できる。
ここで、第2の実施の形態では、所定の鍵を用いてブロックデータを暗号化する場合を例示したが、他のエンコード方法を用いてもよい。例えば、ビット反転(1ビットの情報である“0”と“1”とを逆転させる)でもよい。このとき、エンコード前後でブロックデータのサイズが同じになるエンコード方法が好ましい。OS管理領域222として、OS管理領域122と同じサイズを確保できれば移行を行えるからである。
ただし、エンコード前後でブロックデータのサイズが異なるエンコード方法を利用してもよい。例えば、サーバ100は、エンコードとしてブロックデータの圧縮を行ってもよい。サーバ200に送信するデータ量を低減し得るからである。その場合、サーバ200は、圧縮後ブロックデータにダミーデータを付加して、そのサイズを所定サイズ(例えば、512B)に調整した上で、OS管理領域222に書き込む。サーバ200は、復号時にはダミーデータを除去してから圧縮後ブロックデータの復号を行う。
また、サーバ100における図13のエンコード方法は、図11のエンコード方法と異なる方法でもよい。例えば、図11のエンコードは可逆変換としたが、図13のエンコードは不可逆変換(または、無意味なデータの書き込み)でもよい。ただし、前述のように障害に対する信頼性の観点からは可逆変換が好ましい。仮に、サーバ200でのデコード中にデータ記憶部220が故障しても、データ記憶部120内のエンコード後データをデコードすることでソフトウェアを復元できるからである。
以上のようにして、サーバ200でのデコードが完了すれば、サーバ100からサーバ200へのソフトウェアの移行が完了する。その後は、OS管理領域122に格納されたエンコード後データを削除する、サーバ100をネットワーク10から切断するなどして、サーバ100を撤去できる。
なお、第1の実施の形態の情報処理は、情報処理装置1,2として用いられるコンピュータにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、サーバ100,200にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体(例えば、光ディスク13、外部記憶装置14およびメモリカード16など)に記録できる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FD(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD、CD−R/RW、DVDおよびDVD−R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、サーバ100,200は、可搬型の記録媒体からRAMにプログラムを複製して実行してもよい。
以上の第1,第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
ソフトウェアを動作させるための第1のデータを記憶する第1の装置から第2の装置へ前記ソフトウェアを移行させるシステム移行プログラムであって、
前記第1の装置として用いられるコンピュータに、
前記第1のデータを保持しながら、前記第1のデータをエンコードした第2のデータを前記第2の装置に送信し、
前記第2の装置による前記第2のデータのデコードが開始される前に前記第1の装置により保持される前記第1のデータのエンコードを開始し、前記第2の装置による前記デコードが完了される前に 、前記第1のデータをエンコード後のデータに置き換える、
処理を実行させるシステム移行プログラム。
(付記2)
前記第1のデータは、不揮発性の記憶装置の第1の記憶領域に格納されており、
前記置き換えでは、前記第1のデータの複数の部分を部分毎にエンコードし、前記記憶装置のうち前記ソフトウェアの動作時にはアクセスされない第2の記憶領域にエンコード前の部分を格納する、付記1記載のシステム移行プログラム。
(付記3)
前記置き換えでは、エンコード前の部分に対応付けてエンコード後の当該部分のハッシュ値を前記第2の記憶領域に格納し、障害が発生すると、前記第2の記憶領域に格納されたハッシュ値に基づいて、前記第1の記憶領域のエラー部分を検索する、付記2記載のシステム移行プログラム。
(付記4)
前記第2の記憶領域に格納されたエンコード前の部分を用いて、前記エラー部分から前記置き換えを再開する、付記3記載のシステム移行プログラム。
(付記5)
前記ソフトウェアは、オペレーティングシステムを含み、
前記第2の記憶領域は、前記オペレーティングシステムからは使用できない記憶領域である、付記2乃至4の何れか1項に記載のシステム移行プログラム。
(付記6)
前記第2のデータの複数の部分のうち、前記第2の記憶領域に格納したエンコード前の部分に対応する部分が前記第2の装置でデコードされた後に、前記第2の記憶領域から当該エンコード前の部分を削除する、付記2乃至5の何れか1項に記載のシステム移行プログラム。
(付記7)
ソフトウェアを動作させるための第1のデータを記憶する第1の装置から第2の装置へ前記ソフトウェアを移行させるシステム移行プログラムであって、
前記第2の装置として用いられるコンピュータに、
前記第1のデータをエンコードした第2のデータを前記第1の装置から受信し、
前記第1の装置に格納されている前記第1のデータの前記第1の装置によるエンコードが開始された後に、受信した前記第2のデータのデコードを開始し、前記第1の装置による前記第1のデータのエンコード後のデータへの置き換えが完了された後に、前記デコードを完了する、
処理を実行させるシステム移行プログラム。
(付記8)
受信した前記第2のデータを不揮発性の記憶装置の第1の記憶領域に格納し、
前記デコードでは、前記第2のデータの複数の部分を部分毎にデコードして置き換えてゆき、前記記憶装置の第2の記憶領域にデコード前の部分を格納する、付記7記載のシステム移行プログラム。
(付記9)
前記デコードでは、デコード前の部分に対応付けてデコード後の当該部分のハッシュ値を前記第2の記憶領域に格納し、障害が発生すると、前記第2の記憶領域に格納されたハッシュ値に基づいて、前記第1の記憶領域のエラー部分を検索する、付記8記載のシステム移行プログラム。
(付記10)
前記第2の記憶領域に格納されたデコード前の部分を用いて、前記エラー部分からデコード後の部分への置き換えを再開する、付記9記載のシステム移行プログラム。
(付記11)
前記ソフトウェアは、オペレーティングシステムを含み、
前記第2の記憶領域は、前記オペレーティングシステムからは使用できない記憶領域である、付記8乃至10の何れか1項に記載のシステム移行プログラム。
(付記12)
ソフトウェアを動作させるための第1のデータを記憶する第1の装置から第2の装置へ前記ソフトウェアを移行させるシステム移行方法であって、前記第1の装置が、
前記第1のデータを保持しながら、前記第1のデータをエンコードした第2のデータを前記第2の装置に送信し、
前記第2の装置による前記第2のデータのデコードが開始される前に前記第1の装置により保持される前記第1のデータのエンコードを開始し、前記第2の装置による前記デコードが完了される前に、前記第1のデータをエンコード後のデータに置き換える、
システム移行方法。
(付記13)
ソフトウェアを動作させるための第1のデータを保持しながら前記第1のデータをエンコードした第2のデータを送信する第1の装置と、
前記第2のデータを受信してデコードする第2の装置と、を有し、
前記第1の装置は、前記第2の装置による前記第2のデータのデコードが開始される前に自身が保持する前記第1のデータのエンコードを開始し、前記第2の装置による前記デコードが完了される前に、前記第1のデータをエンコード後のデータに置き換える、
情報処理システム。