iSCSI(Internet Small Computer System Interface)は、IPネットワークを通じてストレージデバイスを共有するための標準的なプロトコルです。macOS環境においてリモートストレージをローカルディスクのようにマウントすることで、データの集約管理やストレージ容量の柔軟な拡張が可能になります。本ガイドでは、macOS上でiSCSIイニシエータを構成し、パフォーマンスを最適化するための実践的な手順を解説します。
システム要件とセキュリティ設定の準備
macOSでサードパーティ製のカーネル拡張(KEXT)を動作させるには、システムのセキュリティポリシーを調整する必要があります。特に、署名されていない、あるいはレガシーなドライバを使用する場合は以下の設定が不可欠です。
macOS 10.11 (El Capitan) 以降
System Integrity Protection (SIP) を無効化する必要があります。
# リカバリモード(起動時にCommand+R)で起動し、ターミナルで実行
csrutil disable
macOS 10.10 以前
開発者モードを有効にする必要があります。
sudo nvram boot-args="kext-dev-mode=1"
※設定変更後は必ずシステムを再起動してください。
iSCSIイニシエータの導入と基本操作
パッケージをインストールした後、iscsictlコマンドを使用してターゲットデバイスの管理を行います。
ターゲットの追加とログイン
リモートのiSCSIターゲット(ポータル)を登録し、セッションを開始する基本的なフローは以下の通りです。
# ターゲットの登録(IPアドレスとIQNを指定)
iscsictl add target iqn.2023-10.net.dev-storage:disk-01,10.0.0.50
# 登録済みターゲットの確認
iscsictl list targets
# ターゲットへのログイン(接続開始)
iscsictl login iqn.2023-10.net.dev-storage:disk-01
# LUN(論理ユニット)のステータス確認
iscsictl list luns
接続の解除と削除
メンテナンスや不要になったターゲットの整理を行う手順です。
# ログアウトの実行
iscsictl logout iqn.2023-10.net.dev-storage:disk-01
# リストからターゲットを削除
iscsictl remove target iqn.2023-10.net.dev-storage:disk-01
セキュリティと認証設定
認証が必要な環境では、CHAP(Challenge Handshake Authentication Protocol)を設定します。これにより、不正なアクセスからストレージを保護します。
# CHAP認証情報の構成
iscsictl modify target-config iqn.2023-10.net.dev-storage:disk-01 \
--auth-method=CHAP \
--username=storage_admin \
--password=complex_password_888
パフォーマンスの最適化
ネットワーク越しにディスクI/Oを行うため、スループットと遅延の最適化が重要です。ネットワーク層とプロトコル層の両面から調整を行います。
ネットワークパラメータの微調整
ジャンボフレーム(MTU 9000)の活用や、TCPバッファの拡張により転送効率を向上させます。
# イニシエータ側のMTU設定
iscsictl modify initiator-config --mtu-size=9000
# macOSのTCP受信/送信ウィンドウサイズの拡張
sudo sysctl -w net.inet.tcp.sendspace=1048576
sudo sysctl -w net.inet.tcp.recvspace=1048576
自動接続の設定
OSの起動時に自動的にストレージをマウントさせるには、設定ファイル(plist)を編集します。
パス: /Library/Preferences/com.github.iscsi-osx.iscsid.plist
<!-- 自動ログインターゲットの定義例 -->
<key>AutoConnect</key>
<array>
<string>iqn.2023-10.net.dev-storage:disk-01</string>
</array>
トラブルシューティング
接続が確立できない場合は、ネットワークの導通とログを確認します。
- 疎通確認:
nc -zv [ターゲットIP] 3260でポートの開放状況を確認します。 - ドライバ状態:
kextstat | grep iSCSIでカーネルモジュールが正しくロードされているか確認します。 - ログ分析: 以下のコマンドでiSCSIサブシステムの詳細な動作ログを取得できます。
sudo log show --predicate 'process == "iscsid"' --last 1h
運用のベストプラクティス
本番環境でiSCSIを運用する際は、以下の点に留意してください。
- 専用ネットワークの構築: 通常の業務トラフィックとiSCSIトラフィックをVLANで分離し、帯域競合を防ぎます。
- MPIO(マルチパスI/O)の検討: 冗長性を確保するため、複数の物理経路を介した接続構成を推奨します。
- 定期的なバックアップ: リモートストレージ上のデータであっても、論理障害に備えた定期的なスナップショットやバックアップは必須です。