IBM SmartCloud Enterprise についてのヒント: Linux Logical Volume Manager を構成する

より大きな物理ボリューム・オファリングを収容できるように Linux LVM とファイルシステムを構成する

この記事では、Linux LVM (Logical Volume Manager) を使用して 64-bit Linux インスタンスをセットアップする方法 (Bronze オファリングから始めます)、プライベート・イメージを取得して、そのイメージから新しいインスタンスを異なるオファリング (Platinum オファリング) としてデプロイする方法、そして LVM ボリュームとファイルシステムを拡張して新しい物理ボリュームを収容する方法を説明します。さらにLinux LVM タイプのパーティションを使って LVM を複数の物理ボリュームにわたって構成し、管理する方法についても説明します。

Mihai Criveti (mihai.criveti@ro.ibm.com), IT Architect, IBM

Mihai Criveti photoMihai Criveti は IT アーキテクトであり、主にクラウド・コンピューティングと仮想化を中心とした業務を行っています。彼が関心を持っている分野には、クラウド・コンピューティング、仮想化、エンタープライズ・アーキテクチャー、SOA、ミドルウェア、デジタル・フォレンジック、UNIX システムなどがあります。



2011年 6月 17日

この記事では、以下の内容を学びます。

  • LVM (Linux Logical Volume Manager) を使用して 64-bit Linux インスタンス (Bronze オファリング) をセットアップします。
  • プライベート・イメージを取得して、新規 Platinum インスタンスとしてプロビジョニングします。
  • 新しい物理ボリュームを収容できるように LVM ボリュームとファイルシステムを拡張します。
  • Linux LVM タイプのパーティションを使って、複数の物理ボリュームで LVM を構成します。

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) の関係
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 を構成するステップから取り掛かります。

  1. 物理ボリューム (PV) を作成するために使用できるブロック・デバイスを確認します。それには、dmesg; cat /proc/partitions を使用してカーネル・リング・バッファーとパーティションを確認してから、以下のステップに従います。
    1. ブロック・デバイスをスキャンします。パーティションのないディスクには、/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
    2. ブロック・デバイスにパーティション・テーブルが含まれていないことを確認します。
      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
  2. Linux LVM タイプのパーティションを作成し、LVM 物理ボリューム (LVM PV) として使用できるように初期化します。
    1. fdisk 応答ファイルを作成します。以下の内容を初めて実行するときには、fdisk コマンドを実行し、以下の内容を手で入力する必要があります。
      root@host# cat > fdisk.lvm.partitions << EOF
      
      n
      p
      1
      
      
      t
      8e
      w
      EOF
    2. 構成スクリプトを生成します。このスクリプトによって、既存のパーティション・テーブルを削除し、パーティション・テーブルを読み取り直し、ブロック・デバイス上に 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 への追加対象とするディスクに応じて手動で実行する必要があります。この結果を単純にインスタンスにカット・アンド・ペーストすることは禁物です。

    3. LVM パーティションが作成されていることを確認します。
      root@host# fdisk -l  | grep LVM
      
          /dev/vdb1               1     1040253   524287480+  8e  Linux LVM
          /dev/vdc1               1      728177   367001176+  8e  Linux LVM
    4. 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
  3. 新しいボリューム・グループ (VG) を作成します。
    1. 前のステップで定義した物理ボリューム (PV) と自動バックアップ・オプション (-A) を使用して、ボリューム・グループ (VG) を作成します (この例では、localvg という名前を付けます)。
      root@host# vgcreate -A y localvg /dev/vdb1 /dev/vdc1
      
          Volume group "localvg" successfully created
    2. ボリューム・グループ (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
  4. 新しい論理ボリューム (LV) を作成します。
    1. 必要なサイズの新しいリニア論理ボリューム (LV) を作成します。サイズを指定したり (-L 100GB)、ボリューム・グループ (VG) のパーセンテージとして指定したり (-l 20%VG) するなどの追加オプションについては、lvcreate の man ページを参照してください。
      root@host# lvcreate -A y -l 100%VG -n datalv localvg
      
          Logical volume "datalv" created
    2. 論理ボリューム (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
  5. 新しいファイルシステムを作成してマウントします。
    1. 新規ファイルシステムのマウント・ポイントを作成します。
      root@host# mkdir /data
    2. 論理ボリューム (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 を大容量のファイルシステムで実行すると時間がかかります。データ・リカバリーについても同様です。

    3. ブート時に自動マウントできるように、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 と指定してください。

    4. ファイルシステムをマウントします。
      root@host# mount /data
    5. ファイルシステムがマウントされていることを確認します。
      root@host# mount | grep data
      
          /dev/mapper/localvg-datalv on /data type ext3 (rw)
  6. SLES で LVM ブート・サービスを構成します。このステップは RHEL では不要です。
    1. 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
    2. 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
  7. LVM 設定を確認してドキュメント化します。
    1. すべてのボリュームを表示します。
      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
    2. ブロック・デバイスの 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"
  8. 簡単なスモーク・テストを実行します。
    1. ファイルをいくつかディスクに書き込んでから、これらのファイルの読み取りが可能であることを確認します。例えば、ホーム・ディレクトリーのバックアップ・コピーを作成して、アーカイブの内容を一覧表示してみてください。表示された結果が実際と同じであれば、問題ありません。
      root@host# tar zcvvf /data/idcuser.tar.gz /home/idcuser
      root@host# tar ztvvf /data/idcuser.tar.gz
    2. マシンをリブートしてから、ファイルシステムがマウントされていて、データにアクセスできることをテストします。
      root@host# reboot
      root@host# tar ztvvf /data/idcuser.tar.gz
    3. この時点で、fstabLABEL 表記を使用することもできます。
      LABEL=datalv  /data        ext3    defaults        0 1
    4. 新しい LABEL デバイス表記をテストするために、手動でファイルシステムをアンマウントしてからマウントし、リブートしてスモーク・テストを実行します。

子インスタンスの構成

このセクションでは、以下のステップを説明します。

  • プライベート・イメージを取得して、そのイメージから新しいインスタンスをデプロイします。
  • 子インスタンスの LVM 構成を確認します。
  • 子インスタンスの LVM を拡張します。
  • 拡張後に LVM 構成を再確認します。

プライベート・イメージを取得して、そのイメージから新しいインスタンスをデプロイする

例えば、Bronze (または Silver や Gold) のインスタンスをしばらく使用しているうちに、これよりも高いレベルのオファリングにアップグレードする必要が出てきたとします。インスタンスからプライベート・イメージを取得して、そのイメージから新しいインスタンスをデプロイするには、ターゲットに上のレベルのオファリング (この例では Platinum) を選択してください (オファリングをアップグレードすると、ボリューム・グループ (VG) に追加できるストレージのサイズが増えます)。オファリングのアップグレードは、アプリケーションに影響を及ぼします。それは、イメージを作成する間、インスタンスが停止され、作成されたイメージからデプロイされたインスタンスのホスト名、IP アドレス、そしてストレージ構成は前とは異なるためです。アップグレード・ステップを行う際には、これらの変更を考慮してください。また、プライベート・イメージを取得する前にデータをバックアップしておくことも考慮する必要があります。

子インスタンスの LVM 構成を確認する

子インスタンスの LVM 構成を確認するステップは以下のとおりです。

  1. 新しいインスタンスで LVM が引き続き正常に動作することを確認します。それにはまず、LVM 設定をドキュメント化するところから始めます。
    1. すべてのボリュームを一覧表示します。
      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
    2. ブロック・デバイスの 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"
  2. 簡単なスモーク・テストを実行します。
    1. ファイルをいくつかディスクに書き込んでから、これらのファイルの読み取りが可能であることを確認します。例えば、ホーム・ディレクトリーのバックアップ・コピーを作成して、アーカイブの内容を一覧表示してみてください。表示された結果が実際と同じであれば、問題ありません。また、元の親イメージで作成されたファイルも読み取ることができなければなりません。
      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
    2. マシンをリブートしてから、ファイルシステムがマウントされていて、データにアクセスできることをテストします。
      root@host# reboot
      root@host# tar ztvvf /data/idcuser.tar.gz

子インスタンスの LVM を拡張する

子インスタンスの LVM を拡張するステップは以下のとおりです。

  1. 物理ボリューム (PV) を作成するために使用できるブロック・デバイスを確認します。
    1. ブロック・デバイスをスキャンします。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
    2. ブロック・デバイスにパーティション・テーブルが含まれていないことを確認します。
      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
    3. 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. Linux LVM タイプのパーティションを作成し、LVM 物理ボリューム (LVM PV) として使用できるように初期化します。
    1. fdisk 応答ファイルを確認します。
      root@host# cat fdisk.lvm.partitions
      
          n
          p
          1
          
          
          t
          8e
          w
    2. 構成スクリプトを生成します。このスクリプトによって、既存のパーティション・テーブルを削除し、パーティション・テーブルを読み取り直し、ブロック・デバイス上に 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
    3. 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
    4. ここで、以下の 2 つの選択肢のどちらかを選べます。
      1. pvresize を使用して 350GB のパーティションを拡張する
      2. 新しい物理ボリューム (PV) を作成する

      既存の物理ボリューム (PV) のサイズを変更する方が複雑で、エラーが起こりやすい方法です。具体的には、以下の作業が必要となります。

      • データをアンマウントします (umount/data)。
      • ボリューム・グループ (VG) を無効にします (vgchange -an localvg)。
      • ディスク上の古いパーティション・テーブルを削除し、同じ Start オフセットとデフォルトの (最大化) End を使用して新しいパーティションを作成します。
      • パーティションを拡張します (pvresize /dev/vdc1)。
      • 通常のステップに従って、論理ボリューム (LV) およびファイルシステムのサイズを変更します (lvresizee2fsckresize2fs など)。

      既存の物理ボリューム (PV) のサイズを変更する方法については、この記事で詳しくは説明しません。この方法を選択する場合には、必ずデータのバックアップを取り、何をしようとしているのかを十分に理解してください。パーティション・テーブルのバックアップを (dd を使用して) 取っておくこともお勧めします。

    5. 選択肢 1: 既存の物理ボリューム (PV) のサイズを変更する

      参考として以下に、既存の物理ボリューム (PV) のサイズを変更するために必要なステップを記載します。この選択肢を選択する場合には、内容をよく理解して、debugverbose、および 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
    6. 選択肢 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
    7. パーティションをアンマウントし、ボリューム・グループ (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
    8. 前に作成した 150GB パーティション上の新しい物理ボリューム (PV) を初期化します。これは、lvmdiskscan を実行したときに、空であると示されたパーティションでもあります。
      root@host# pvcreate /dev/vdc2
      
          Physical volume "/dev/vdc2" successfully created
    9. 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
    10. 物理ボリューム (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
  3. ボリューム・グループ (VG) を拡張します。
    1. pvs を実行したときに一覧表示された新しい物理ボリューム (PV) を組み込むように、localvg ボリューム・グループ (VG) を拡張します。
      root@host# vgextend localvg /dev/vdc2 /dev/vdd1 /dev/vde1
      
          Volume group "localvg" successfully extended
    2. 結果を確認します。一覧表示されたすべての物理ボリューム (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
    3. 論理ボリューム (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
    4. 結果を確認します。約 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
  4. ファイルシステムを拡張します。
    1. ファイルシステムを拡張するには、アンマウントしてから、fsckresize2fs を実行します。
      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.
    2. 新しいディスク・ファイルシステムのサイズを確認します。
      root@host# df -h | grep data
      
          /dev/mapper/localvg-datalv
          2.0T  199M  1.9T   1% /data

LVM 構成を確認する

以下のステップに従って、LVM 構成を確認します。

  1. スモーク・テストを実行します。徹底的なテストを行うには、ファイルシステムがいっぱいになるまでデータを取り込むか、ファイルシステム・ベンチマークを使用してください。テスト・ファイルのサイズは、インスタンスに応じて調整してください。例えば、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
  2. 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
  3. リブートした後も、すべてが正常に動作することを確認します。
    1. リブートします。
    2. アンマウント、fsck、マウントを順に行い、読み取り/書き込みアクセスをテストします。

LVM を管理するためによく使用されるコマンド

ここでは、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 バイト単位のセクター) を使用すること。
  • 誤差を許容するための余裕を残しておくこと。
  • debugverbose、および test フラグを使用した LVM コマンドでテストすること。
  • データを保管する前に、新しいファイルシステムをテストすること。
  • 最新のテスト済みバックアップをすぐに使用できるように用意しておくこと。
  • LVM およびファイルシステム・ツールをよく理解し、同様の構成を持つテスト・マシンでツールをテストしてみること。

LVM および ext2/3/4 ファイルシステムのサイズ変更によく使用されるコマンドには以下のものがあります。

  • pvresize ― LVM2 で使用するディスクまたはパーティションのサイズを変更します。
  • lvextend ― 論理ボリューム (LV) のサイズを増やします。
  • lvreduce ― 論理ボリューム (LV) のサイズを減らします。
  • lvresize ― 論理ボリューム (LV) のサイズを変更します。
  • e2fsck ― Linux ext2/ext3/ext4 ファイルシステムをチェックします。
  • resize2fs ― ext2/ext3/ext4 ファイルシステムのサイズを変更します。

lvresizee2fsckresize2fs の使い方については、この記事ですでに説明しました。

ファイルシステムの変更後のサイズを下回るサイズに論理ボリューム (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 メタデータをバックアップおよびリストアする

LVM メタデータは、バックアップしてリストアすることができます。デフォルトでは、/etc/lvm/backup にバックアップされます。以下に記載するのは、LVM メタデータのバックアップ/リストアを管理するために使用するコマンドです。

  • vgcfgbackup ― ボリューム・グループ (VG) 記述子領域をバックアップします
  • vgcfgrestore ― ボリューム・グループ (VG) 記述子領域をリストアします

LVM スナップショットを作成する

スナップショットの使用方法についての詳細は、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 をリストアする際のワークフローを示します。このワークフローを適応させてテストしてください (debugtest、および 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 のデバイスが見つかりません)」というレポートが返ってきました。

  1. メタデータを確認します。
    root@host# vgck -dvvv
  2. ボリューム・グループ (VG) を無効にします。
    root@host# vgchange -an localvg
  3. LVM バックアップを利用して、破損したディスク UUID をリストアします。正しい UUID を使用してください。
    root@host# pvcreate -ff --restorefile /etc/lvm/backup/localvg \
        --uuid 1IffYl-9cfa-BYhZ-Wt5h-7UOi-YWLx-US8wJ3 /dev/vdb1
  4. バックアップから構成をリストアします。
    root@host# vgcfgrestore --file /etc/lvm/backup/localvg localvg
  5. ボリューム・グループ (VG) を有効にします。
    root@host# vgchange -ay localvg
  6. ファイルシステムのチェックを実行して、データの完全性を確認します。

グラフィカル・ツール system-config-lvm および yast2

LVM を管理するには、グラフィカル・ツールを使用することもできます。VNC を使用してインスタンスに接続する方法、またはワークステーションで表示のエクスポートを実行するように SSH の X11 フォワーディングを構成する方法についての詳細は、ユーザー・ガイドを参照してください。VNC が使用するポートは、デフォルトでファイアウォールによって保護されています。これについても、ユーザー・ガイドに説明が載っています。IBM SmartCloud Enterprise V1.4 に関するこの記事を執筆している時点では、ユーザー・ガイドでこれに該当するセクション名は「Connecting to your Linux instance with VNC」となっています。

SuSE Linux と yast

VNC を使用してインスタンスに接続し、yast2 を起動して「System (システム)」 > 「Partitioner (パーティショナー)」に進み、「System View (システム・ビュー)」で「Volume Management (ボリューム管理)」を展開します。YaST 2 Expert Partitioner では、ボリューム・グループ (VG) や論理ボリューム (LV) の作成、削除、拡張、そしてファイルシステムの作成などの操作を yast2 コマンドを使って実行することができます。

図 2. YaST 2 Expert Partitioner
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
system-config-lvm を使用した Red Hat Logical Volume Management

まとめ

これまで説明したステップに従えば、Linux イメージの一時ストレージを使用して LVM を構成することができます。以下に、この記事で説明した内容をまとめます。

次のステップ: その他のクラウド関連のトピック

クラウドに関するこの連載では、IBM SmartCloud Enterprise の技術エキスパートたちが、クラウドでタスクを実行する方法についての知識を分かち合っています。取り上げられているタスクは、驚くほど簡単なものから、複雑で困難なものまで多岐にわたるため、あらゆるスキル・レベルの設計者、開発者、デプロイヤーが学べるようになっています。この連載を読み続けることで、IBM Cloud のさまざまな分野でのスキルを磨くことができます。例えば、以下のトピックが取り上げられています。

  • IIS Web サーバーをインストールする方法
  • クラウドでコマンド・ラインを使用する方法
  • IBM Cloud で企業ネットワークを拡張する方法
  • IBM Cloud で高可用性アプリケーションを構築する方法
  • カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する方法
  • IBM Cloud のさまざまなプロビジョニング手法

参考文献」に以上のトピックおよび他のトピックへのリンクが記載されています。

  • 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 の効果的な使用方法についての詳細は、囲み記事および「参考文献」セクションに記載されているトピックを調べてください。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Linux
ArticleID=679199
ArticleTitle=IBM SmartCloud Enterprise についてのヒント: Linux Logical Volume Manager を構成する
publish-date=06172011