LVMでディスク領域を操る(その1)

元ロゴスウェア社内SE,現Platon開発リーダーの渡部です。
Platonの次なる展開をにらみ開発を頑張る傍ら、
経緯上回ってきてしまう社内の雑務も片付けなければならない日々です。

今回のエントリはその後者に関する部分の作業メモです。

社内で、とある用途に、データのアーカイブサーバを立てています。
当初は実験半分で、KVMで小さいディスク容量で構築しました。
ぼちぼち使っていくうえで容量が逼迫してしまい、その際取り急ぎ仮想ディスクを拡張し
パーティションを追加してしのいでいましたが、
プライマリパーティション4つを使い果たしてしまいました。

KVMなので仮想ディスクを追加する、でももちろん済むのですが、
VMホストの管理上の諸事情により仮想サーバ1台に複数のHDDイメージファイルを繋げたくない、という事があり、
分割されたパーティションを一つにまとめる、ということにしました。

以下、LVMのイメージ図とともにご覧ください。

初期状態のイメージはこのような状態です(本来はパーティションは4つあったのですが作図が面倒なので3つでの説明となります)。
sda1は/boot用 で、LVM管理外です。sda2に最初 / 用のパーティションとswapがあり、その後sda3を追加して現在の状態になっていると思って下さい。

LVMにおいては、「PV」「VG」「LV」という階層の概念で、物理的なディスクのパーティションと、論理的なボリュームの扱いを分離させています。

  • PV…Physical Volume。物理的なパーティションのことです。
  • VG…Volume Group。1つ以上のPVをグループ化したものです。
  • LV…Logical Volume。VGの領域から確保して使用する、論理的なボリュームです。

上の図の場合、sda2とsda3がそれぞれPVです。その2つがグループ化されて、「ubuntu」という名前のVGになっています。そのVG内に、「ubuntu-root」という名前のメインの領域と、「ubuntu-swap」という名前のswap領域が確保されている事になります。これらでこのsdaのディスク領域は使い切っている状態です。

(1) 作業用ディスク追加

まず作業用のディスクを追加しました。
これはLVMとは関係なく、このVMサーバの外側で、ディスクイメージを追加したものです。
容量は現行のディスクと同等です。
fdiskコマンドで領域を確保しました。パーティションのタイプは「8e(Linux LVM)」にします。
fdiskでwコマンドで変更をディスクに書き込んだ後、partprobeコマンドでパーティション情報を読み直します。

(2)  PV作成

作業用ディスクをPVにします。
以下のコマンドで、作業用パーティションをPVにします。

# pvcreate /dev/sdb1

コマンド実行により、このようなイメージの状態になります。

(3) VGに追加

PVにした作業用ディスクを、今のLVが存在するVGに追加します。

# vgextend ubuntu /dev/sdb1

コマンド実行により、このようなイメージの状態になります。

(4) LVの移動

…と書きましたが、実際に行う操作はLV単位ではありません。

# pvmove /dev/sda2 /dev/sdb1

これはしばらく時間がかかります。
この結果、以下のようなイメージの状態になります。

sda2内のLVM管理のデータが、sdb1へ移動します。
これは以下のコマンドで確認できます。

# pvdisplay

sda2,sda3,sdb1とそれぞれのPVの情報が出力されますが、
その中のsda2に関する情報において「Allocated PE 0」 となります。
PEとは「Physical Extent」で、LVで使用される領域の単位のことで、
Allocated PEが0という事はすなわちLVから使用されていない事を意味します。

続いてsda3の方も移動させます。

# pvmove /dev/sda3 /dev/sdb1

しばらく待って完了すると、以下のようなイメージの状態になります。

(※正しくは、前提となる経緯だった場合、sda2内にrootの一部とswapが、
sda3にrootの残りが配置されている状態になっているはずで、
pvmoveしたときのLVの動きも異なりますが、
あくまで動きのイメージとして簡略化しています)

(4) 旧PVの解放

sda2およびsda3を解放します。

# vgreduce ubuntu /dev/sda2

実行後、以下のイメージの状態になります。

sda3も解放します。

# vgreduce ubuntu /dev/sda3

続いて、PVでもなくしてしまいます。

# pvremove /dev/sda2
# pvremove /dev/sda3

この状態になります。

この状態で使い続ける事も可能ですが、今回は引き続き、sdaの方のパーティションを整理して
再びそっちにデータを戻していきます。

その2に続きます。

The following two tabs change content below.

渡部(潔)

最新記事 by 渡部(潔) (全て見る)

Comments are closed.