この記事では、以下の内容を学びます。
- LVM (Linux Logical Volume Manager) を使用して 64-bit Linux インスタンス (Bronze オファリング) をセットアップします。
- プライベート・イメージを取得して、新規 Platinum インスタンスとしてプロビジョニングします。
- 新しい物理ボリュームを収容できるように LVM ボリュームとファイルシステムを拡張します。
- Linux LVM タイプのパーティションを使って、複数の物理ボリュームで LVM を構成します。
まずは、LVM に馴染みのない読者のために、LVM の基本概念とテスト・シナリオについて説明しておきます。
注: 皆さんは今まさに Linux LVM を構成しようとしています。ここに示すのが LVM の姿です。これまで学んだ概念との違いに気をつけてください。
Linux LVM は、物理ボリューム (PV)、ボリューム・グループ (VG)、そして論理ボリューム (LV) から編成されます。
- 物理ボリューム (PV): 物理 HDD、物理 HDD パーティションです (/dev/vdb1 など)。
- エクステント: 物理ボリューム (PV) は、物理エクステント (PE) と呼ばれる塊に分けられます。物理エクステント (PE) に 1 対 1 で対応する論理エクステント (LE) が、物理ボリューム (PV) から論理ボリューム (LV) へのマッピングで使用されます。
- ボリューム・グループ (VG): 集約された物理ボリューム (PV) からなる仮想ディスクです。ボリューム・グループ (VG) を論理的にパーティショニングすることで、論理ボリューム (LV) にすることができます。
- 論理ボリューム (LV): 仮想ディスク・パーティションとして機能します。ボリューム・グループ (VG) を作成した後、そのボリューム・グループ (VG) 内に論理ボリューム (LV) を作成することができます。これらの論理ボリューム (LV) は、RAW ブロック・デバイスまたはスワップ・デバイスとして使用することも、ディスク・パーティションと同じように (マウント可能な) ファイルシステムを作成するために使用することもできます。
- ファイルシステム: 論理ボリューム (LV) は RAW デバイスまたはスワップ・デバイスとして使用できますが、一般的には、サポートされるファイルシステムで「フォーマット」された後、定義されたマウント・ポイントにマウントされます。この記事のシナリオでは、論理ボリューム (LV) を ext3 ファイルシステムとしてフォーマットします。
- パーティション・テーブル: この記事では、ブロック・デバイスのパーティション・テーブルを fdisk、sfdisk、または cfdisk などのツールで操作して、Linux LVM (8e) タイプのパーティションを作成します。
(アップグレード後の) Platinum インスタンスでの LVM は、一般的には以下の図のようにセットアップされます。
図 1. Platinum インスタンスでのローカル・ボリューム・グループ (VG) の関係
上記の図が表しているのは、/dev/vdc ブロック・デバイスにパーティションを追加で作成するというシナリオです。もしパーティションを作成せずに、この物理ボリューム (PV) を拡張するとしたら、vdc 上には 500GB のパーティションが 1 つだけ (/dev/vdc1) できることになります。
この図では、Bronze インスタンスで利用可能なディスクを青で示し、Platinum イメージの追加ストレージをグレーで示しています。(訳注: 図 1 には色が付けられていませんが、著者は Bronze インスタンスで利用可能なディスクとして /dev/vdb と /dev/vdc、同じく利用可能なパーティションとして /dev/vdb1 と /dev/vdc1 を青色にしようとしたものと推測されます。一方、Platinum イメージで追加されるストレージ・ディスクとして /dev/vdd と /dev/vdc、同じく追加されるパーティションとして /dev/vdc2、/dev/vdd1、そして /dev/vde1 をグレーにしようとしたものと推測されます。)
もう 1 つ注意する点として、ボリューム・グループ (VG) にしても、論理ボリューム (LV) にしても、1 つしか使用できないわけではありません。本番環境では、複数の論理ボリューム (LV) がファイルシステムや RAW デバイス、あるいは Linux スワップ・パーティションとして使用されている例を目にするはずです。
IBM Cloud での一般的なシナリオの 1 つは、インスタンスを上のレベルのオファリング (Platinum など) にアップグレードする場合です。このアップグレードは、一時ディスクのサイズ変更を意味します。
記事では、Bronze 64 を Platinum 64 にアップグレードするというシナリオを適用します。この作業フローは以下のステップで構成されます。
- Bronze の 64-bit Linux インスタンス (RHEL 5.5 または SLES 11 SP1) をプロビジョニングします。
- 複数の空のブロック・デバイスにまたがる LVM を構成します。
- プライベート・イメージを取得します。
- 取得したイメージから新しいインスタンスを Platinum インスタンスとしてデプロイします。
- 500GB のブロック・デバイスの残りのスペースと追加の 250GB のブロック・デバイスから新しい LVM パーティションを作成します (元のブロック・デバイスのサイズは 350GB であり、150GB が割り当てられていないはずです)。このステップは、次のステップを行わない場合に代わりとなるステップです。
pvresizeを使用して既存の物理ボリューム (PV) を拡張し、さらに 2 つの 500GB のブロック・デバイスを (パーティショニングした後) ボリューム・グループ (VG) に追加します。- 論理ボリューム (LV) およびファイルシステムのサイズを変更します。
これらのステップを Platinum インスタンスから直接始める場合や、他のオファリングから始める場合にも、各ステップをそれぞれに該当するブロック・デバイスに適応させるだけでよいのです。
LVM の役割、そして LVM を使用するメリットについての詳細は、LVM HOWTO の「What is Logical Volume Management?」のセクションを参照してください。また IBM Cloud で提供される、一時ストレージ・オファリングの概要と、Linux オペレーティング・システムで使用可能なインスタンス・サイズごとの仮想ディスク・ドライブのレイアウトについての詳細は、「IBM Cloud のヒント: 一時ストレージの基本を理解する」を参照してください。
以下で、この記事で使用する表記規則、および環境のセットアップに関する考慮事項について説明します。
表記規則
- システムで root として実行するコマンドには、接頭辞
root@host#を付けています。 - システムで一般ユーザーとして実行するコマンドには、接頭辞
user@host $を付けています。 - コマンドとコマンド出力の間には、1 行空行を挿入することで区切り、コマンド出力は右に 1 タブ分インデントを挿入しています (以下のコード・ブロックを参照)。
root@host# 1st command - to be run as root
root@host# 2nd command - to be run as root (previous command has no output)
output from 2nd command
user@host$ 3rd command - to be run as user
output from 3rd command
|
環境のセットアップと考慮事項
与えられている以上の特権が必要なコマンドについては、sudo (または、sudo -s) を使用して実行します。sudo bash は使用しないでください。これを使用すると、idcuser 環境設定が適用されるためです。例: /usr/bin/sudo /usr/sbin/lvmdiskscan
ここで注意しなければならない考慮事項として、次の 2 点があります。
- 記事で使用するコマンドが適用されるのは、RHEL 5.5 イメージと SLES 11 SP1 イメージです。これよりも古い RHEL 5.4 などのイメージは VirtIO
デバイスをサポートしておらず、ATA デバイス名を使用します
(例えば、
/dev/hda)。また、デフォルトのレガシー・イメージは異なるパーティショニング・スキームを使用し、プロビジョニングの際にファイルシステムを拡張します。レガシー・イメージに LVM をセットアップする場合には、これらの違いを考慮してください。 - LVM コマンドの多くは、テスト・フラグ (
-t、--test)、詳細レベル・フラグ (-v、--verbose: 詳細レベルを上げるには、1 回から 3 回繰り返します)、およびデバッグ・フラグ (-d、--debug: ログ・ファイルや syslog に送信するメッセージの詳細レベルを高くするには、1 回から 6 回繰り返します) をサポートします。これらのフラグをコマンドで使用する前に、該当するコマンドの man ページを読んで、そのコマンドによって何が変更されるのかを調べてください。以下のコードに一例を示します。
root@host# pvcreate -d -v -t /dev/vdc1
Test mode: Metadata will NOT be updated.
Set up physical volume for "/dev/vdc1" with 734002353 available sectors
Zeroing start of device /dev/vdc1
Physical volume "/dev/vdc1" successfully created
Test mode: Wiping internal cache
Wiping internal VG cache
|
SLES では、LVM ツールは /sbin に配置されています。RHEL での配置場所は、/usr/sbin です。LVM ツールを相対パスで呼び出すには、以下のように、ツールが置かれている場所を PATH に追加する必要があります。
user@host$ sudo -s root@host# export PATH=$PATH:/sbin:/usr/sbin |
記事で説明するステップを実行する前に、データのバックアップを取っておくことを強くお勧めします。
この記事では、RAW ブロック・デバイスの代わりにディスク・パーティションを使用して LVM を構成する方法を説明します。RAW ブロック・デバイスを使用すると、アップグレードするのも、使用されたディスクを追跡するのも難しくなるのでお勧めしません。
このアップグレード・シナリオを実行するには、いくつかの方法があります。そのうち最も簡単なのは、最初に Bronze インスタンスのデータをバックアップした上で、Platinum インスタンスにアップグレードして LVM を一から構成し直し (これには、新規ファイルシステムの作成も含まれます)、最後にデータをリストアするという方法です。
既存の LVM を拡張するほうが手っ取り早い方法ですが、それでもやはり、途中でデータをバックアップしなければなりません。
それでは早速、親インスタンスの構成に取り掛かります。
親インスタンスを構成する際には、そのインスタンスで LVM を構成することを考慮する必要があります。64-bit Bronze
以外のオファリングから始める場合には、そのインスタンスで使用可能な一時ストレージ・ブロック・デバイスに合わせて以降のステップを変更してください。例えば、32-bit
Bronze インスタンスの場合には、LVM に使用できるのは 175GB のブロック・デバイス 1 つだけになります。したがって、vgcreate コマンドがパーティション /dev/vdb1 のみを使用するように変更する必要があります。
まずは、64-bit Bronze インスタンスをプロビジョニングして LVM を構成するステップから取り掛かります。
- 物理ボリューム (PV) を作成するために使用できるブロック・デバイスを確認します。それには、
dmesg; cat /proc/partitionsを使用してカーネル・リング・バッファーとパーティションを確認してから、以下のステップに従います。 - ブロック・デバイスをスキャンします。パーティションのないディスクには、/dev/vdb と /dev/vdc の 2 つがあることがわかります。RAM ディスクは無視してください。
root@host# lvmdiskscan | grep -v ram /dev/vda1 [ 101.94 MB] /dev/root [ 59.90 GB] /dev/vdb [ 500.00 GB] /dev/vdc [ 350.00 GB] /dev/vdd1 [ 4.00 GB] 5 disks 16 partitions 0 LVM physical volume whole disks 0 LVM physical volumes
- ブロック・デバイスにパーティション・テーブルが含まれていないことを確認します。
root@host# fdisk -l | grep partition Disk /dev/vdb doesn't contain a valid partition table Disk /dev/vdc doesn't contain a valid partition table
- Linux LVM タイプのパーティションを作成し、LVM 物理ボリューム (LVM PV) として使用できるように初期化します。
- fdisk 応答ファイルを作成します。以下の内容を初めて実行するときには、fdisk コマンドを実行し、以下の内容を手で入力する必要があります。
root@host# cat > fdisk.lvm.partitions << EOF n p 1 t 8e w EOF
- 構成スクリプトを生成します。このスクリプトによって、既存のパーティション・テーブルを削除し、パーティション・テーブルを読み取り直し、ブロック・デバイス上に ID が 8e のパーティション (Linux LVM) を作成し、そして LVM 物理ボリューム (LVM PV) として使用できるように Linux LVM パーティションを初期化します。
ストレージ構成はそれぞれのイメージによって異なる可能性があるので、これらのステップをよく理解して、インスタンスでは必要に応じて修正しながら手動で実行することが重要です。詳細については、インスタンスで
man fdiskと入力して fdisk の man ページを読んでください。以下のコード・スニペットは、未割り当てのブロック・デバイス上に Linux LVM パーティション・タイプを作成するステップを生成します。これらのディスクが LVM に追加する正しいディスクであることを確実にしてください。
root@host# for i in $(fdisk -l 2>&1| awk '/valid/{print $2}') do echo "# Partition and initialize LVM PV for device $i" echo dd if=/dev/zero of=$i bs=1024 count=1 # Clear partition table echo blockdev --rereadpt $i # Re-read partition table echo fdisk $i \< fdisk.lvm.partitions # Create Linux LVM partition echo pvcreate ${i}1 # Initialize Physical Volume echo -e "\n" done
以下に、上記のスクリプトを Bronze インスタンスで実行した結果を記載します。
# Partition and initialize LVM PV for device /dev/vdb dd if=/dev/zero of=/dev/vdb bs=1024 count=1 blockdev --rereadpt /dev/vdb fdisk /dev/vdb < fdisk.lvm.partitions pvcreate /dev/vdb1 # Partition and initialize LVM PV for device /dev/vdc dd if=/dev/zero of=/dev/vdc bs=1024 count=1 blockdev --rereadpt /dev/vdc fdisk /dev/vdc < fdisk.lvm.partitions pvcreate /dev/vdc1
生成されたステップを確認し、LVM への追加対象とするディスクに応じて手動で実行する必要があります。この結果を単純にインスタンスにカット・アンド・ペーストすることは禁物です。
- LVM パーティションが作成されていることを確認します。
root@host# fdisk -l | grep LVM /dev/vdb1 1 1040253 524287480+ 8e Linux LVM /dev/vdc1 1 728177 367001176+ 8e Linux LVM
- LVM 物理ボリューム (LVM PV) が作成されていることを確認します。
root@host# lvmdiskscan | grep -v ram /dev/vda1 [ 101.94 MB] /dev/root [ 59.90 GB] /dev/vdb1 [ 500.00 GB] LVM physical volume /dev/vdc1 [ 350.00 GB] LVM physical volume /dev/vdd1 [ 4.00 GB] 3 disks 16 partitions 0 LVM physical volume whole disks 2 LVM physical volumes
- 新しいボリューム・グループ (VG) を作成します。
- 前のステップで定義した物理ボリューム (PV) と自動バックアップ・オプション (
-A) を使用して、ボリューム・グループ (VG) を作成します (この例では、localvg という名前を付けます)。root@host# vgcreate -A y localvg /dev/vdb1 /dev/vdc1 Volume group "localvg" successfully created
- ボリューム・グループ (VG) の属性を表示します。
root@host# vgdisplay --- Volume group --- VG Name localvg System ID Format lvm2 Metadata Areas 2 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 2 Act PV 2 VG Size 849.99 GB PE Size 4.00 MB Total PE 217598 Alloc PE / Size 0 / 0 Free PE / Size 217598 / 849.99 GB VG UUID 8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA
- 前のステップで定義した物理ボリューム (PV) と自動バックアップ・オプション (
- 新しい論理ボリューム (LV) を作成します。
- 必要なサイズの新しいリニア論理ボリューム (LV) を作成します。サイズを指定したり (
-L 100GB)、ボリューム・グループ (VG) のパーセンテージとして指定したり (-l 20%VG) するなどの追加オプションについては、lvcreateの man ページを参照してください。root@host# lvcreate -A y -l 100%VG -n datalv localvg Logical volume "datalv" created
- 論理ボリューム (LV) を表示します。
root@host# lvdisplay -v Finding all logical volumes --- Logical volume --- LV Name /dev/localvg/datalv VG Name localvg LV UUID 5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj LV Write Access read/write LV Status available # open 0 LV Size 849.99 GB Current LE 217598 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
- 新しいファイルシステムを作成してマウントします。
- 新規ファイルシステムのマウント・ポイントを作成します。
root@host# mkdir /data
- 論理ボリューム (LV) を ext3 としてフォーマットします。デバイス名は、ステップ 4b の
LV Nameに記載されています。このデバイス名にわかりやすいラベルを指定します (-L)。例:swap1, "/datalv".root@host# mkfs.ext3 -L datalv /dev/localvg/datalv mke2fs 1.39 (29-May-2006) Filesystem label=datalv OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 111411200 inodes, 222820352 blocks 11141017 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 6800 block groups 32768 blocks per group, 32768 fragments per group 16384 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, 214990848 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 23 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
fsckの実行間隔を変更したほうがよい場合もあります。例えば、fsckを大容量のファイルシステムで実行すると時間がかかります。データ・リカバリーについても同様です。 - ブート時に自動マウントできるように、
fstabエントリーを作成します。それには、以下の行を/etc/fstabに追加します。この作業には、viをはじめとする任意のテキスト・エディターを使用することができます。/dev/localvg/datalv /data ext3 defaults 0 1
あるいは、
echoとパイプを使用するという方法もあります。echo \ "/dev/localvg/datalv /data ext3 defaults 0 1" \ >> /etc/fstab
最後の行で
1を指定すると、fsckが大規模なファイルシステム全体を調べるのに暫く時間がかかる場合があることに注意してください。また、マシンのリブート後にはLABEL=datalvのように指定することもできますが、今のところは /dev/localvg/datalv と指定してください。 - ファイルシステムをマウントします。
root@host# mount /data
- ファイルシステムがマウントされていることを確認します。
root@host# mount | grep data /dev/mapper/localvg-datalv on /data type ext3 (rw)
- 新規ファイルシステムのマウント・ポイントを作成します。
- SLES で LVM ブート・サービスを構成します。このステップは RHEL では不要です。
- LVM ブート・サービスを起動します。
root@host# service boot.lvm start Waiting for udev to settle... Scanning for LVM volume groups... Reading all physical volumes. This may take a while... Found volume group "localvg" using metadata type lvm2 Activating LVM volume groups... 1 logical volume(s) in volume group "localvg" now active
- LVM サービスを起動時に有効にします。
root@host# chkconfig --add boot.lvm; chkconfig boot.lvm on boot.lvm 0:off 1:off 2:off 3:off 4:off 5:off 6:off B:on
- LVM ブート・サービスを起動します。
- LVM 設定を確認してドキュメント化します。
- すべてのボリュームを表示します。
root@host# vgdisplay --partial --verbose Partial mode. Incomplete volume groups will be activated read-only. Finding all volume groups Finding volume group "localvg" --- Volume group --- VG Name localvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 849.99 GB PE Size 4.00 MB Total PE 217598 Alloc PE / Size 217598 / 849.99 GB Free PE / Size 0 / 0 VG UUID 8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA --- Logical volume --- LV Name /dev/localvg/datalv VG Name localvg LV UUID 5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj LV Write Access read/write LV Status available # open 1 LV Size 849.99 GB Current LE 217598 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Physical volumes --- PV Name /dev/vdb1 PV UUID YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36 PV Status allocatable Total PE / Free PE 127999 / 0 PV Name /dev/vdc1 PV UUID VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls PV Status allocatable Total PE / Free PE 89599 / 0
- ブロック・デバイスの UUID を表示させます。
root@host# blkid -s UUID /dev/vda1: UUID="2156d173-9113-4157-a8f2-93140013d2a4" /dev/vda2: UUID="c72047bf-3508-46f0-939a-4cf505958b92" /dev/mapper/localvg-datalv: UUID="c033c8e1-0399-4ba4-9897-62d85cfa36bd"
- すべてのボリュームを表示します。
- 簡単なスモーク・テストを実行します。
- ファイルをいくつかディスクに書き込んでから、これらのファイルの読み取りが可能であることを確認します。例えば、ホーム・ディレクトリーのバックアップ・コピーを作成して、アーカイブの内容を一覧表示してみてください。表示された結果が実際と同じであれば、問題ありません。
root@host# tar zcvvf /data/idcuser.tar.gz /home/idcuser root@host# tar ztvvf /data/idcuser.tar.gz
- マシンをリブートしてから、ファイルシステムがマウントされていて、データにアクセスできることをテストします。
root@host# reboot root@host# tar ztvvf /data/idcuser.tar.gz
- この時点で、
fstabでLABEL表記を使用することもできます。LABEL=datalv /data ext3 defaults 0 1
- 新しい
LABELデバイス表記をテストするために、手動でファイルシステムをアンマウントしてからマウントし、リブートしてスモーク・テストを実行します。
- ファイルをいくつかディスクに書き込んでから、これらのファイルの読み取りが可能であることを確認します。例えば、ホーム・ディレクトリーのバックアップ・コピーを作成して、アーカイブの内容を一覧表示してみてください。表示された結果が実際と同じであれば、問題ありません。
このセクションでは、以下のステップを説明します。
- プライベート・イメージを取得して、そのイメージから新しいインスタンスをデプロイします。
- 子インスタンスの LVM 構成を確認します。
- 子インスタンスの LVM を拡張します。
- 拡張後に LVM 構成を再確認します。
プライベート・イメージを取得して、そのイメージから新しいインスタンスをデプロイする
例えば、Bronze (または Silver や Gold) のインスタンスをしばらく使用しているうちに、これよりも高いレベルのオファリングにアップグレードする必要が出てきたとします。インスタンスからプライベート・イメージを取得して、そのイメージから新しいインスタンスをデプロイするには、ターゲットに上のレベルのオファリング (この例では Platinum) を選択してください (オファリングをアップグレードすると、ボリューム・グループ (VG) に追加できるストレージのサイズが増えます)。オファリングのアップグレードは、アプリケーションに影響を及ぼします。それは、イメージを作成する間、インスタンスが停止され、作成されたイメージからデプロイされたインスタンスのホスト名、IP アドレス、そしてストレージ構成は前とは異なるためです。アップグレード・ステップを行う際には、これらの変更を考慮してください。また、プライベート・イメージを取得する前にデータをバックアップしておくことも考慮する必要があります。
子インスタンスの LVM 構成を確認するステップは以下のとおりです。
- 新しいインスタンスで LVM が引き続き正常に動作することを確認します。それにはまず、LVM 設定をドキュメント化するところから始めます。
- すべてのボリュームを一覧表示します。
root@host# vgdisplay --partial --verbose Partial mode. Incomplete volume groups will be activated read-only. Finding all volume groups Finding volume group "localvg" --- Volume group --- VG Name localvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 849.99 GB PE Size 4.00 MB Total PE 217598 Alloc PE / Size 217598 / 849.99 GB Free PE / Size 0 / 0 VG UUID 8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA --- Logical volume --- LV Name /dev/localvg/datalv VG Name localvg LV UUID 5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj LV Write Access read/write LV Status available # open 1 LV Size 849.99 GB Current LE 217598 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Physical volumes --- PV Name /dev/vdb1 PV UUID YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36 PV Status allocatable Total PE / Free PE 127999 / 0 PV Name /dev/vdc1 PV UUID VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls PV Status allocatable Total PE / Free PE 89599 / 0
- ブロック・デバイスの UUID を一覧表示します。
root@host# blkid -s UUID /dev/vda1: UUID="2156d173-9113-4157-a8f2-93140013d2a4" /dev/vda2: UUID="c72047bf-3508-46f0-939a-4cf505958b92" /dev/mapper/localvg-datalv: UUID="c033c8e1-0399-4ba4-9897-62d85cfa36bd"
- すべてのボリュームを一覧表示します。
- 簡単なスモーク・テストを実行します。
- ファイルをいくつかディスクに書き込んでから、これらのファイルの読み取りが可能であることを確認します。例えば、ホーム・ディレクトリーのバックアップ・コピーを作成して、アーカイブの内容を一覧表示してみてください。表示された結果が実際と同じであれば、問題ありません。また、元の親イメージで作成されたファイルも読み取ることができなければなりません。
root@host# tar zcvvf /data/idcuser2.tar.gz /home/idcuser root@host# tar ztvvf /data/idcuser2.tar.gz root@host# tar ztvvf /data/idcuser.tar.gz
- マシンをリブートしてから、ファイルシステムがマウントされていて、データにアクセスできることをテストします。
root@host# reboot root@host# tar ztvvf /data/idcuser.tar.gz
- ファイルをいくつかディスクに書き込んでから、これらのファイルの読み取りが可能であることを確認します。例えば、ホーム・ディレクトリーのバックアップ・コピーを作成して、アーカイブの内容を一覧表示してみてください。表示された結果が実際と同じであれば、問題ありません。また、元の親イメージで作成されたファイルも読み取ることができなければなりません。
子インスタンスの LVM を拡張するステップは以下のとおりです。
- 物理ボリューム (PV) を作成するために使用できるブロック・デバイスを確認します。
- ブロック・デバイスをスキャンします。2 つの新しいディスク、dev/vdd と /dev/vde にはパーティションがないことがわかります。また、vdc1 パーティションのサイズは 350GB のみであることもわかります。RAM ディスクは無視してください。
root@host# lvmdiskscan | grep -v ram /dev/localvg/datalv [ 849.99 GB] /dev/vda1 [ 101.94 MB] /dev/root [ 59.90 GB] /dev/vdb1 [ 500.00 GB] LVM physical volume /dev/vdc1 [ 350.00 GB] LVM physical volume /dev/vdd [ 500.00 GB] /dev/vde [ 500.00 GB] /dev/vdf1 [ 15.99 GB] 6 disks 16 partitions 0 LVM physical volume whole disks 2 LVM physical volumes
- ブロック・デバイスにパーティション・テーブルが含まれていないことを確認します。
root@host# fdisk -l | grep partition Disk /dev/vdd doesn't contain a valid partition table Disk /dev/vde doesn't contain a valid partition table
- vdc ブロック・デバイスに、パーティションを追加する余裕があることを確認します。
root@host# fdisk -l /dev/vdc Disk /dev/vdc: 536.8 GB, 536870912000 bytes 16 heads, 63 sectors/track, 1040253 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/vdc1 1 728177 367001176+ 8e Linux LVM
- ブロック・デバイスをスキャンします。2 つの新しいディスク、dev/vdd と /dev/vde にはパーティションがないことがわかります。また、vdc1 パーティションのサイズは 350GB のみであることもわかります。RAM ディスクは無視してください。
- Linux LVM タイプのパーティションを作成し、LVM 物理ボリューム (LVM PV) として使用できるように初期化します。
- fdisk 応答ファイルを確認します。
root@host# cat fdisk.lvm.partitions n p 1 t 8e w
- 構成スクリプトを生成します。このスクリプトによって、既存のパーティション・テーブルを削除し、パーティション・テーブルを読み取り直し、ブロック・デバイス上に ID が 8e のパーティション (Linux LVM) を作成し、そして LVM 物理ボリューム (LVM PV) として使用できるように Linux LVM パーティションを初期化します。
ddで削除されるブロックに関しては、そのバックアップを作成することをお勧めします。それには、dd if=device of=backupfile bs=4096 count=1のようなコードを使用することができます。詳細については、ddの man ページを参照してください。また、sfdiskを使用してパーティション・テーブルをバックアップすることもできます。これについても、man ページで詳細を確認してください。root@host# for i in $(fdisk -l 2>&1 | awk '/valid/{print $2}') do echo "# Partition and initialize LVM PV for device $i" echo dd if=/dev/zero of=$i bs=1024 count=1 # Clear partition table echo blockdev --rereadpt $i # Re-read partition table echo fdisk $i \< fdisk.lvm.partitions # Create Linux LVM partition echo pvcreate ${i}1 # Initialize Physical Volume echo -e "\n" done
このスクリプトは、以下のコマンドを生成します。これらのコマンドを実行する前に、正しいデバイスを使用していることを必ず確認してください。この確認を怠ると、データ損失という結果を招くおそれがあります。コマンドの対象として、有効なパーティション・テーブルが含まれていない 2 つのブロック・デバイスが表示されるはずです。
# Partition and initialize LVM PV for device /dev/vdd dd if=/dev/zero of=/dev/vdd bs=1024 count=1 blockdev --rereadpt /dev/vdd fdisk /dev/vdd < fdisk.lvm.partitions pvcreate /dev/vdd1 # Partition and initialize LVM PV for device /dev/vde dd if=/dev/zero of=/dev/vde bs=1024 count=1 blockdev --rereadpt /dev/vde fdisk /dev/vde < fdisk.lvm.partitions pvcreate /dev/vde1
- LVM パーティションが作成されていることを確認します。
root@host# fdisk -l | grep LVM /dev/vdb1 1 1040253 524287480+ 8e Linux LVM /dev/vdc1 1 728177 367001176+ 8e Linux LVM /dev/vdd1 1 1040253 524287480+ 8e Linux LVM /dev/vde1 1 1040253 524287480+ 8e Linux LVM
- ここで、以下の 2 つの選択肢のどちらかを選べます。
pvresizeを使用して 350GB のパーティションを拡張する- 新しい物理ボリューム (PV) を作成する
既存の物理ボリューム (PV) のサイズを変更する方が複雑で、エラーが起こりやすい方法です。具体的には、以下の作業が必要となります。
- データをアンマウントします (
umount/data)。 - ボリューム・グループ (VG) を無効にします (
vgchange -an localvg)。 - ディスク上の古いパーティション・テーブルを削除し、同じ
Startオフセットとデフォルトの (最大化)Endを使用して新しいパーティションを作成します。 - パーティションを拡張します (
pvresize /dev/vdc1)。 - 通常のステップに従って、論理ボリューム (LV) およびファイルシステムのサイズを変更します (
lvresize、e2fsck、resize2fsなど)。
既存の物理ボリューム (PV) のサイズを変更する方法については、この記事で詳しくは説明しません。この方法を選択する場合には、必ずデータのバックアップを取り、何をしようとしているのかを十分に理解してください。パーティション・テーブルのバックアップを (
ddを使用して) 取っておくこともお勧めします。 - 選択肢 1: 既存の物理ボリューム (PV) のサイズを変更する
参考として以下に、既存の物理ボリューム (PV) のサイズを変更するために必要なステップを記載します。この選択肢を選択する場合には、内容をよく理解して、
debug、verbose、およびtestフラグを使用してコマンドをテストすること、結果をテストすること、そしてデータの最新バックアップを用意しておくことが必要です。選択肢 1 を完了したら、「LVM 構成を確認する」のセクションまでスキップしてください。
選択肢 1 を選択しない場合は、以下の選択肢 2 に進んで、既存の 350GB のパーティションの隣に別の 150GB のパーティションを作成し、それを使用してボリューム・グループ (VG) を拡張します。
32-bit Linux インスタンスを使用しているとしたら、既存の物理ボリューム (PV) (/dev/vdb1) を 175GB から375GB に拡張するように選択肢 1 を変更する必要があります。ブロック・デバイスは、32-bit イメージでは異なる場合があることに注意してください。この記事のために行ったテストでは、ブロック・デバイスは
/dev/vdbでした。また、32-bit インスタンスではこれ以外のブロック・デバイスは存在しないため、vgextendのステップは省略します。root@host# umount /data root@host# vgchange -an localvg root@host# fdisk /dev/vdc Command (m for help): p Disk /dev/vdc: 536.8 GB, 536870912000 bytes 16 heads, 63 sectors/track, 1040253 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/vdc1 1 728177 367001176+ 8e Linux LVM Command (m for help): d Selected partition 1 Command (m for help): p Disk /dev/vdc: 536.8 GB, 536870912000 bytes 16 heads, 63 sectors/track, 1040253 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1040253, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1040253, default 1040253): Using default value 1040253 Command (m for help): p Disk /dev/vdc: 536.8 GB, 536870912000 bytes 16 heads, 63 sectors/track, 1040253 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/vdc1 1 1040253 524287480+ 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. root@host# blockdev --rereadpt /dev/vdc root@host# partprobe root@host# pvresize /dev/vdc1 root@host# vgextend localvg /dev/vdd1 /dev/vde1 root@host# lvresize -l 100%VG localvg/datalv Extending logical volume datalv to 1.95 TB Logical volume datalv successfully resized root@host# vgchange -ay localvg root@host# e2fsck -f /dev/localvg/datalv root@host# resize2fs /dev/localvg/datalv Resizing the filesystem on /dev/localvg/datalv to 524283904 (4k) blocks. The filesystem on /dev/localvg/datalv is now 524283904 blocks long. root@host# e2fsck -f /dev/localvg/datalv root@host# mount /data root@host# df -h | grep data /dev/mapper/localvg-datalv 2.0T 199M 1.9T 1% /data
- 選択肢 2: 350GB のファイルシステムのみが含まれるブロック・デバイスに、別のパーティションを作成する。
この例でそのブロック・デバイスに該当するのは /dev/vdc です。正しいパーティション・テーブルを編集していることを確実にしてください。ルート・ディスク・パーティション・テーブルを削除してしまうと、データ損失という結果につながります。ストレージ構成はそれぞれのイメージによって異なる可能性があるので、このステップをよく理解して、インスタンスでは必要に応じて修正しながら手動で実行することが重要です。詳細については、インスタンスで
man fdiskと入力してfdiskの man ページを読んでください。root@host# fdisk /dev/vdc The number of cylinders for this disk is set to 1040253. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (728178-1040253, default 728178): Using default value 728178 Last cylinder or +size or +sizeM or +sizeK (728178-1040253, default 1040253): Using default value 1040253 Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): p Disk /dev/vdc: 536.8 GB, 536870912000 bytes 16 heads, 63 sectors/track, 1040253 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/vdc1 1 728177 367001176+ 8e Linux LVM /dev/vdc2 728178 1040253 157286304 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table is used at the next reboot. Syncing disks.
以下は、この例での
fdiskに対する応答ファイルです。n p 2 t 2 8e w
- パーティションをアンマウントし、ボリューム・グループ (VG) を無効にしてから、パーティション・テーブルを読み取り直します。その後、ボリューム・グループ (VG) を有功にしてファイルシステムをマウントします (またはリブートします)。
root@host# umount /data # Umount the filesystem root@host# vgchange -an localvg # Deactivate the volume group root@host# blockdev --rereadpt /dev/vdc # Re-read the partition table # Inform OS of partition table changes: root@host# partprobe root@host# sleep 5; # Wait for partprobe to finish root@host# vgchange -ay localvg # Activate the volume group root@host# mount /data # Mount the filesystem
- 前に作成した 150GB パーティション上の新しい物理ボリューム (PV) を初期化します。これは、
lvmdiskscanを実行したときに、空であると示されたパーティションでもあります。root@host# pvcreate /dev/vdc2 Physical volume "/dev/vdc2" successfully created
- LVM 物理ボリューム (LVM PV) が作成されていることを確認します。/dev/vdc2 エントリーの横に
LVM physical volumeと表示されていれば、正常に作成されています。root@host# lvmdiskscan | grep -v ram /dev/localvg/datalv [ 849.99 GB] /dev/vda1 [ 101.94 MB] /dev/root [ 59.90 GB] /dev/vdb1 [ 500.00 GB] LVM physical volume /dev/vdc1 [ 350.00 GB] LVM physical volume /dev/vdc2 [ 150.00 GB] LVM physical volume /dev/vdd1 [ 500.00 GB] LVM physical volume /dev/vde1 [ 500.00 GB] LVM physical volume /dev/vdf1 [ 15.99 GB] 4 disks 17 partitions 0 LVM physical volume whole disks 4 LVM physical volumes
- 物理ボリューム (PV) の状況を確認します。3 つの物理ボリューム (PV) が localvg ボリューム・グループ (VG) で使用されていないことがわかるはずです。
root@host# [root@vhost0498 ~]# pvs PV VG Fmt Attr PSize PFree /dev/vdb1 localvg lvm2 a- 500.00G 0 /dev/vdc1 localvg lvm2 a- 350.00G 0 /dev/vdc2 lvm2 -- 150.00G 150.00G /dev/vdd1 lvm2 -- 500.00G 500.00G /dev/vde1 lvm2 -- 500.00G 500.00G
- fdisk 応答ファイルを確認します。
- ボリューム・グループ (VG) を拡張します。
pvsを実行したときに一覧表示された新しい物理ボリューム (PV) を組み込むように、localvgボリューム・グループ (VG) を拡張します。root@host# vgextend localvg /dev/vdc2 /dev/vdd1 /dev/vde1 Volume group "localvg" successfully extended
- 結果を確認します。一覧表示されたすべての物理ボリューム (PV) で構成される 2TB のボリューム・グループ (VG) が示されているはずです。また、
pvsはすべての物理ボリューム (PV) をlocalvgで使用されている物理ボリューム (PV) として一覧表示するようになります。したがって、約 1,150GB の空きがあるはずです。root@host# vgdisplay --partial --verbose Partial mode. Incomplete volume groups will be activated read-only. Finding all volume groups Finding volume group "localvg" --- Volume group --- VG Name localvg System ID Format lvm2 Metadata Areas 5 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 5 Act PV 5 VG Size 1.95 TB PE Size 4.00 MB Total PE 511995 Alloc PE / Size 217598 / 849.99 GB Free PE / Size 294397 / 1.12 TB VG UUID 8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA --- Logical volume --- LV Name /dev/localvg/datalv VG Name localvg LV UUID 5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj LV Write Access read/write LV Status available # open 1 LV Size 849.99 GB Current LE 217598 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Physical volumes --- PV Name /dev/vdb1 PV UUID YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36 PV Status allocatable Total PE / Free PE 127999 / 0 PV Name /dev/vdc1 PV UUID VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls PV Status allocatable Total PE / Free PE 89599 / 0 PV Name /dev/vdc2 PV UUID cLdGD3-MVIp-sdA7-KGi3-RtBT-xJWI-gobVSl PV Status allocatable Total PE / Free PE 38399 / 38399 PV Name /dev/vdd1 PV UUID wFyYax-NCn6-2egW-FiUc-3GTB-u77k-evVsc6 PV Status allocatable Total PE / Free PE 127999 / 127999 PV Name /dev/vde1 PV UUID ijAwMZ-3Qoc-RPoi-n9EK-vkcM-pd40-9LXlnC PV Status allocatable Total PE / Free PE 127999 / 127999
- 論理ボリューム (LV) を拡張します (この記事では、ボリューム・グループ (VG) の限界まで拡張します)。今度は
-Lフラグを使用してサイズを指定します。新しい論理ボリューム (LV) を作成することもできます (これが推奨される方法です。fsckで大きなファイルシステムをスキャンすると、時間がかかることを思い出してください)。root@host# lvresize -l 100%VG localvg/datalv Extending logical volume datalv to 1.95 TB Logical volume datalv successfully resized
- 結果を確認します。約 2TB の論理ボリューム (LV) になっているはずです。
root@host# lvdisplay --- Logical volume --- LV Name /dev/localvg/datalv VG Name localvg LV UUID 5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj LV Write Access read/write LV Status available # open 1 LV Size 1.95 TB Current LE 511995 Segments 5 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
- ファイルシステムを拡張します。
- ファイルシステムを拡張するには、アンマウントしてから、
fsckとresize2fsを実行します。root@host# df -h | grep data # Verify FS size 837G 201M 794G 1% /data root@host# umount /data # Umount the filesystem root@host# e2fsck -f /dev/localvg/datalv # Run a filesystem check e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/localvg/datalv: 13/111411200 files (7.7% non-contiguous), 3547488/222820352 blocks root@host# resize2fs /dev/localvg/datalv # Grow filesystem to LV limits root@host# e2fsck -f /dev/localvg/datalv # Run another FS check root@host# mount /data # Mount filesystem resize2fs 1.39 (29-May-2006) Resizing the filesystem on /dev/localvg/datalv to 524282880 (4k) blocks. The filesystem on /dev/localvg/datalv is now 524282880 blocks long.
- 新しいディスク・ファイルシステムのサイズを確認します。
root@host# df -h | grep data /dev/mapper/localvg-datalv 2.0T 199M 1.9T 1% /data
- ファイルシステムを拡張するには、アンマウントしてから、
以下のステップに従って、LVM 構成を確認します。
- スモーク・テストを実行します。徹底的なテストを行うには、ファイルシステムがいっぱいになるまでデータを取り込むか、ファイルシステム・ベンチマークを使用してください。テスト・ファイルのサイズは、インスタンスに応じて調整してください。例えば、32-bit
Gold インスタンスでは (
count=307200を設定して) 300GB のテスト・ファイルだけを使用することになります。root@host# tar zcvvf /data/idcuser3.tar.gz /home/idcuser root@host# tar ztvvf /data/idcuser3.tar.gz root@host# tar ztvvf /data/idcuser.tar.gz # Create a 800GB test file: root@host# nohup dd if=/dev/zero of=/data/800GBtestfile bs=1M \ count=819200 > nohup.out 2>nohup.err & # Monitor file growth root@host# while :; do ls -lha /data/800GBtestfile ; sleep 10; done -rw-r--r-- 1 root root 800G 2011-03-28 18:09 /data/800GBtestfile
- LVM 構成を確認します。
root@host# vgdisplay --partial --verbose Partial mode. Incomplete volume groups will be activated read-only. Finding all volume groups Finding volume group "localvg" --- Volume group --- VG Name localvg System ID Format lvm2 Metadata Areas 5 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 5 Act PV 5 VG Size 1.95 TB PE Size 4.00 MB Total PE 511995 Alloc PE / Size 511995 / 1.95 TB Free PE / Size 0 / 0 VG UUID 8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA --- Logical volume --- LV Name /dev/localvg/datalv VG Name localvg LV UUID 5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj LV Write Access read/write LV Status available # open 1 LV Size 1.95 TB Current LE 511995 Segments 5 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Physical volumes --- PV Name /dev/vdb1 PV UUID YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36 PV Status allocatable Total PE / Free PE 127999 / 0 PV Name /dev/vdc1 PV UUID VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls PV Status allocatable Total PE / Free PE 89599 / 0 PV Name /dev/vdc2 PV UUID cLdGD3-MVIp-sdA7-KGi3-RtBT-xJWI-gobVSl PV Status allocatable Total PE / Free PE 38399 / 0 PV Name /dev/vdd1 PV UUID wFyYax-NCn6-2egW-FiUc-3GTB-u77k-evVsc6 PV Status allocatable Total PE / Free PE 127999 / 0 PV Name /dev/vde1 PV UUID ijAwMZ-3Qoc-RPoi-n9EK-vkcM-pd40-9LXlnC PV Status allocatable Total PE / Free PE 127999 / 0
- リブートした後も、すべてが正常に動作することを確認します。
- リブートします。
- アンマウント、
fsck、マウントを順に行い、読み取り/書き込みアクセスをテストします。
ここでは、LVM を管理する際によく使用されるコマンドを見て行きます。
- 物理ボリューム (PV)
pvdisplay― 物理ボリューム (PV) の属性を表示します。pvs― 物理ボリューム (PV) に関する情報をレポートします。- ボリューム・グループ (VG)
vgdisplay― ボリューム・グループ (VG) の属性を表示します。vgs― ボリューム・グループ (VG) に関する情報をレポートします。- 論理ボリューム (LV)
lvdisplay― 論理ボリューム (LV) の属性を表示します。lvs― 論理ボリューム (LV) に関する情報をレポートします。
pvck― 物理ボリューム (PV) のメタデータをチェックします。vgck― ボリューム・グループ (VG) のメタデータをチェックします。
ボリューム・グループ (VG) および論理ボリューム (LV) の名前変更
vgrename― ボリューム・グループ (VG) の名前を変更します。lvrename― 論理ボリューム (LV) の名前を変更します。
ディスクまたはパーティション、論理ボリューム (LV)、ファイルシステムのサイズ変更
ファイルシステムおよび論理ボリューム (LV) を縮小するときは尚のこと、サイズを変更する際には以下の点に細心の注意を払ってください。
- 入力ミス、ファイルシステムのサイズ変更ツールに含まれるバグ、LVM、サイズ・パラメーター標準 (GiB と GB) の違い、さらにこの記事における誤りにも注意すること。
- 一貫したサイズ単位 (例えば、512 バイト単位のセクター) を使用すること。
- 誤差を許容するための余裕を残しておくこと。
debug、verbose、およびtestフラグを使用した LVM コマンドでテストすること。- データを保管する前に、新しいファイルシステムをテストすること。
- 最新のテスト済みバックアップをすぐに使用できるように用意しておくこと。
- LVM およびファイルシステム・ツールをよく理解し、同様の構成を持つテスト・マシンでツールをテストしてみること。
LVM および ext2/3/4 ファイルシステムのサイズ変更によく使用されるコマンドには以下のものがあります。
pvresize― LVM2 で使用するディスクまたはパーティションのサイズを変更します。lvextend― 論理ボリューム (LV) のサイズを増やします。lvreduce― 論理ボリューム (LV) のサイズを減らします。lvresize― 論理ボリューム (LV) のサイズを変更します。e2fsck― Linux ext2/ext3/ext4 ファイルシステムをチェックします。resize2fs― ext2/ext3/ext4 ファイルシステムのサイズを変更します。
lvresize、e2fsck、resize2fs の使い方については、この記事ですでに説明しました。
ファイルシステムの変更後のサイズを下回るサイズに論理ボリューム (LV) を縮小すると、(突然、取り返しがつかないほどの) データ損失を招くことがあります。このような事態は避けなければなりません。参考として以下に、論理ボリューム (LV) を縮小するためのワークフローを示します。
- ファイルシステムをアンマウントします。
- ファイルシステムのチェックを実行します。
- ファイルシステムを縮小します。
- 論理ボリューム (LV) を縮小します。
以下に示すのは、別の論理ボリューム (LV) のためのスペースを空けるように、ファイルシステムと関連論理ボリューム (LV) を縮小する例です。
# Umount the FS
root@host# umount /data
# Check the FS
root@host# e2fsck -f /dev/localvg/datalv
# Shrink the FS first
root@host# resize2fs -p /dev/localvg/datalv 900G
# Shrink the LV to match the FS size
root@host# lvresize /dev/localvg/datalv --size 900G
# Check the FS
root@host# e2fsck -f /dev/localvg/datalv
# Create a new LV and FS
root@host# lvcreate -A y -L 500GB -n backuplv localvg
root@host# mkfs.ext3 -L backuplv /dev/localvg/backuplv
root@host# mkdir /backup; mount /dev/localvg/backuplv /backup
root@host# mount /data
root@host# df -h | egrep "backup|data"
/dev/mapper/localvg-backuplv
493G 198M 467G 1% /backup
/dev/mapper/localvg-datalv
886G 37G 823G 5% /data |
上記は単なる一例として受け取ってください。この内容をこのコードをプロジェクトにコピー・アンド・ペーストしても、データを保持できるとは限りません。また、ボリューム・グループ (VG) から物理ボリューム (PV) を削除する方法などの他のトピックについても LVM のドキュメントで調べておくことをお勧めします。
LVM メタデータは、バックアップしてリストアすることができます。デフォルトでは、/etc/lvm/backup にバックアップされます。以下に記載するのは、LVM メタデータのバックアップ/リストアを管理するために使用するコマンドです。
vgcfgbackup― ボリューム・グループ (VG) 記述子領域をバックアップしますvgcfgrestore― ボリューム・グループ (VG) 記述子領域をリストアします
スナップショットの使用方法についての詳細は、LVM HOWTO の「Taking a Backup Using Snapshots」セクションを参照してください。スナップショットを操作するためのコマンドを以下に記載します。
lvcreate― 既存のボリューム・グループ (VG) 内に論理ボリューム (LV) を作成します。-sフラグを指定すると、論理ボリューム (LV) スナップショットも作成されます。lvconvert― 論理ボリューム (LV) をリニア・ボリュームからミラー化ボリュームまたはスナップショットに変換します。
LVM スナップショットは、ファイルシステムを凍結状態で取得するために使用します。スナップショットを取ると、ファイルシステムの変更が記録された場所に、新規論理ボリューム (LV) が割り当てられます。
スナップショット・ボリュームは、フルになった時点で破棄されます (使用不可になります)。その場合、スナップショットをリリースして元の論理ボリューム (LV) をオンラインに戻す必要があります。
スナップショット・ボリュームは、想定される変更量を上回るサイズでなければなりません。
元の論理ボリューム (LV) と同じサイズのスナップショット・ボリュームを作成すれば、オーバーフローすることはありません。
スナップショットは通常、一貫したバックアップを取得するために使用されます。
参考として以下に、スナップショットを操作する場合の一般的なワークフローを記載します。
# Make sure your filesystem is in a consistent state at this point. # You may want to use something like "lsof | grep /data" or umount the filesystem, etc. # Create the snapshot root@host# lvcreate -L50G -s -n dbbkp /dev/localvg/datalv # Verify the snapshot root@host# lvdisplay # You can restart work on your original FS. # Mount the snapshot root@host# mkdir -p /mnt/localvg/dbbkp root@host# mount /dev/localvg/dbbkp /mnt/localvg/dbbkp # Perform your backup. While you're backing up, # your database is already back up and running. # Hopefully you have something better than: root@host# cd /mnt/localvg/dbbkp; tar zcvpf ~/backup.tar.gz . # Release the snapshot root@host# umount /mnt/localvg/dbbkp root@host# lvremove /dev/localvg/dbbkp root@host# lvdisplay |
LVM スナップショットを適切なバックアップの代わりにしようとはしないでください。スナップショットはかなり短時間でフルになるものです。
ディスク UUID および LVM バックアップをリストアする
LVM メタデータが破損した場合、状況によってはディスク UUID をリストアする必要が出てきます。注意する点として、UUID をどのようにリストアしようと考えているかに関わらず、ディスクのバックアップは必ず取ってください。もし私が、データ・リカバリー・ステップの一環として実際の本番システムでバックアップを取るとしたら、(最新のバックアップをすぐに使用できない場合は) ある程度の時間を取って、ボリューム・グループ (VG) のブロック・デバイスの部分を外部ストレージなどに複製することでしょう。
参考として以下に、ディスク UUID をリストアする際のワークフローを示します。このワークフローを適応させてテストしてください (debug、test、および verbose フラグを使用すること)。私の場合、このシナリオをテストするために、故意にメタデータを破損させました (root@host# pvchange -v -u $(uuidgen) /dev/vdb1 を実行しました)。続いて、UUID
を使用して /etc/lvm/backup
に置かれたバックアップ・ファイルからリストアを試行しました。メタデータを破損させた後に pvscan を実行すると、「Couldn't find device with uuid IffYl-9cfa-BYhZ-Wt5h-7UOi-YWLx-US8wJ3 (uuid IffYl-9cfa-BYhZ-Wt5h-7UOi-YWLx-US8wJ3 のデバイスが見つかりません)」というレポートが返ってきました。
- メタデータを確認します。
root@host# vgck -dvvv
- ボリューム・グループ (VG) を無効にします。
root@host# vgchange -an localvg
- LVM バックアップを利用して、破損したディスク UUID をリストアします。正しい UUID を使用してください。
root@host# pvcreate -ff --restorefile /etc/lvm/backup/localvg \ --uuid 1IffYl-9cfa-BYhZ-Wt5h-7UOi-YWLx-US8wJ3 /dev/vdb1 - バックアップから構成をリストアします。
root@host# vgcfgrestore --file /etc/lvm/backup/localvg localvg
- ボリューム・グループ (VG) を有効にします。
root@host# vgchange -ay localvg
- ファイルシステムのチェックを実行して、データの完全性を確認します。
グラフィカル・ツール system-config-lvm および yast2
LVM を管理するには、グラフィカル・ツールを使用することもできます。VNC を使用してインスタンスに接続する方法、またはワークステーションで表示のエクスポートを実行するように SSH の X11 フォワーディングを構成する方法についての詳細は、ユーザー・ガイドを参照してください。VNC が使用するポートは、デフォルトでファイアウォールによって保護されています。これについても、ユーザー・ガイドに説明が載っています。IBM SmartCloud Enterprise V1.4 に関するこの記事を執筆している時点では、ユーザー・ガイドでこれに該当するセクション名は「Connecting to your Linux instance with VNC」となっています。
VNC を使用してインスタンスに接続し、yast2 を起動して「System (システム)」 >
「Partitioner (パーティショナー)」に進み、「System View (システム・ビュー)」で「Volume Management
(ボリューム管理)」を展開します。YaST 2 Expert Partitioner では、ボリューム・グループ (VG) や論理ボリューム (LV) の作成、削除、拡張、そしてファイルシステムの作成などの操作を yast2 コマンドを使って実行することができます。
図 2. YaST 2 Expert Partitioner
YaST 2 Expert Partitioner の使用方法についての詳細は、「Novell SUSE Linux Enterprise Server Storage Administration Guide」を参照してください。
Red Hat Linux と system-config-lvm
Red Hat では、グラフィカル・インターフェースから system-config-lvm を使用して Logical Volume Management を実行することができます。
図 3. system-config-lvm を使用した Red Hat Logical Volume Management
これまで説明したステップに従えば、Linux イメージの一時ストレージを使用して LVM を構成することができます。以下に、この記事で説明した内容をまとめます。
- LVM のコンポーネントおよび用途についての基礎と、この記事で使用する表記、そしてテスト環境のセットアップ方法について説明しました。
- Bronze 64 インスタンスを Platinum 64 インスタンスにアップグレードする方法を説明するためのシナリオのフローを概説しました。このフローには、以下の作業が含まれています。
- Bronze 64ビットの Linux インスタンス (RHEL 5.5 または SLES 11 SP1) をプロビジョニングする
- 複数の空のブロック・デバイスにまたがる LVM を構成する
- プライベート・イメージを取得する
- 取得したイメージから新しいインスタンスを Platinum インスタンスとしてデプロイする
- 500GB のブロック・デバイスの残りのスペースと追加の 250GB のブロック・デバイスから新しい LVM パーティションを作成する
- 上記のステップに代わるステップとして、pvresize を使用して既存の物理ボリューム (PV) を拡張し、さらに 2 つの 500GB のブロック・デバイスを (パーティショニングした後) ボリューム・グループ (VG) に追加する
- 論理ボリューム (LV) およびファイルシステムのサイズを変更する
- 下位レベルの親イメージで LVM を構成する方法を詳細に説明しました。
- アップグレードした子インスタンスで LVM を構成する方法を詳細に説明しました。この方法には、以下の作業が含まれます。
- プライベート・イメージを取得する
- 取得したイメージから新しいインスタンスをデプロイする
- 子インスタンスの LVM 構成を確認する
- 子インスタンス内で LVM を拡張する
- 拡張後の LVM 構成の「スモーク・テスト」を実行する
- LVM を管理する際によく使用されるコマンドのリストを示しました。
- グラフィカル・コマンド
yast2(SLES の場合) およびsystem-config-lvm(RHEL の場合) を使用して LVM を管理する場合について簡単に説明しました。
このトピックをさらに深く調べるには、developerWorks Linux リソースにアクセスしてください。IBM SmartCloud Enterprise の効果的な使用方法についての詳細は、囲み記事および「参考文献」セクションに記載されているトピックを調べてください。
学ぶために
- Red Hat Enterprise Linux の「LVM
管理ガイド」に、Red Hat Linux での LVM 構成についての説明が記載されています。
- Red Hat Enterprise Linux の「Storage
Administration Guide」で、Red Hat Linux で system-config-lvm を使用して LVM を構成する方法を調べてください。
- Novell SuSE Linux Enterprise Server の「ストレージ管理ガイド」に、SuSE
Linux での LVM 構成についての説明が記載されています。
- 「一時ストレージの基本を理解する」では、IBM
Cloud でのインスタンス・サイズのオプションごとに Linux オペレーティング・システムで使用可能な仮想ディスク・ドライブのレイアウトについて詳しく説明しています。
- Linux
Documentation Project Wiki - LVM HOWTO は、LVM の最も有力な情報源です。
- 「Recovering
a Lost LVM Volume Disk」では実例を詳説し、重要なスキルについて説明しています。
- 「Device-mapper and LVM2 Wiki」には、設計マニュアルとエンド・ユーザー向けマニュアル、ならびに FAQ ページがあります。
- ウィキペディアの「論理ボリュームマネージャ」ページに、機能と実装の詳細がリストされています。
- IBM Cloud でのタスクの実行方法についての詳細は、以下のリソースにアクセスしてください。
- 「Windows インスタンスとの間でのファイルのアップロードとダウンロード」
- 「Windows Server 2008 R2 に IIS Web サーバーをインストールする」
- 「Linux のコマンド・ラインを使用して IBM Cloud インスタンスを作成する」
- 「Create an IBM Cloud instance with the Windows command line」
- 「Extend your corporate network with the IBM Cloud」
- 「IBM Cloud での高可用性アプリケーション」
- 「カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する」
- 「Windows-targeted approaches to IBM Cloud provisioning」
- 「Rapid Deployment Service を使用して製品をデプロイする」
- 「Integrate your authentication policy using a proxy」
- developerWorks
のクラウド開発者向けリソースで、クラウド開発プロジェクトを作成しているアプリケーションおよびサービス開発者たちの知識と経験を調べて共有してください。
- 次のステップ: IBM SmartCloud
Enterprise にアクセスする方法を調べてください。
製品や技術を入手するために
- IBM SmartCloud Enterprise
で使用できる製品イメージを調べてください。
議論するために
- developerWorks
コミュニティーのクラウド・コンピューティング・グループの一員になってください。
- developerWorks でクラウドに関する優れたブログのすべてを読んでください。
- 専門家のネットワークであるとともに、互いにつながりを持ち、共有、協力するためのコミュニティー・ツールが集められている
developerWorks コミュニティーに加わってください。
