iSCSI経由でExt4環境のボリュームをマウントする | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

最近は少し規模が大きなシステムの構成となると、大容量ストレージを使うケースが多かったりします。

ストレージがNFSを喋れる場合は、NFS経由でマウントするのが楽だったりもしますが、iSCSI経由でも少しの設定で同様にネットワーク上にあるディスクボリュームをローカルディスクのように扱うことができます(iSCSIは排他ロックができないのでNFSとは用途が違うといえば違いますが)。

ということで、リモートにあるディスクiSCSIを使い、Ext4のファイルシステムのディスクボリュームをマウントする方法のまとめです。

環境は、RedHat6.2を利用しています。

なお、ストレージ側(マウントされる側)の設定は省略しています。

 

 

iSCSIでターゲットとなるディスクボリュームをマウントする

 

まずは、iSCSIを利用するためのパッケージが用意されているか確認する必要があります。

 

# rpm -qa | grep iscsi
iscsi-initiator-utils-6.2.0.872-34.el6.x86_64

 

上記のように、iSCSIイニシエータのパッケージが入っているか確認します。

存在しない場合は、yum経由とかでインストールしておきましょう。

パッケージが入っているとiscsiadmコマンドが利用できますので、それでホスト(ターゲット)となるストレージを探します。

 

# iscsiadm -m discovery -t sendtargets -p 192.168.0.1

 

指定するIPはターゲットなるストレージ側のIPアドレスです。

コマンドと実行後、ストレージ側で公開されているディスクボリュームの情報(IQN)が下記ディレクトリに展開されます。

 

# ls -la /var/lib/iscsi/nodes
合計 20
drwxr-xr-x. 5 root root 4096  7月 30 16:36 2013 .
drwxr-xr-x. 8 root root 4096  6月  7 15:08 2013 ..
drw-------  3 root root 4096  7月 30 16:35 2013 iqn.2001-05.com.foo:0-1cb196-cc3294a2d-f1f000167e151b82-bar1
drw-------  3 root root 4096  7月 30 16:35 2013 iqn.2001-05.com.foo:0-1cb196-f6a294a2d-c02000167ed51b82-bar2

 

ただし、不要(マウントしない)なボリュームもあるでしょうから、それらは事前に削除しておきます。

削除は、上記ディレクトリを直接削除しても良いですし、下記のコマンドでIQNを指定して削除することもできます。

 

# iscsiadm -m node -o delete -T iqn.IQN情報

 

続いて、iSCSI経由でターゲットにログインします。

 

iscsiadm -m node --login

 

ログインできたかどうかは、セッション情報を確認してみるとわかります。

 

# iscsiadm -m session
tcp: [1] 192.168.0.1:3260,1 iqn.2001-05.com.foo:0-1cb196-cc3294a2d-f1f000167e151b82-bar1

 

ターゲットへのログインが成功したら、ローカルのデバイスとして認識されているかを確認します。

 

# ls -l /dev/disk/by-path/
合計 0
lrwxrwxrwx 1 root root  9  8月  9 12:56 2013 ip-192.168.0.1:3260-iscsi-iqn.2001-05.com.foo:0-1cb196-cc3294a2d-f1f000167e151b82-bar1-lun-0 -> ../../sdb
lrwxrwxrwx 1 root root  9  8月  9 12:56 2013 pci-0000:02:00.0-scsi-0:2:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10  8月  9 12:56 2013 pci-0000:02:00.0-scsi-0:2:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10  8月  9 12:56 2013 pci-0000:02:00.0-scsi-0:2:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10  8月  9 12:56 2013 pci-0000:02:00.0-scsi-0:2:0:0-part3 -> ../../sda3

 

上記のように、ターゲット内で見つけたbar1のボリュームがローカルの/dev/sdbにマウントされていることがわかります。

ただし、このデバイス名はOSを再起動したりすると変わる可能性があるため、デバイス名を固定するための設定をしておきます。

固定する方法は、特定のSCSI IDであったら固定のデバイス名にするというものです。

そのため、まずはSCSI IDを調べます。

 

# scsi_id -g /dev/sdb
36019cbd1a29432cc821b157e1600f0f1

 

上記のSCSI IDのデバイスを固定するためのルールを設定ファイルに記述します。

ファイルが存在しない場合は、新規作成します。

 

KERNEL=="sd*", BUS=="scsi", PROGRAM="/lib/udev/scsi_id -g /dev/%k", RESULT=="36019cbd1a29432cc821b157e1600f0f1", NAME="bar1", OWNER:="fuga", GROUP:="hoge", MODE:="0660" 

 

「RESULT==」とかかれたところに、先ほどのSCSI IDを設定しておきます。

NAMEがデバイス名となり、OWNERやGROUPはボリュームをマウントしたときの所有者とグループ名になります。

 

※ うまくいかないときは下記のエントリも参照してみてください。

 

udevを使ってデバイス名の固定する

 

 

ターゲットボリュームのファイルシステムをExt4へフォーマットする

 

ボリュームがサーバーから認識できるようになったら、その領域のファイルシステムをExt4へフォーマットします。

 

# fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0xb1eeb347 で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): m
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   領域を削除する
   l   既知の領域タイプをリスト表示する
   m   このメニューを表示する
   n   新たに領域を作成する
   o   新たに空の DOS 領域テーブルを作成する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   領域のシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-65272, 初期値 1):
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-65272, 初期値 65272):
初期値 65272 を使います

コマンド (m でヘルプ): p

ディスク /dev/sdb: 536.9 GB, 536881397760 バイト
ヘッド 255, セクタ 63, シリンダ 65272
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0xb1eeb347

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1       65272   524297308+  83  Linux

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

 

やっていることは、fdiskコマンドを使って基本パーティションを作成するというものです。

パーティションの作成が終ったら、その領域をExt4でフォーマットしてあげます。

 

# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
32776192 inodes, 131074327 blocks
6553716 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
4001 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

 

フォーマット完了後は、サーバーからマウントして見ましょう。

 

# mount -t ext4 /dev/sdb1 /export

 df -k
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda3             15000964   3383136  10855820  24% /
tmpfs                   961900         0    961900   0% /dev/shm
/dev/sda1               495844     36945    433299   8% /boot
/dev/sdb1            516068876    202520 489651492   1% /export

 

これで、/exportとしてサーバーからマウントできていますので、後はread/writeのテストをしてみれば良いかと思います。

問題なければ、永続的にサーバーからマウントされるようにfstabに情報を追加しておきます。

 

/dev/sdb1             /export              ext4    _netdev        1 1

 

これで、iSCSI経由でリモートにあるディスクボリュームをローカルにあるかのように使うことができます。