0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Oracle Cloud]oci cli とShell でiSCSIでアタッチされたブロック・ボリュームへの接続するコマンド生成してみた (2025/06/05)

Posted at

はじめに

OCI Computeにブロック・ボリュームをアタッチする際、ボリューム・アタッチメント・タイプとして「iSCSI」を選択した場合、ボリュームを使用可能にするために、インスタンスからボリュームを接続してマウントする必要があります。Linux OSにアタッチする場合は、iscsiadmツールを使用してボリュームを登録などを行います。コマンドはOCI Webコンソールで確認可能ですが、今回は、oci cliを使ってiscsiadmツールを使用するコマンドを生成してみました。

前提条件

  • Oracle Linux 8 で稼働するOCI Computeインスタンス
  • Computeインスタンスにoci cliをインストールとセットアップ
  • iSCSIでブロック・ボリュームをアタッチ

ボリューム接続に必要な情報

ボリュームを接続するには、次の情報で、それらを oci cli で取得します

  • iSCSI IPアドレス
  • iSCSIポート番号
  • CHAP資格証明(CHAPを有効にした場合)
  • IQN

作業ステップ

  1. ComputeインスタンスのOCIDの取得
  2. インスタンスにアタッチされているブロック・ボリュームのOCIDを取得
  3. ボリューム接続に必要な情報
  4. iSCSIコマンド生成
  5. /etc/fstab の通りにマウント

Shell スクリプトの生成

#!/bin/bash

# コンパートメントOCIDのセット
COMPARTMENT_ID="ocid1.compartment.oc1..aaaaaaaa"
# ホスト名の取得
OCIHOST=$(hostname)

# 1. インスタンスのOCIDを取得
INSTANCE_OCID=$(oci compute instance list \
  --compartment-id $COMPARTMENT_ID \
  --display-name $OCIHOST \
  --lifecycle-state RUNNING \
  --profile default \
  --query "data[0].id" \
  --raw-output)

echo "Instance OCID: $INSTANCE_OCID"

# 2. インスタンスにアタッチされているBlock VolumeのOCIDを取得
# アタッチされているブロック・ボリュームの1つ目のみ対応

VOLUME_ATTACHMENT_OCID=$(oci compute volume-attachment list \
  --compartment-id $COMPARTMENT_ID \
  --instance-id $INSTANCE_OCID \
  --profile default \
  --query "data[0].id" \
  --raw-output)

echo "ATTACHMENT OCID: $VOLUME_ATTACHMENT_OCID"

# 3. ボリューム接続に必要な情報

ISCSI_IP=$(oci compute volume-attachment get \
  --volume-attachment-id $VOLUME_ATTACHMENT_OCID \
  --profile default \
  --query "data.ipv4" \
  --raw-output)

ISCSI_IQN=$(oci compute volume-attachment get \
  --volume-attachment-id $VOLUME_ATTACHMENT_OCID \
  --profile default \
  --query "data.iqn" \
  --raw-output)

ISCSI_PORT=$(oci compute volume-attachment get \
  --volume-attachment-id $VOLUME_ATTACHMENT_OCID \
  --profile default \
  --query "data.port" \
  --raw-output)

# 4. iSCSIコマンド生成
echo "sudo iscsiadm -m node -o new -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT"
echo "sudo iscsiadm -m node -o update -T $ISCSI_IQN -n node.startup -v automatic"
echo "sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT --login"
sudo iscsiadm -m node -o new -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT
sudo iscsiadm -m node -o update -T $ISCSI_IQN -n node.startup -v automatic
sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT --login"

# 5. ファイルシステムのマウント
sudo mount -a

ボリュームからの切断

接続と同じように切断のコマンドも生成可能です。

#!/bin/bash

# コンパートメントOCIDのセット
COMPARTMENT_ID="ocid1.compartment.oc1..aaaaaaaa"
# ホスト名の取得
OCIHOST=$(hostname)

# 1. インスタンスのOCIDを取得
INSTANCE_OCID=$(oci compute instance list \
  --compartment-id $COMPARTMENT_ID \
  --display-name $OCIHOST \
  --lifecycle-state RUNNING \
  --profile default \
  --query "data[0].id" \
  --raw-output)

echo "Instance OCID: $INSTANCE_OCID"

# 2. インスタンスにアタッチされているBlock VolumeのOCIDを取得
# アタッチされているブロック・ボリュームの1つ目のみ対応

VOLUME_ATTACHMENT_OCID=$(oci compute volume-attachment list \
  --compartment-id $COMPARTMENT_ID \
  --instance-id $INSTANCE_OCID \
  --profile default \
  --query "data[0].id" \
  --raw-output)

echo "ATTACHMENT OCID: $VOLUME_ATTACHMENT_OCID"

# 3. ボリューム接続に必要な情報

ISCSI_IP=$(oci compute volume-attachment get \
  --volume-attachment-id $VOLUME_ATTACHMENT_OCID \
  --profile default \
  --query "data.ipv4" \
  --raw-output)

ISCSI_IQN=$(oci compute volume-attachment get \
  --volume-attachment-id $VOLUME_ATTACHMENT_OCID \
  --profile default \
  --query "data.iqn" \
  --raw-output)

ISCSI_PORT=$(oci compute volume-attachment get \
  --volume-attachment-id $VOLUME_ATTACHMENT_OCID \
  --profile default \
  --query "data.port" \
  --raw-output)

# 4. iSCSIコマンド生成
echo "iqn= $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT"
echo "sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT -u"
echo "sudo iscsiadm -m node -o delete -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT"

# 5. ファイルシステムのアンマウントと切断コマンドの実行
sudo umount /mnt/bv1
sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT -u
sudo iscsiadm -m node -o delete -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT

おわりに

Shellスクリプトでブロック・ボリュームへの接続操作ができるようになりました。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?