はじめに
本記事では、OCI Block Volume について以下の点を整理していきます。
- ブロックボリュームのボリュームアタッチメントタイプについて
- アタッチメントタイプにおける性能差
ブートボリュームのアタッチメントタイプにおける性能差は割愛させていただきます。
ボリュームアタッチメントタイプについて
ブロックボリュームをコンピュートインスタンスにアタッチする際のタイプは2つあります。
- 準仮想化:VMで使用可能な仮想化アタッチメント
- iSCSI:ボリュームとアタッチされたインスタンス間の通信に使用されるTCP/IPベースの規格
各アタッチメントタイプを選択できるかどうかは、イメージやインスタンスタイプによって変わります。(※2026年1月時点)
下記内容から、ベア・メタル・インスタンスは iSCSI のみ、それ以外はどちらも可能 と理解出来ます。
準仮想化アタッチメントは、次のタイプのVMインスタンスにボリュームをアタッチする際に選択できるオプションです
- プラットフォーム・イメージから起動されたVMインスタンスの場合、2017年12月以降に公開されたLinuxベース・イメージ、および2018年2月以降に公開されたWindowsイメージに対してこのオプションを選択できます
- カスタム・イメージから起動されたVMインスタンスの場合、ボリューム・アタッチメント・タイプは、カスタム・イメージが作成されたVMからのボリューム・アタッチメント・タイプに基づいています
ブロック・ボリュームを次のいずれかのタイプのインスタンスに接続する際に選択できるオプションは、iSCSIアタッチメントのみです。
- ベア・メタル・インスタンス
- 2018年2月より前に公開されたWindowsイメージに基づくVMインスタンス
- 2017年12月より前に公開されたLinuxイメージに基づくVMインスタンス
どちらを選ぶべきか
第一は求めるパフォーマンスがでるかどうか
一番は、求める IOPS が出るかどうかです。
公式ドキュメントには、以下記載のように iSCSI の方が準仮想化よりも IOPS 性能が高くなると記載があります。
IOPSパフォーマンスは、iSCSIアタッチメントのほうが準仮想化アタッチメントよりも高くなります
また、準仮想化の場合、ブロックボリュームサイズが大きいと最大 IOPS パフォーマンスが低下すると記載があります。
ブロック・ボリュームが比較的大きい場合にこれを行うと、仮想化のオーバーヘッドにより最大IOPSパフォーマンスが低下します
が、これだけを鵜呑みにせず検証は必要だと考えています。
というのも、以下公式ドキュメントに記載のあるパフォーマンス結果はアタッチメントタイプが明確にされていません。
また、以下公式ドキュメントに記載のあるように、上記ドキュメントのパフォーマンス結果は未フォーマットのデータ・ボリュームに対するものです。
加えて、パフォーマンスSLAの制限も厳しいからです。
このトピックで説明するパフォーマンス結果は、未フォーマットのデータ・ボリュームに対するものです。使用されるファイルシステムに基づいてパフォーマンスが低下する可能性があります
ボリューム当たりのIOPSおよびインスタンス当たりのIOPSに関するブロック・ボリュームのパフォーマンスSLAは、超高パフォーマンスの場合は16コア以上のVM、バランスおよびより高いパフォーマンスの場合は8コア以上のVMに対して、ブロック・ボリューム・サービス・レベルで、iSCSIボリューム・アタッチメントを使用した未フォーマットのRAWボリュームと、準仮想化ボリューム・アタッチメントに適用されます
パフォーマンスが問題ないなら管理しやすさ
パフォーマンスに差異がないのであれば、手間の少ない準仮想化で良いと考えています。
誤差の範囲ではありますが、iSCSI はアタッチ・デタッチの際に追加コマンドが必要になります。
性能検証 ( Oracle Linux )
事前条件
実際に検証していきましょう。
今回の構成は以下の通りです。
- 環境構築コードは以下 GitHub にあげてますので、よかったら除いてみてください
コンピュートインスタンスの詳細は以下の通りです。
- VM.Standard.E5.Flex
- 8 ocpu
- 12 GB
ブロックボリュームの詳細は以下の通りです。
- パフォーマンスレベル:バランス(10 VPU)
- 100GB(準仮想化)
- 100GB(iSCSI)
また、ブロックボリュームのパフォーマンス及びシェイプ固有のパフォーマンスは以下の通りです。
| 柔軟なパフォーマンス・レベル | ボリューム・パフォーマンス・ユニット(VPU) | IOPS/GB | ボリューム当たりの最大IOPS | 最大IOPSのサイズ(GB) | KBPS/GB | ボリューム当たりの最大MBPS |
|---|---|---|---|---|---|---|
| バランス | 10 | 60 | 25,000 | 417 | 480 | 480 |
| シェイプ | OCPU | メモリー(GB) | 最大ネットワーク帯域幅 | インスタンス当たりの最大IOPS | インスタンス(ブロック・ボリューム)当たりの最大スループット |
|---|---|---|---|---|---|
| VM.Standard.E5.Flex | 最小1 OCPU 最大90 OCPU |
最小1GB 最大1049GB |
1 OCPU当たり1Gbps 最大40Gbps |
20,000 *最大ネットワーク帯域幅(Gbps) 最大600,000 |
120MB/秒*最大ネットワーク帯域幅(Gbps) 最大4,800MB/秒 |
事前準備
計測には fio を使用します。
せっかくなのでインストールから順を追っていきましょう。
以下コマンドを実行し、fio をインストールします。
$ sudo dnf install fio -y
~省略~
$ fio -v
fio-3.35
検証に使う設定ファイルは以下の通りです。
[global]
bs=4k # 1回のI/Oで読み書きするデータサイズ(4KB)
buffered=0 # OSのキャッシュを使わない(生のディスクにアクセス)
direct=1 # ダイレクトI/Oを使用(buffered=0 と同じ意味合い)
iodepth=8 # 同時に発行するI/Oの数(キューの深さ)
ioengine=libaio # Linuxの非同期I/Oエンジンを使用
norandommap # ランダムI/O時に事前のアクセスマップを作らない
randrepeat=0 # 毎回同じランダムパターンにしない
rw=randrw # ランダムリード+ランダムライト
rwmixread=70 # 読み70%、書き30%
size=1G # 各ジョブが使うテストサイズ
time_based # 時間ベースで負荷をかける
runtime=60 # 本計測 60秒
ramp_time=30 # 最初の30秒はウォームアップ(結果に含めない)
group_reporting # 複数ジョブの結果をまとめて表示する
#####################################
# 準仮想化ディスク(先に実行)
#####################################
[para-job]
new_group # レポートのグループ化
name=paravirtualized-job # このジョブの名前
directory=/mnt/para01 # テスト実行ディレクトリ
numjobs=16 # 同時に実行するジョブ数 (size*numjobsのファイルが作成される)
#####################################
# iSCSI(後に実行)
#####################################
[iscsi-job]
new_group # レポートのグループ化
name=iscsi-job # このジョブの名前
directory=/mnt/iscsi01 # テスト実行ディレクトリ
numjobs=16 # 同時に実行するジョブ数 (size*numjobsのファイルが作成される)
検証ファイルのポイント
このfio設定の目的
- 本番に近いランダムI/O負荷を再現する
- 準仮想化ディスクとiSCSIのIOPS性能を公平に比較する
- OSキャッシュや初期ブレの影響を排除し、安定した値を取得する
[global] セクションの意図(全ジョブ共通)
I/Oサイズと種類
-
bs=4k- 多くの業務システム(DB、アプリ、OS)が使う4KB単位のI/O
- IOPS測定の基本サイズ
-
rw=randrw- ランダムリードとランダムライトを混在
- 実運用に近いアクセスパターン
-
rwmixread=70- 読み取り70%、書き込み30%
- DBや業務アプリでよくある比率を想定
OSキャッシュの影響を排除
direct=1-
buffered=0- OSのページキャッシュを使わず、ストレージそのものの性能を測定
- キャッシュヒットによる見かけ上の高速化を防ぐ
並列度(負荷の強さ)
-
iodepth=8- 1ジョブあたり同時に投げるI/O数
- SSDやiSCSIの性能を引き出しやすい値
-
numjobs=16- 同時に動くジョブ(スレッド)数
I/Oエンジン
-
ioengine=libaio- Linuxの非同期I/Oを使用
- 高負荷時の実運用に近い動作
ランダム性の制御
-
norandommap- ランダムI/Oの事前マップを作らない
- メモリ消費を抑え、実運用に近づける
-
randrepeat=0- 毎回異なるランダムパターンでアクセス
- キャッシュや予測最適化の影響を避ける
計測方法
-
time_based- ファイルサイズではなく時間で負荷を制御
- ストレージ比較では必須
-
runtime=60- 本計測時間は60秒
-
ramp_time=30- 最初の30秒はウォームアップ
- キャッシュや内部最適化が落ち着いた後のみを計測
テストデータサイズ
-
size=1GB- 各ジョブが使うテストファイルサイズ
- キャッシュに収まらない十分なサイズを確保
準仮想化ディスク(para-job)の意図
-
directory=/mnt/para01- 準仮想化ディスク専用のマウントポイント
- iSCSIと完全に分離
-
numjobs=16- 並列アクセスを再現
iSCSI(iscsi-job)の意図
-
directory=/mnt/iscsi01- iSCSI専用のマウントポイント
- 準仮想化ディスクとは完全に独立
-
numjobs=16- 準仮想化ディスクと同一条件で比較
計測
実際に計測していきます。
OS にログインし、任意のフォルダに fio ファイルを作成し、以下コマンドで実行します。
$ pwd
/home/opc
$ ls -al
-rw-r--r-- 1 opc opc 1877 12月 31 23:30 readwrite.fio
$ fio readwrite.fio
結果は以下の通りです。
今回の条件では、特段差異はありませんでした。
テスト時のbsサイズを大きくすれば少しでも優劣がつくかもしれません。
(いずれ検証したいなと思っています)
$ fio readwrite.fio
paravirtualized-job: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=8
...
iscsi-job: (g=1): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=8
...
fio-3.35
Starting 32 processes
paravirtualized-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
para-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
iscsi-job: Laying out IO file (1 file / 1024MiB)
Jobs: 32 (f=32): [m(32)][9.8%][r=40.1MiB/s,w=17.1MiB/s][r=10.3k,w=4366 IOPS][eta 13m:53s]
+ paravirtualized-job: (groupid=0, jobs=16): err= 0: pid=12171: Thu Jan 1 15:12:48 2026
read: IOPS=5250, BW=20.5MiB/s (21.5MB/s)(1231MiB/60029msec)
slat (nsec): min=3705, max=91681, avg=11474.37, stdev=3458.40
clat (usec): min=468, max=144003, avg=18593.59, stdev=9347.70
lat (usec): min=477, max=144016, avg=18605.06, stdev=9347.39
clat percentiles (usec):
| 1.00th=[ 898], 5.00th=[ 3523], 10.00th=[ 6521], 20.00th=[10028],
| 30.00th=[13435], 40.00th=[16581], 50.00th=[18744], 60.00th=[20579],
| 70.00th=[22414], 80.00th=[25822], 90.00th=[31327], 95.00th=[33817],
| 99.00th=[38536], 99.50th=[46400], 99.90th=[68682], 99.95th=[77071],
| 99.99th=[98042]
bw ( KiB/s): min=18034, max=23766, per=100.00%, avg=21029.05, stdev=65.96, samples=1909
+ iops : min= 4508, max= 5940, avg=5256.39, stdev=16.48, samples=1909
write: IOPS=2248, BW=8995KiB/s (9210kB/s)(527MiB/60029msec); 0 zone resets
slat (nsec): min=4567, max=68545, avg=13053.44, stdev=3784.32
clat (usec): min=552, max=95845, avg=13454.40, stdev=8721.50
lat (usec): min=563, max=95854, avg=13467.45, stdev=8721.58
clat percentiles (usec):
| 1.00th=[ 1139], 5.00th=[ 2147], 10.00th=[ 3130], 20.00th=[ 5276],
| 30.00th=[ 7635], 40.00th=[10159], 50.00th=[12780], 60.00th=[14877],
| 70.00th=[17171], 80.00th=[20055], 90.00th=[24773], 95.00th=[28705],
| 99.00th=[38536], 99.50th=[44303], 99.90th=[62653], 99.95th=[69731],
| 99.99th=[81265]
bw ( KiB/s): min= 6280, max=11833, per=100.00%, avg=9006.65, stdev=66.75, samples=1909
+ iops : min= 1570, max= 2958, avg=2251.29, stdev=16.68, samples=1909
lat (usec) : 500=0.01%, 750=0.33%, 1000=0.74%
lat (msec) : 2=2.05%, 4=5.17%, 10=17.24%, 20=38.13%, 50=35.98%
lat (msec) : 100=0.37%, 250=0.01%
cpu : usr=0.15%, sys=0.68%, ctx=424412, majf=0, minf=582
IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=100.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.1%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=315159,134964,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=8
+ iscsi-job: (groupid=1, jobs=16): err= 0: pid=12187: Thu Jan 1 15:12:48 2026
read: IOPS=5244, BW=20.5MiB/s (21.5MB/s)(1230MiB/60028msec)
slat (nsec): min=3475, max=99442, avg=7494.14, stdev=3080.78
clat (usec): min=397, max=130421, avg=17038.12, stdev=9375.32
lat (usec): min=410, max=130426, avg=17045.61, stdev=9375.18
clat percentiles (usec):
| 1.00th=[ 652], 5.00th=[ 2245], 10.00th=[ 4621], 20.00th=[ 8455],
| 30.00th=[11863], 40.00th=[14615], 50.00th=[17171], 60.00th=[19268],
| 70.00th=[21365], 80.00th=[24249], 90.00th=[29754], 95.00th=[32637],
| 99.00th=[37487], 99.50th=[43254], 99.90th=[67634], 99.95th=[77071],
| 99.99th=[94897]
bw ( KiB/s): min=17664, max=24496, per=100.00%, avg=21006.08, stdev=80.09, samples=1908
+ iops : min= 4416, max= 6124, avg=5250.83, stdev=20.02, samples=1908
write: IOPS=2241, BW=8968KiB/s (9184kB/s)(526MiB/60028msec); 0 zone resets
slat (nsec): min=3696, max=80873, avg=8792.77, stdev=3339.25
clat (usec): min=484, max=178669, avg=17195.43, stdev=11122.90
lat (usec): min=494, max=178674, avg=17204.23, stdev=11122.91
clat percentiles (usec):
| 1.00th=[ 1090], 5.00th=[ 2573], 10.00th=[ 4015], 20.00th=[ 7439],
| 30.00th=[ 10814], 40.00th=[ 13435], 50.00th=[ 15795], 60.00th=[ 18482],
| 70.00th=[ 21627], 80.00th=[ 25297], 90.00th=[ 30802], 95.00th=[ 35914],
| 99.00th=[ 50070], 99.50th=[ 60556], 99.90th=[ 88605], 99.95th=[ 99091],
| 99.99th=[135267]
bw ( KiB/s): min= 6504, max=11648, per=100.00%, avg=8977.25, stdev=61.42, samples=1908
+ iops : min= 1626, max= 2912, avg=2244.01, stdev=15.35, samples=1908
lat (usec) : 500=0.12%, 750=1.09%, 1000=0.91%
lat (msec) : 2=1.99%, 4=5.00%, 10=16.50%, 20=38.87%, 50=35.01%
lat (msec) : 100=0.52%, 250=0.02%
cpu : usr=0.16%, sys=0.48%, ctx=425068, majf=0, minf=582
IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=100.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.1%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=314833,134566,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=8
Run status group 0 (all jobs):
READ: bw=20.5MiB/s (21.5MB/s), 20.5MiB/s-20.5MiB/s (21.5MB/s-21.5MB/s), io=1231MiB (1291MB), run=60029-60029msec
WRITE: bw=8995KiB/s (9210kB/s), 8995KiB/s-8995KiB/s (9210kB/s-9210kB/s), io=527MiB (553MB), run=60029-60029msec
Run status group 1 (all jobs):
READ: bw=20.5MiB/s (21.5MB/s), 20.5MiB/s-20.5MiB/s (21.5MB/s-21.5MB/s), io=1230MiB (1290MB), run=60028-60028msec
WRITE: bw=8968KiB/s (9184kB/s), 8968KiB/s-8968KiB/s (9184kB/s-9184kB/s), io=526MiB (551MB), run=60028-60028msec
Disk stats (read/write):
sdb: ios=481235/206655, merge=0/0, ticks=8771827/2735393, in_queue=11507220, util=90.02%
sdc: ios=481135/205996, merge=9/9, ticks=8012870/3492106, in_queue=11504976, util=83.15%
おわりに
本記事では、OCI Block Volume のアタッチメントタイプについてと、性能差についてまとめました。
コンピュートとブロックボリューム間の IOPS は少々おざなりになりがちですが、ごくたまにボトルネックとなったりするので、これを機に見直していきたいと思います。
🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。
番外編
カスタムブートボリュームサイズを利用した際の注意点
Oracle 提供イメージのブートボリュームのサイズは、各OSにおいてデフォルトサイズが決まっています。
- Linux ベース:46.6 GB
- Windows ベース:47.0 GB
初回起動時に、カスタムイメージブートボリュームサイズという機能を使ってブートボリュームのサイズを変更することが可能です。(50 GB ~ 32 TB)
※ もちろん起動後のオンライン拡張も可能です
2021 年 10 月より前に公開された Windows Server 2012 R2 Datacenter イメージおよび Windows プラットフォーム イメージの場合、カスタム ブート ボリュームのサイズは、イメージの既定のブート ボリュームのサイズまたは 256 GB のいずれか大きい方よりも大きくする必要があります。
ただしその場合、ルート(Linuxイメージ)もしくはシステム(Windowsイメージ)のパーティションを拡張する必要があります。
Oracle Linux
ブートボリュームを 100 GB として起動した直後のディスク情報です。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk ★ ボリュームサイズは変更されている
├─sda1 8:1 0 100M 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 44.5G 0 part ★ パーティションサイズは変更されていない
├─ocivolume-root 252:0 0 29.5G 0 lvm /
└─ocivolume-oled 252:1 0 15G 0 lvm /var/oled
- 起動後に拡張した場合は、再スキャンしないとOSから変更後のボリュームサイズは認識されないため再スキャンする必要があります
ファイルシステムサイズは変更されていません。
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ocivolume-root 30G 9.8G 20G 33% /
パーティションサイズも変更されていません。
$ sudo parted /dev/sda print
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra 111987916 blocks) or continue with the current setting?
Fix/Ignore? ignore
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat16 EFI System Partition boot, esp
2 106MB 2253MB 2147MB xfs
3 2253MB 50.0GB 47.8GB lvm
そのため、パーティションサイズを変更し、ファイルシステムサイズを変更する必要があります。
Oracle Linux の場合は、oci-utils を使って、ルートディレクトリのパーティションサイズ及びファイルシステムサイズを、現在のボリュームサイズまで拡張できます。
-
oci-utilsは Oracle Linux 以外のディストリビューションでは利用できません
これらのユーティリティは他のディストリビューションでは利用できません。
拡張した結果は以下の通りです。
$ sudo /usr/libexec/oci-growfs
Volume Group: ocivolume
Volume Path: /dev/ocivolume/root
Mountpoint Data
---------------
mountpoint: /
source: /dev/mapper/ocivolume-root
filesystem type: xfs
source size: 29.4G
type: lvm
size: 29.5G
physical devices: ['/dev/sda3']
physical volumes: ['/dev/sda', '/dev/sda']
partition number: ['3']
volume group name: ocivolume
volume group path: /dev/ocivolume/root
Partition dry run expansion "/dev/sda3" succeeded.
CHANGE: partition=3 start=4401152 old: size=93325312 end=97726463 new: size=205314015 end=209715166
Expanding partition /dev/sda3: Confirm? [y/N] y
Partition expand expansion "/dev/sda3" succeeded.
update-partition set to true
FLOCK: try exec open fd 9, on failure exec exits this program
FLOCK: /dev/sda: obtained exclusive lock
resizing 3 on /dev/sda using resize_sfdisk_gpt
209715200 sectors of 512. total size=107374182400 bytes
## sfdisk --unit=S --dump /dev/sda
label: gpt
label-id: 7F04A6B5-D32F-4829-889A-5421AF210C5D
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 97727250
sector-size: 512
/dev/sda1 : start= 2048, size= 204800, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=35B86FE3-B29F-4CDD-9892-9CCFB5D5A3B7, name="EFI System Partition"
/dev/sda2 : start= 206848, size= 4194304, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=35B296B8-A372-41B1-99D1-6BB8305FFBE1
/dev/sda3 : start= 4401152, size= 93325312, type=E6D6D379-F507-44C2-A23C-238F2A3DF928, uuid=5C0DE0D3-2D76-4218-A2A5-89D948113162
padding 33 sectors for gpt secondary header
max_end=209715166 tot=209715200 pt_end=97726463 pt_start=4401152 pt_size=93325312
resize of /dev/sda returned 0.
FLOCK: /dev/sda: releasing exclusive lock
CHANGED: partition=3 start=4401152 old: size=93325312 end=97726463 new: size=205314015 end=209715166
Extending /dev/sda3 succeeded.
Device /dev/sda3 extended successfully.
Logical volume /dev/ocivolume/root extended successfully.
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ocivolume-root 83G 11G 73G 13% /
Windows Server
ブートボリュームを 100 GB として起動した直後のディスク情報です。
Windows Server の場合は、自動で拡張されていました。
- 起動後にリサイズした場合は、手動で拡張する必要があります
iSCSI 接続を Oracle Cloud Agent による自動接続とした際の注意点
Windows Server
iSCSI 接続を手動で実施する場合、コンソール上では以下のコマンドを実行するようにアナウンスされます。
- 以下コマンドのターゲットIP 及び iSCSI修飾名(IQN) はご自身の環境で変わります
- 以下コマンドは CHAP有りのコマンドです
# ① iSCSI Initiator サービス(msiscsi)を自動起動に設定
Set-Service -Name msiscsi -StartupType Automatic
# ② iSCSI Initiator サービスを起動
Start-Service msiscsi
# ③ iSCSI ターゲットポータル(接続先IP)を登録
iscsicli.exe QAddTargetPortal 169.254.2.2
# ④ 指定した iSCSI ターゲットにログイン(接続)
iscsicli.exe QLoginTarget iqn.2015-12.com.oracleiaas:edd52ed3-14a2-400d-96c1-9a4fb89dae90 ocid1.volume.oc1.ap-tokyo-1.abxhiljrfvjbr6ttyaqqqcpxxueusthjic2vyfdkpqea3uehflo3tlcuuq6q 4kphZeqcD5pxVLzc
# ⑤ OS 起動時に自動で iSCSI ログインする永続接続を設定
iscsicli.exe PersistentLoginTarget iqn.2015-12.com.oracleiaas:edd52ed3-14a2-400d-96c1-9a4fb89dae90 * 169.254.2.2 3260 * * * 0x8 * * * * * ocid1.volume.oc1.ap-tokyo-1.abxhiljrfvjbr6ttyaqqqcpxxueusthjic2vyfdkpqea3uehflo3tlcuuq6q 4kphZeqcD5pxVLzc 1 * *
Oracle Cloud Agent で自動接続する場合に上記コマンドすべてを実行しているのかと思っていましたが、実際はターゲットポータルの登録までで、iSCSI 自動接続設定は入っていません。
つまり、①〜③まで実行してくれるということです。
実際の確認結果は以下の通りです。
iSCSI サービスですが、自動起動にはなっていました。
PS C:\WINDOWS\system32> Get-Service msiscsi | Select-Object Name, Status, StartType
Name Status StartType
---- ------ ---------
msiscsi Running Automatic
「サーバーマネージャー」→「ツール」→「iSCSI イニシエーター」→「ターゲット」を見てみると、登録はされていました。
ただし、接続はされていません。この状態で再起動をしてみましたが変わらずでした。
また、接続した後、再起動すると接続がされないことを確認しています。
そのため、上記⑤コマンドを実行する必要があります。

