最近は少し規模が大きなシステムの構成となると、大容量ストレージを使うケースが多かったりします。
ストレージが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はボリュームをマウントしたときの所有者とグループ名になります。
※ うまくいかないときは下記のエントリも参照してみてください。
ターゲットボリュームのファイルシステムを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経由でリモートにあるディスクボリュームをローカルにあるかのように使うことができます。
[PR]
[PR]
関連記事
Linux上でファイルを削除してしまった際にさっくり復活できるextundelete
NFSマウントした領域内でPHPのsession_startを実行すると異様に重い件