LinuxのOnlineでのDisk追加

技術的雑談-LinuxのOnlineでのDisk追加
 

環境

  • RedHat Enterprize Linux 3 Advance Server (RHEL3AS)
  • マシンはVMware上に構築
  • DiskはSCSIとして接続

目的

  • オンラインのままDisk追加を行い、OSにファイルシステムとしてマウントする

 

但し書き

本来的な話をすれば、オンラインでのDisk追加というのはLinuxの運用としては例外的なものであり、外道的なものでもある。

ただ、実際、運用をしているといつの間にか既存ファイルシステムを食いつぶしてしまい、にっちもさっちもいかなくなってしまうこともある。
ひどいときにはShutdownが失敗してしまうという場合もありうる。
(アプリケーションがオンメモリの情報をDiskに書き落とさないとShutdownしないような類のものだったりする場合もある。Oracleとか。)

そういった場合に、Diskを追加して既存ファイルシステムからデータを逃がし、できた余裕を使ってシステムを正常状態に戻すという運用も選択肢として心得ておくと便利かもしれない。

しかしながら、重ねて書くが、オンラインでのDisk追加は本来かなりの高リスクな作業である。
ここではOS的な操作の話に触れるが、ハードウェアが対応していることなども必要な要件であることを確認しておく必要がある。

特にSCSIバスが1本しか無いシステムだったり、既に全てのSCSIバスにDiskを接続して使っていたり、ATAだったりした場合はこの手順にたどり着く前にそれなりの苦労を要する。

 

手順
 

1. 物理Diskの追加

まずは物理DiskをSCSIバスに接続する。
VMware上で行う場合は仮想マシンの設定でDiskを追加する。
その際に追加した物理ディスクのTID(Target ID)、LUN(Logical Unit Number)を覚えておく。
VMwareの設定であれば「00:01」とか「01:01」みたいな形で表現されるが、最初の数字がTID、次のがLUNです。

意味的には、TIDは同じSCSIバス上で一意な値、LUNは同一TID内で重複しない値、です。

VMwareではない本物のHDDの場合、TIDはジャンパーピンなどで設定する番号のことです。

 

2. 物理ディスクのOSからの認識

そのままではOSを再起動するまでHDDはOSから認識されない。
認識されないと/dev/sdxが作成されない。
/dev/sdxが作成されないとファイルシステムも作れないし、マウントもできない。
(xにはaから順番にb,c,d,…とアルファベットが付く。普通はOSが起動している時点でsdaはあるはずなので、追加ディスクはsdb以降になるはずです。)

 Linuxにroot権限でLoginする。

以下のコマンドを打って現時点でのSCSIの様子を見る。

# cat /proc/scsi/scsi

このような結果が表示されるはず。

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0
  Type:   Direct-Access                    ANSI SCSI revision: 02

ここで「Host: scsi0 Channel: 00 Id: 00 Lun: 00」の意味は、
「Host bus adapter(HBA) 0番のチャンネル0番のTID0のLUN0のHDD」
という意味。

HBAというのはSCSIボードのこと。OSの認識順に番号が振られるので必ずしもスロット番号順に振られるとは限らない。
チャンネルというのは、SCSIボード内でのSCSIバスの番号。大雑把に言ってボード上のコネクタ番号だと思って大体間違いではない。
1つのSCSIボードに2つのSCSIポートが付いているカードの場合は、チャンネル0と1があることになるはず。
Idは前述のTIDの事。
Lunは前述のLUNの事。
少なくともTIDはHDD側で設定できる。
LUNは0などに固定されている機器も多い。

SCSI上のDiskをOSに認識させるには以下のコマンドを実行する。

# echo "scsi add-single-device board channel TID LUN" > /proc/scsi/scsi

ここで「board channel TID LUN」は新しく追加したものの数字を正しく入力する。

うまくいけば「# cat /proc/scsi/scsi」でHDDの表示が増えるはずです。

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0
  Type:   Direct-Access                    ANSI SCSI revision: 02

この状態で/dev下を確認すると、sdxが増えているはずです。
(と、いうか、元々キャラクターデバイスとして存在していましたが…。そういうものだっけか?)

以下、説明を簡略化するために新しいディスクを/dev/sdbとします。

 

3. Diskパーティションの作成

 そのままではHDDにパーティションが切られていないので、fdiskコマンドでパーティションを切ります。

# fdisk /dev/sdb

そのままfdiskのコマンドプロンプトが表示されるので、helpなどを参照しながらパーティションを切ります。

で、切り終わったら最後に「w」を必ず実行して、パーティションテーブルに実際に書き込みを行います。
これをしないとダメです。

 

5. ファイルシステム作成

普通にmkfsとかnewfsとかで/dev/sdb1などにファイルシステムを作ります。 
 

6. 仮マウント

マウントしないとデータが書けないので、/mntの下に「/mnt/hoge」などのディレクトリを作り、そこにsdb1をマウントします。

 

7. データ移動

新しいディスクをマウントした/mnt/hoge配下に元のディスクのデータを移動します。 

 

8. アンマウント

データを移動し終わったら新しいディスクをいったんunmountします。

 

9. fastab編集

/etc/fstabを編集して、新しいディスクを恒久的にmountする設定を追加します。 

10. 本マウント

今編集した/etc/fstabを使って、新Diskをmountしてみます。
エラー無くマウントできればOKです。


履歴

2011/03/12 -- 初版