Oracle Linux
Oracle Linux は再起動後も接続されているので問題ありませんでした。
$ sudo iscsiadm -m session
tcp: [1] 169.254.2.2:3260,1 iqn.2015-12.com.oracleiaas:6c296572-5ce9-4b2d-bdba-9ebfe35ecda2 (non-flash)
ブロックボリュームをアタッチしたらマウントを忘れずに
- ISCSI 接続の場合は、以降の手順の前に iSCSI コマンドで接続する必要があります
ブロックボリュームを新規でアタッチした場合は、マウントを忘れずに行いましょう。
Oracle Linux
100 GB のブロックボリュームをアタッチした直後のディスク情報です。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 100M 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 97.9G 0 part
├─ocivolume-root 252:0 0 82.9G 0 lvm /
└─ocivolume-oled 252:1 0 15G 0 lvm /var/oled
sdb 8:16 0 100G 0 disk ★ 追加したボリューム
パーティション情報を確認します。
まだ、パーティションが作成されていないことが確認できます。
$ sudo parted -l
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sda: 107GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 1049kB 106MB 105MB fat16 EFI System Partition boot, esp
2 106MB 2253MB 2147MB xfs
3 2253MB 107GB 105GB lvm
エラー: /dev/sdb: ディスクラベルが認識できません。
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sdb: 107GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: unknown
ディスクフラグ:
そのためまずはパーティションを以下のコマンドで作成していきます。
$ sudo parted -s -a optimal /dev/sdb \
mklabel gpt \
mkpart primary 0% 100%
改めて確認すると無事パーティションが作成されています。
$ sudo parted -l
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sda: 107GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 1049kB 106MB 105MB fat16 EFI System Partition boot, esp
2 106MB 2253MB 2147MB xfs
3 2253MB 107GB 105GB lvm
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sdb: 107GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 1049kB 107GB 107GB primary
ブートボリュームは LVM で構成されていますが、ブロックボリュームは割愛します。
# 物理ボリューム
$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ocivolume lvm2 a-- <97.90g 0
# ボリュームグループ
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
ocivolume 1 2 0 wz--n- <97.90g 0
# 論理ボリューム
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
oled ocivolume -wi-ao---- 15.00g
root ocivolume -wi-ao---- <82.90g
続いてファイルシステムを作成します。
$ sudo mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553472 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
= exchange=0
data = bsize=4096 blocks=26213888, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1, parent=0
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
続いてマウントしていきます。
はじめにマウントポイントを作成します。
$ sudo mkdir /mnt/vol01
$ sudo chown opc:opc /mnt/vol01
UUID を確認します。
$ lsblk -o +UUID
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS UUID
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 100M 0 part /boot/efi AE3C-806E
├─sda2 8:2 0 2G 0 part /boot dd88872e-0527-4193-8282-b8281f1ae6fd
└─sda3 8:3 0 97.9G 0 part b4rRaD-zOhD-IHdf-NX7O-HCsa-Zmvq-2eJUqC
├─ocivolume-root 252:0 0 82.9G 0 lvm / 3aa327e4-ce2d-4637-9f24-7687e2c0e8b9
└─ocivolume-oled 252:1 0 15G 0 lvm /var/oled 1a046f0c-bfff-4334-baf3-32b6db923a8a
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part 39cc6386-852e-4b1e-aada-c3cc0941f8d8
/etc/fstab に以下の記述を追加し、起動時に自動でマウントされるように設定します。
UUID=39cc6386-852e-4b1e-aada-c3cc0941f8d8 /mnt/vol01 xfs defaults,_netdev,nofail 0 2
最後に再マウントを実行します。
$ sudo systemctl daemon-reload
$ sudo mount -a
マウントされているのが確認できました。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 5.7G 0 5.7G 0% /dev/shm
tmpfs 2.3G 8.9M 2.3G 1% /run
efivarfs 256K 21K 231K 9% /sys/firmware/efi/efivars
/dev/mapper/ocivolume-root 83G 11G 73G 13% /
/dev/sda2 2.0G 824M 1.2G 42% /boot
/dev/mapper/ocivolume-oled 15G 250M 15G 2% /var/oled
/dev/sda1 100M 7.2M 93M 8% /boot/efi
tmpfs 1.2G 0 1.2G 0% /run/user/989
tmpfs 1.2G 0 1.2G 0% /run/user/1000
/dev/sdb1 100G 746M 100G 1% /mnt/vol01
- 上記の手順では、初マウントになるため権限は
root:rootになってしまいます - そのため、初マウント後に
chownするほうが無難です
Windows Server
100 GB のブロックボリュームをアタッチした直後のディスク情報を確認します。
「Win+R」で「ファイル名を指定して実行」を展開し、「diskmgmt.msc」を実行します。

