本記事は、WindowsとLinuxのインスタンスを1つずつ用意して、ブロック・ボリュームを双方にアタッチし、共有ストレージとして使用できるのかを試した感想をまとめたものです。
こんにちは!k.takeiです。
前回、Oracle Cloudのファイルストレージサービスについて記事を書いたのですが、ブロック・ボリュームを使って似たようなことが出来るのではないかと思い、試すことにしました。
※ファイルストレージサービスについての記事はこちらを参照して下さい。
目次
ファイルストレージサービスではダメなのか?
ブロック・ボリュームを使用し、ファイルストレージサービスと同じようなことを試そうとした理由を説明します。
ファイルストレージサービスを利用すれば簡単に共有ストレージを使用できますが、ブロック・ボリュームと比較したとき、金額面がデメリットになっていました。
そこに、ブロック・ボリュームの機能として、複数のインスタンスから1つのボリュームにアタッチでき、共有ストレージとして使用ができるような記述があるのを発見し、より安価なブロック・ボリュームで同じような機能が出来れば問題が解決できるのではないかと思って調査を始めました。
参考までにそれぞれの単価を記載します。
※誤解のないように記載しますが、他社で同程度の機能を提供しているサービスと比べて高いというわけではないです。
・ファイルストレージサービスの利用料金
【1ギガバイト・ストレージ容量/月】あたり、約36円($0.30)
・ブロック・ボリュームの利用料金
【1ギガバイト・ストレージ容量/月】あたり、約3円($0.0255)
金額だけ見ると10倍近い差があるので、多少機能が劣っていてもブロック・ボリュームを使用するメリットの方が大きそうに見えます。
実際に検証した内容
事前準備として、インスタンスを2つ作成しておきます(WindowsとLinuxを1つずつ)。
ブロックボリュームを作成し、インスタンスにアタッチする
まずはブロック・ボリュームを作成し、事前に作成していたインスタンスにアタッチします。
コンソールメニューからストレージ > ブロック・ボリュームを選択すると遷移先の画面にブロック・ボリュームの作成というボタンが出てくるので押下します。

次に、作成に必要な情報を入力し、ブロック・ボリュームの作成を押下します。
- 名前
任意の文字を入力 - コンパートメントに作成
作成するコンパートメントを指定 - 可用性ドメイン
- 可用性ドメインを指定
- デフォルト、カスタムの項目選択
デフォルトかカスタムを選択
※今回はボリューム・サイズを最小にするためにカスタムを選択しています。 - ボリューム・サイズ
任意の値を指定
※デフォルトの場合は1024GB固定
VPU
任意の値を指定(カスタムを選択した場合のみ)



実際に作成したブロック・ボリュームの画面が下記です。

作成後、アタッチされたインスタンスは空になっているので、インスタンスにアタッチを押下します。

各項目を選択し、アタッチを押下します。
- アタッチメント・タイプ
任意のものを選択- ISCSI
IOPSパフォーマンスが準仮想化よりも高いが、アタッチ後に追加でコマンドを入力する必要がある - 準仮想化
iSCSIでアタッチされたボリュームに接続する前に必要な追加コマンドをがないため、作業が簡略化されている
- ISCSI
- アクセス・タイプ
- 任意のものを選択
- インスタンス
アタッチするインスタンスを選択

下記の画像はブロック・ボリュームにWindowsとLinuxのインスタンスをアタッチしたものです。
※今回は両方ともISCSIでアタッチしています。

Windowsインスタンスから、ブロック・ボリュームをマウントする
アタッチが完了したらブロック・ボリュームを使用するためにマウントをしていきます。
1.ブロック・ボリュームの画面のISCSIコマンドおよび情報を押下します(3点ドットを押下すると出てきます)。

2.下記の画面に必要な情報があるのでコピーします。

3.リモートデスクトップ接続でインスタンスに接続をします。
4.PowerShellを管理者として実行し、2でコピーした接続のためのコマンドを実行します。
5.サーバー マネージャーを開き、ツールをクリックしてiSCSI イニシエーターを選択します。

6.iSCSIイニシエーターのプロパティダイアログ・ボックスで、探索タブをクリックします。

7.ポータルの探索をクリックします。
8.ブロック・ボリュームのIPアドレスとポートを入力し、OKをクリックします。
9.ターゲットタブをクリックします。
10.検出されたターゲットリージョンで、ボリュームIQNを選択します。
11.接続をクリックし、OKをクリックしてダイアログを閉じます。

12.ファイル サービスとストレージ・サービスを押下し、ディスクを押下するとマウント可能なiSCSIデバイスのリストが出てくるので今回のブロック・ボリュームを選択します。
13.ディスクの初期化を選択し、ナビゲーション通りに進めるとマウントが完了します。
下記のようにブロック・ボリュームが使用できるようになりました。

Linuxインスタンスから、ブロック・ボリュームをマウントする
続いて、Linuxインスタンスからマウントを行います。
1.Windowsと同様に、ブロック・ボリュームの画面のISCSIコマンドおよび情報を押下します。
2.下記の画面に必要な情報があるのでコピーします。

3.インスタンスに接続し、コピーしたアタッチ・コマンドを実行します。
4.マウントポイントを作成します。
5.マウントを実施します。
※今回はWindowsとファイルシステムを揃えるためにntfsにしています。
成功しました!

検証結果
設定が完了したので、共有ストレージとして双方から自由に読み書きすることができるかを確認したところ、ファイルの読み書きはできて共有もされていたのですが、問題が発生しました。
片方のインスタンスでファイルを更新した後、もう一方のインスタンスで見てみると、ファイルが更新されていないことがわかりました。
手動で更新をすると反映がされるのですが、自動では更新がされていない状態です。
これだと、毎回手動で更新する必要があるのでかなり不便です。
また、このまま使用した場合、同時に編集をしたときにデータ破損が発生する可能性があるとの記載もあったので、本番での運用は難しいと感じました。
もし、共有ストレージとして使用したい場合は、クラスタソフト等を導入して使えるようにする必要があります。
OCFS2を使用して、ブロック・ボリュームを共有ストレージとして設定する方法を紹介している記事はこちらにありますので、参考にしてみてください!
ただ、OCFS2はLinux同士の話なので、Windows、Linux間の場合は別のクラスタソフトを使用する必要があります。
まとめ
今回の手順では共有ストレージとして使用するには難しいという残念な結果になってしまいました。
やったことをまとめると
・Windows、Linuxインスタンスを1つずつ作成し、1つのブロック・ボリュームを両方にアタッチした
・WindowsとLinuxでファイルシステムを合わせるためにntfsで統一してマウント
構築をせずに共有ストレージを使用したい場合は、素直にファイルストレージサービスを使用したり、どちらかのインスタンスからもう一方のインスタンスを直接マウントする等の方法が良さそうです。
ブロック・ボリュームをそのまま共有ストレージとして使用できれば嬉しいと思って検証をしましたが、そんなに上手くは行きませんでした。。。
・金額を気にするなら、クラスタソフト等を導入して共有で使用できるように設定をする
・手間をかけたくないならファイルストレージサービスを使用する
・共有ストレージにこだわりがないなら片方のインスタンスからもう一方のインスタンスを直接マウントする
というのが今回の検証をしてみて思った感想です!
最後まで読んで頂き、ありがとうございました!