オンラインシリーズ第二回でございます、ソリューションアーキテクトの藤城(@tafujish)です。 前回「サーバーを起動したままスペックアップする」ではIDCFクラウドのサーバーでCPUとメモリをサーバー起動した状態で追加する方法をご紹介しました。
ということで、次はボリューム(ディスク)です。
7月末にDATAディスクの容量拡張(リサイズ)の機能がリリースされたのですが気づかれましたでしょうか。このリサイズ機能は、IDCFクラウドのリリース時に実装するかどうか直前まで奮闘し、困難な実装を乗り越え、何とかAPIでのみ先行で提供した機能になります。現在はAPIだけでなく、ポータル上からも簡単に操作できるようになったので気軽に使っていただきたく、かつサーバーが起動した状態でも容量が増やせるのでその方法を見ていきましょう。
本題に入る前に用語説明ですが、 ROOTディスクは、仮想マシン作成と同時に作成され、OSが入っているディスク領域です。 DATAディスクは、仮想マシンにストレージデバイスとして追加して利用する、2本目3本目…のディスクです。 ボリュームは、これらのディスクの総称です。
ディスク容量を増やしたいときは、
- DATAディスクの容量を拡張する
- DATAディスクを追加する
という2つの方法があります。
DATAディスクをオンラインで容量拡張する
では一つ目の方法である容量拡張、つまりリサイズについて説明します。 既に利用中のDATAディスクの容量を拡張するのは簡単で、対象のDATAディスクを選択し、リサイズを実施ください。もちろんサーバーが起動した状態で実施可能です。
ここでOS上でディスクの容量を見ても増えていないと思います。OS上で追加分を認識させるため、以下のコマンドを実行します。 (DATAディスク /dev/sdb を30GBから60GBにリサイズした例)
●対象のディスクのデバイスIDを確認します(ここでは2:0:1:0) [root@localhost ~]# <strong>lsscsi</strong> [0:0:0:0] cd/dvd NECVMWar VMware IDE CDR00 1.00 /dev/sr0 [2:0:0:0] disk VMware Virtual disk 1.0 /dev/sda [<strong>2:0:1:0</strong>] disk VMware Virtual disk 1.0 /dev/sdb ●対象のディスクをリスキャンします [root@localhost ~]# <strong>echo 1 > /sys/class/scsi_disk/2\:0\:1\:0/device/rescan</strong> [root@localhost ~]# ●ディスクの容量が増えているか確認します [root@localhost ~]# <strong>fdisk -l /dev/sdb</strong> ディスク /dev/sdb: <strong>64.4 GB</strong>, 64424509440 バイト ヘッド 255, セクタ 63, シリンダ 7832 ~以下略~
OSを再起動せずに拡張した領域を認識させることができました。 iopingで、IOレイテンシーを確認しながら実施しましたが、ポータル上でのリサイズ、OS上でのリスキャンいずれも遅延等の影響なく問題なく追加できました。
この後は/dev/sdb1パーティションを作成していくと思いますが、 パーティション作成後に、パーティションテーブルの読み込みエラーが出ると思います。 こちらもOS再起動せずに認識させることができます。 (ここではfdiskで/dev/sdb2を作成した後の例)
●fdiskでパーティション作成後、以下のエラーが出る 警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。新しいテーブルは 次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に 使えるようになるでしょう ●パーティションテーブルを再読み込み [root@localhost ~]# <strong>partx -v -a /dev/sdb</strong> device /dev/sdb: start 0 size 125829120 gpt: 0 slices dos: 4 slices # 1: 63- 62910539 ( 62910477 sectors, 32210 MB) # 2: 62910540-125821079 ( 62910540 sectors, 32210 MB) # 3: 0- -1 ( 0 sectors, 0 MB) # 4: 0- -1 ( 0 sectors, 0 MB) BLKPG: Device or resource busy error adding partition 1 <strong>added partition 2</strong> ●パーティションがエラーなく表示されることを確認 [root@localhost ~]# <strong>fdisk -l /dev/sdb</strong> ~以上略~ デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 1 3916 31455238+ 8e Linux LVM <strong>/dev/sdb2 3917 7832 31455270 8e Linux LVM</strong>
以上のように、リサイズからOS上での操作まで一貫して再起動なしでできました。
DATAディスクをオンラインで追加する
では二つ目の方法である、ディスク追加について説明します。 DATAディスクをリサイズして拡張していったとしても、プライマリパーティション数の上限やDATAディスクの容量上限(1TB)にぶち当たることもあるでしょう。そんなときは、DATAディスクを3本目4本目と追加していってください。このDATAディスクの追加も、もちろん再起動なしで利用可能です。
DATAディスクの作成とアタッチはFAQをご覧いただくとして、もちろんこの操作もサーバーが起動した状態で実施いただけます。
ここでOS上でデバイス一覧を見ても、ディスクデバイスは増えていないと思います。OS上で追加分を認識させるため、以下のコマンドを実行します。 (50GBのDATAディスク /dev/sdc を追加した例)
●対象のHBA番号を確認します(ここでは2) [root@localhost ~]# <strong>lsscsi</strong> [0:0:0:0] cd/dvd NECVMWar VMware IDE CDR00 1.00 /dev/sr0 [2:0:0:0] disk VMware Virtual disk 1.0 /dev/sda [<strong>2</strong>:0:1:0] disk VMware Virtual disk 1.0 /dev/sdb ●対象のHBAをリスキャンします [root@localhost ~]# <strong>echo "- - -" > /sys/class/scsi_host/host2/scan</strong> [root@localhost ~]# ●新しいディスク(/dev/sdc)が増えているか確認します [root@localhost ~]# <strong>fdisk -l /dev/sdc</strong> ディスク <strong>/dev/sdc</strong>: 53.7 GB, 53687091200 バイト ヘッド 255, セクタ 63, シリンダ 6527 ~以下略~
OSを再起動せずに追加したDATAディスクを認識させることができました。先ほどと同じくiopingで、IOレイテンシーを確認しながら実施しましたが、ポータル上でのアタッチ、OS上でのリスキャンいずれも遅延等の影響なく問題なく追加できました。 こちらの方が簡単ですね。
容量スケールするディスク、どう使う?
ここまでは、ディスクやその容量を増やす方法とパーティション作成を紹介しました。 実際の問題として、サーバーを止めずに実使用量を増やすとなると、予めLVM(Logical Volume Manager)で構成しておく必要があります。はじめにDATAディスク上にLVMで構成しておくと、リサイズでもディスク追加でも無停止で容量を増やすことが可能です。この手順は長くなるので、一番最後のパートで紹介します。
次に、容量を増やしたいと思ったとき、リサイズとディスク追加どちらを選ぶか問題です。
基本的にはディスク追加の方がおすすめで、以下の理由があります。
- ディスクを束ねて1TB以上の容量が構成可能
- 将来、容量が不要になった時に追加分のディスクを削除可能
一方でリサイズでなければならない理由としては、
- IDCFクラウドのスナップショット機能を利用している
場合は、1つのディスク毎でしかスナップショットが取れないためでリサイズが有効です。どうしても複数ディスクでスナップショットを取りたい場合は今々だとLVMスナップショットを使ってOS上で実施するしか手がないです。
まとめ
では、先にまとめで前回今回と、サーバーを起動したままCPU、メモリ、ディスクを増やすことができることを見てきました。取り上げませんでしたが、NICの追加も可能です。 リサイズでもディスク追加でも、実施後にOS上で追加分を認識させることが必要で、これをオンラインでできるので、サーバー再起動は一切ありませんでした。認識させるのもコマンド一発なので簡単に実施可能でした。 以降では、LVMを構成し、容量を追加していく、実際の流れを見ていきます。オンラインでのディスク追加に興味を持たれた方は、参考にしてください。
[実戦]LVMを使って容量を増やしていこう
では、以下の流れでディスクを拡張していきます。 1) DATAディスク上でLVMを構成する 2) DATAディスクをリサイズし、LVM領域を拡張する 3) DATAディスクを追加し、LVM領域を拡張する
1) DATAディスク上でLVMを構成する
まずは、上図のとおり30GBのDATAディスクがあるサーバーで、LVM構成を構築します。
●パーティションを作成します [root@localhost ~]# <strong>fdisk /dev/sdb</strong> デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも 含んでいません 新たに DOS ディスクラベルをディスク識別子 0x3b57b701 で作成します。 あなたが書き込みを決定するまで、変更はメモリ内だけに残します。 その後はもちろん以前の内容は修復不可能になります。 警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって 正常になります 警告: DOS互換モードは廃止予定です。このモード (コマンド'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): <strong>n</strong> コマンドアクション e 拡張 p 基本パーティション (1-4) p パーティション番号 (1-4): <strong>1</strong> 最初 シリンダ (1-3916, 初期値 1): 初期値 1 を使います Last シリンダ, +シリンダ数 or +size{K,M,G} (1-3916, 初期値 3916): 初期値 3916 を使います コマンド (m でヘルプ): <strong>t</strong> 選択した領域 1 16進数コード (L コマンドでコードリスト表示): <strong>8e</strong> 領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): <strong>p</strong> ディスク /dev/sdb: 32.2 GB, 32212254720 バイト ヘッド 255, セクタ 63, シリンダ 3916 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x3b57b701 デバイス ブート 始点 終点 ブロック Id システム <strong>/dev/sdb1 1 3916 31455238+ 8e Linux LVM</strong> コマンド (m でヘルプ): <strong>w</strong> パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 ディスクを同期しています。 [root@localhost ~]# <strong>fdisk -l /dev/sdb</strong> ディスク /dev/sdb: 32.2 GB, 32212254720 バイト ヘッド 255, セクタ 63, シリンダ 3916 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x3b57b701 デバイス ブート 始点 終点 ブロック Id システム <strong>/dev/sdb1 1 3916 31455238+ 8e Linux LVM</strong> ●物理ボリュームを作成し、確認します [root@localhost ~]# <strong>pvcreate /dev/sdb1</strong> Physical volume "/dev/sdb1" successfully created [root@localhost ~]# <strong>pvdisplay</strong> "/dev/sdb1" is a new physical volume of "30.00 GiB" --- NEW Physical volume --- PV Name <strong>/dev/sdb1</strong> VG Name PV Size 30.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 37mk1N-kWrH-6XfL-ws8J-1CxG-q8yB-LM1pIw ●ボリュームグループを作成し、確認します [root@localhost ~]# <strong>vgcreate VG01 /dev/sdb1</strong> Volume group "VG01" successfully created [root@localhost ~]# <strong>vgdisplay</strong> --- Volume group --- VG Name <strong>VG01</strong> System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 30.00 GiB PE Size 4.00 MiB Total PE 7679 Alloc PE / Size 0 / 0 Free PE / Size 7679 / 30.00 GiB VG UUID F9piza-DPvp-Gme1-aKc9-vuM0-HQZH-v2LVry ●論理ボリュームを作成し、確認します [root@localhost ~]# <strong>lvcreate -l 100%FREE -n LV01 VG01</strong> Logical volume "LV01" created [root@localhost ~]# <strong>lvdisplay</strong> --- Logical volume --- LV Path <strong>/dev/VG01/LV01</strong> LV Name LV01 VG Name VG01 LV UUID z5s6Md-7b2x-yhAP-YF36-zOip-y8aS-dnxhj7 LV Write Access read/write LV Creation host, time localhost.cs18idcfcloud.internal, 2015-09-08 13:46:12 +0900 LV Status available # open 0 LV Size 30.00 GiB Current LE 7679 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 ●ext4でフォーマットしマウントします [root@localhost ~]# <strong>mkfs.ext4 /dev/VG01/LV01</strong> mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1966080 inodes, 7863296 blocks 393164 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 240 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 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# <strong>mkdir /data</strong> [root@localhost ~]# <strong>mount /dev/VG01/LV01 /data</strong> [root@localhost ~]# <strong>df -h</strong> Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 976M 13G 7% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/mapper/VG01-LV01 <strong>30G</strong> 44M 28G 1% /data [root@localhost ~]#
2) データディスクをリサイズし、LVM領域を拡張する
次にリサイズによる容量拡張です。
ポータル上で30GBのDATAディスクを60GBにリサイズします。
その後、上図のとおりリサイズしたDATAディスクを使って、LVM領域を拡張します。
●リサイズしたディスク領域を認識させます [root@localhost ~]# <strong>lsscsi | grep /dev/sdb</strong> [<strong>2:0:1:0</strong>] disk VMware Virtual disk 1.0 /dev/sdb [root@localhost ~]# <strong>echo 1 > /sys/class/scsi_disk/2\:0\:1\:0/device/rescan</strong> [root@localhost ~]# ●拡張してできた空き領域にパーティションを作成し、認識させます [root@localhost ~]# <strong>fdisk /dev/sdb</strong> 警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): <strong>n</strong> コマンドアクション e 拡張 p 基本パーティション (1-4) p パーティション番号 (1-4): <strong>2</strong> 最初 シリンダ (3917-7832, 初期値 3917): 初期値 3917 を使います Last シリンダ, +シリンダ数 or +size{K,M,G} (3917-7832, 初期値 7832): 初期値 7832 を使います コマンド (m でヘルプ): <strong>t</strong> パーティション番号 (1-4): <strong>2</strong> 16進数コード (L コマンドでコードリスト表示): <strong>8e</strong> 領域のシステムタイプを 83 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): <strong>p</strong> ディスク /dev/sdb: 64.4 GB, 64424509440 バイト ヘッド 255, セクタ 63, シリンダ 7832 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x3b57b701 デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 1 3916 31455238+ 8e Linux LVM <strong>/dev/sdb2 3917 7832 31455270 8e Linux LVM</strong> コマンド (m でヘルプ): <strong>w</strong> パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。新しいテーブルは 次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に 使えるようになるでしょう ディスクを同期しています。 [root@localhost ~]# <strong>partx -l /dev/sdb</strong> # 1: 63- 62910539 ( 62910477 sectors, 32210 MB) <strong># 2: 62910540-125821079 ( 62910540 sectors, 32210 MB)</strong> # 3: 0- -1 ( 0 sectors, 0 MB) # 4: 0- -1 ( 0 sectors, 0 MB) [root@localhost ~]# <strong>partx -v -a /dev/sdb</strong> device /dev/sdb: start 0 size 125829120 gpt: 0 slices dos: 4 slices # 1: 63- 62910539 ( 62910477 sectors, 32210 MB) # 2: 62910540-125821079 ( 62910540 sectors, 32210 MB) # 3: 0- -1 ( 0 sectors, 0 MB) # 4: 0- -1 ( 0 sectors, 0 MB) BLKPG: Device or resource busy error adding partition 1 <strong>added partition 2</strong> ●追加したパーティションを物理ボリュームにします [root@localhost ~]# <strong>pvcreate /dev/sdb2</strong> Physical volume "/dev/sdb2" successfully created ●既存のボリュームグループに追加した物理ボリュームを追加します [root@localhost ~]# <strong>vgextend VG01 /dev/sdb2</strong> Volume group "VG01" successfully extended ●既存の論理ボリュームを拡張します [root@localhost ~]# <strong>lvextend -l +100%FREE /dev/VG01/LV01</strong> Size of logical volume VG01/LV01 changed from 30.00 GiB (7679 extents) to 59.99 GiB (15358 extents). Logical volume LV01 successfully resized [root@localhost ~]# <strong>lvdisplay</strong> --- Logical volume --- LV Path /dev/VG01/LV01 LV Name LV01 VG Name VG01 LV UUID z5s6Md-7b2x-yhAP-YF36-zOip-y8aS-dnxhj7 LV Write Access read/write LV Creation host, time localhost.cs18idcfcloud.internal, 2015-09-08 13:46:12 +0900 LV Status available # open 1 LV Size <strong>59.99 GiB</strong> Current LE 15358 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 ●ファイルシステムを拡張し、これで拡張分の容量が使えるようになりました [root@localhost ~]# <strong>resize2fs /dev/VG01/LV01</strong> resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/VG01/LV01 is mounted on /data; on-line resizing required old desc_blocks = 2, new_desc_blocks = 4 Performing an on-line resize of /dev/VG01/LV01 to 15726592 (4k) blocks. The filesystem on /dev/VG01/LV01 is now 15726592 blocks long. [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 976M 13G 7% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/mapper/VG01-LV01 <strong>59G</strong> 52M 56G 1% /data [root@localhost ~]#
3) データディスクを追加し、LVM領域を拡張する
最後にディスク追加です。
ポータル上で50GBのDATAディスク作成しアタッチします。
その後、上図のとおり追加したDATAディスクを使って、LVM領域を拡張します。
●追加したディスクを認識させます [root@localhost ~]# lsscsi | grep /dev/sd [<strong>2</strong>:0:0:0] disk VMware Virtual disk 1.0 /dev/sda [<strong>2</strong>:0:1:0] disk VMware Virtual disk 1.0 /dev/sdb [root@localhost ~]# <strong> echo "- - -" > /sys/class/scsi_host/host2/scan</strong> [root@localhost ~]# ●追加したディスクにパーティションを作成します [root@localhost ~]# <strong>fdisk /dev/sdc</strong> デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも 含んでいません 新たに DOS ディスクラベルをディスク識別子 0x191aee31 で作成します。 あなたが書き込みを決定するまで、変更はメモリ内だけに残します。 その後はもちろん以前の内容は修復不可能になります。 警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって 正常になります 警告: DOS互換モードは廃止予定です。このモード (コマンド'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): <strong>n</strong> コマンドアクション e 拡張 p 基本パーティション (1-4) p パーティション番号 (1-4): <strong>1</strong> 最初 シリンダ (1-6527, 初期値 1): 初期値 1 を使います Last シリンダ, +シリンダ数 or +size{K,M,G} (1-6527, 初期値 6527): 初期値 6527 を使います コマンド (m でヘルプ): <strong>t</strong> 選択した領域 1 16進数コード (L コマンドでコードリスト表示): <strong>8e</strong> 領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): <strong>p</strong> ディスク /dev/sdc: 53.7 GB, 53687091200 バイト ヘッド 255, セクタ 63, シリンダ 6527 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x191aee31 デバイス ブート 始点 終点 ブロック Id システム <strong>/dev/sdc1 1 6527 52428096 8e Linux LVM</strong> コマンド (m でヘルプ): <strong>w</strong> パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 ディスクを同期しています。 [root@localhost ~]# <strong>fdisk -l /dev/sdc</strong> ディスク /dev/sdc: 53.7 GB, 53687091200 バイト ヘッド 255, セクタ 63, シリンダ 6527 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x191aee31 デバイス ブート 始点 終点 ブロック Id システム <strong>/dev/sdc1 1 6527 52428096 8e Linux LVM</strong> ●追加したパーティションを物理ボリュームにします [root@localhost ~]# <strong>pvcreate /dev/sdc1</strong> Physical volume "/dev/sdc1" successfully created ●既存のボリュームグループに追加した物理ボリュームを追加します [root@localhost ~]# <strong>vgextend VG01 /dev/sdc1</strong> Volume group "VG01" successfully extended ●既存の論理ボリュームを拡張します [root@localhost ~]# <strong>lvextend -l +100%FREE /dev/VG01/LV01</strong> Size of logical volume VG01/LV01 changed from 59.99 GiB (15358 extents) to 109.99 GiB (28157 extents). Logical volume LV01 successfully resized ●ファイルシステムを拡張し、これで拡張分の容量が使えるようになりました [root@localhost ~]# <strong>resize2fs /dev/VG01/LV01</strong> resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/VG01/LV01 is mounted on /data; on-line resizing required old desc_blocks = 4, new_desc_blocks = 7 Performing an on-line resize of /dev/VG01/LV01 to 28832768 (4k) blocks. The filesystem on /dev/VG01/LV01 is now 28832768 blocks long. [root@localhost ~]# <strong>df -h</strong> Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 976M 13G 7% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/mapper/VG01-LV01 <strong>109G</strong> 60M 103G 1% /data [root@localhost ~]#
以上です、最後までご覧いただきありがとうございました。お疲れ様でした。