アタッチしたディスクがオフラインになっているので、対象のディスクを右クリックし「オンライン」をクリックします。

対象のディスクにチェックが付いており、パーティションスタイルが GPT になっていることを確認し「OK」をクリックします。

これで初期化が完了し、オンラインになりました。
続いてボリュームを作成していきます。
バーのところを右クリックし「新しいシンプルボリューム」をクリックします。

ボリュームのサイズを設定します。
今回はディスクすべてを使うので、デフォルトのまま「次へ」をクリックします。

パーティションに割り当てる「ドライブレター」or「ドライブパス」を設定します。
デフォルトのままで「次へ」をクリックします。

パーティションのフォーマットスタイルを選択します。
デフォルトのままで「次へ」をクリックします。

確認画面が表示されるので、問題なければ「終了」をクリックします。

上記 GUI 操作の CLI 操作は以下の通りです。
Administrator 権限で powershell を起動して実行してください。
Initialize-Disk -Number 1 -PartitionStyle GPT
New-Partition -DiskNumber 1 -DriveLetter D -UseMaximumSize
Format-Volume -DriveLetter D -FileSystem NTFS
参考資料
リファレンス
- Amazon EBS ボリュームのベンチマーク - Amazon EBS ユーザーガイド
- ブロック・ボリュームの概要 - Oracle Cloud Infrastructureドキュメント
- ブロック・ボリューム・パフォーマンス - Oracle Cloud Infrastructureドキュメント
- Linuxベースのインスタンスでのブロック・ボリューム・パフォーマンス・テストのサンプルFIIコマンド - Oracle Cloud Infrastructureドキュメント
- ブロック・ボリュームへの接続 - Oracle Cloud Infrastructureドキュメント
- iSCSIでアタッチされたブロック・ボリュームへの接続 - Oracle Cloud Infrastructureドキュメント
- 自動的に再起動するためのLinux iSCSIサービスの更新 - Oracle Cloud Infrastructureドキュメント
- ブロック・ボリューム管理プラグインの有効化 - Oracle Cloud Infrastructureドキュメント
- ブート・ボリュームのパーティションの拡張 - Oracle Cloud Infrastructureドキュメント
- fio(1) - Linux man page
ブログ
- 知らないと損する!EC2のCPU性能の真実 - DevelopersIO
- Oracle Cloudのボリュームアタッチメントタイプの性能差 - Qiita
- CrystalDiskMarkでWindowsの性能ベンチマークを試す - Serverworks ENGINEER BLOG
- fioを使ってストレージの性能を計測してみた - Qiita
- Linuxパフォーマンス調査などで使うコマンドメモ - Qiita
- Linuxディスク性能測定完全ガイド:ddからfioまで - acoustype.com
- ブロックストレージデバイスのパフォーマンスをテストする
- FIO を使用した NFS ベンチマークのベストプラクティス 2024
- EBSとEFSのパフォーマンスをfioで比較してみた - DevelopersIO
- OCI Windowsインスタンスへブロック・ボリュームの追加 - Qiita
- OCI Computeでブロックボリュームをマウントする - Qiita
- OCI Computeでブロックボリュームをマウントする(LVM不使用編) - Qiita
- 【OCI】ブロックボリュームのアタッチ手順とアタッチタイプについて! - techblog APC
- Oracle Cloud Infrastructureブロック・ボリューム・バックアップDeep Dive - Qiita
- AWS/Azure 経験者がはじめる OCI 入門 ~ Compute編 ~ - Qiita
- ブロック・ボリュームをiSCSIでアタッチする - Qiita
- ブロックボリューム概要 - SpeakerDeck
- Oracle Cloud Infrastructureでボリュームのオンラインリサイズが可能になったよ - Qiita
- Linux基礎(パーティションとファイルシステムの作成) - Qiita
- cloud-initを使ったLinux OSの初期設定 - Qiita
- Windows Custom Startup Scripts and Cloud-Init on Oracle Cloud Infrastructure - Oracle Cloud Infrastructure Blog
- Cloudbase-init in OCI – join a computer to a domain
- Azure VM の日本語化
- ボリュームのサイズアップをWindows Serverのインスタンスでやってみた - Cloudii
- iSCSI : イニシエーターの設定





