OpenStack のボリュームは、インスタンスから接続および切断できる、永続的なブロックストレージデバイスです。ただし、一度に接続できるのは 1 インスタンスだけです。外部ハードディスクと似ています。ネットワークファイルシステムやオブジェクトストアがしているような共有ストレージは提供されません。ブロックデバイス上にファイルシステムを構築し、それをマウントするかどうかは、インスタンス内のオペレーティングシステムに任されます。
他のリムーバブルディスク技術と同じように、ディスクを取り外す前に、オペレーティングシステムがそのディスクを使用しないようにすることが重要です。Linux インスタンスにおいて、一般的にボリュームからマウントされているすべてのファイルシステムをアンマウントする必要があります。OpenStack Volume Service は、インスタンスから安全にボリュームを取り外すことができるかはわかりません。そのため、指示されたことを実行します。ボリュームに書き込み中にインスタンスからボリュームの切断を、ユーザーが Volume Service に指示すると、何らかのレベルのファイルシステム破損が起きる可能性があります。それだけでなく、デバイスを使用していたインスタンスの中のプロセスがエラーを起こす可能性もあります。
ブロックデバイスにアクセスするために、インスタンスのオペレーティングシステムにおいて必要となる手順に、OpenStack 固有の事項はありません。初めて使用するときにフォーマットが必要になる、デバイスを取り外すときに注意する、などが考えられます。固有の事項は、新しいボリュームを作成し、それらをインスタンスに接続および切断する方法です。これらの操作は、ダッシュボードの「ボリューム」ページからすべて実行できます。または、cinder コマンドラインクライアントを使用します。
新しいボリュームを追加する際に必要なのは、名前とギガバイト単位のボリューム容量だけです。これらを「ボリュームの作成」Web フォームに記入します。または、コマンドラインを使用します。
$ cinder create --display-name test-volume 10
これは「test-volume」という名前の 10GB のボリュームを作成します。既存のボリュームの一覧を表示するには以下のようにします。それらが接続されているインスタンスがあれば、インスタンス情報も表示されます。
$ cinder list
+------------+---------+--------------------+------+-------------+-------------+ | ID | Status | Display Name | Size | Volume Type | Attached to | +------------+---------+--------------------+------+-------------+-------------+ | 0821...19f | active | test-volume | 10 | None | | +------------+---------+--------------------+------+-------------+-------------+
Block Storage Service では、ボリュームのスナップショットを作成することもできます。これはブロックレベルのスナップショットであることを覚えておいてください。これはクラッシュに対する一貫性があります。そのため、スナップショットが取得されるとき、ボリュームがインスタンスに接続されていないことが最良です。ボリュームが接続されたインスタンスにおいて使用されていなければ、次に良いです。ボリュームが高負荷にある場合、スナップショットによりファイルシステムの不整合が起こる可能性があります。実際、デフォルト設定では、Volume Service はイメージに接続されたボリュームのスナップショットを取得しません。ただし、強制的に実行することができます。ボリュームのスナップショットを取得するには、ダッシュボードの「ボリューム」ページにおいて、ボリューム名の隣にあるアクション項目から「スナップショットの作成」を選択します。または、コマンドラインから次のようにします。
usage: cinder snapshot-create [--force <True|False>] [--display-name <display-name>] [--display-description <display-description>] <volume-id> Add a new snapshot. Positional arguments: <volume-id> ID of the volume to snapshot Optional arguments: --force <True|False> Optional flag to indicate whether to snapshot a volume even if its attached to an instance. (Default=False) --display-name <display-name> Optional snapshot name. (Default=None) --display-description <display-description> Optional snapshot description. (Default=None)