Linux-LVMの拡張

自宅サーバーを稼動しているのだが、あるユーザでログインして"vi hoge.txt"を実行すると以下のようなエラーが。

vi スワップファイルの書き込みエラーです	

もしやと思い、dfを実行してみると・・

# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00 3322008 3236344 316912 100% /
/dev/hda5 101086 9510 86357 10% /boot

ぎゃっ。空き容量がねえ。よく見るとLogVol00には4G程度しか割り当てられていない。そういえば、現在このマシンにはCentOS5.0がインストールされているのだが、実は以前はCentOS3.0がインストールされていた。それで、CentOS5.0インストール時に、念のためCentOS3.0とデュアルブートさせておいたのだ。でも3.0はもう不要。3.0が16GBほど使っているので、それを何とかしたい。
ということでfdiskを実行して、現在のパーティションの状況を確認する。

# fdisk -l
Disk /dev/hda: 20.0 GB, 20003880960 bytes
デバイス  Boot Start End  Blocks   Id System
/dev/hda1 *    1     13   104391   83 Linux
/dev/hda2      14    1797 14329980 83 Linux
/dev/hda3      1798  1894 779152+  82 Linux スワップ
/dev/hda4      1895  2432 4321485  5  拡張領域
/dev/hda5      1895  1907 104391   83 Linux
/dev/hda6      1908  2432 4217031  8e Linux LVM 

hda1から6まで、パーティションがきられている。この中の幾つかのパーティションが今は使っていないCentOS3.0に割り当てられているのだが・・・どのパーティションを初期化すりゃいいんだろう??とりあえず、Bootデバイスの/dev/hda1は除外。あとはhda5は/bootにマウントされていたようだからこれも除外。
まずは/dev/hda6があやしい。しかしそもそも"Linux LVM"については無知だったので調べてみる。簡単に言うとパーティションのサイズを増やしたり減らしたりするための仕組みらしい。例えば"/"にHDD1をマウントしておき、もし容量が足りなくなったら追加でHDD2を接続して、そいつを"/"に割り当てて、容量を拡張できる、と言う感じらしい。今回の場合だと、"/dev/mapper/VolGroup00-LogVol00"がLVMで構成されていて、"/"にマウントされてるってこと。では、/dev/mapper/VolGroup00-LogVol00の実体は/hda1から/hda6のうち、どれに対応するかを調べる必要がある。つーわけで、LVMのユーティリティコマンドpvdisplayを実行。

[root@kenmaz ~]# pvdisplay -C
  PV         VG         Fmt  Attr PSize  PFree
  /dev/hda6  VolGroup00 lvm2 a-    4.00G 32.00M

なるほど。物理ボリューム"/hda6"が、ボリュームグループ"VolGroup00"に束ねられているわけか。こいつを拡張すりゃいいのね。

あとはhda2〜hda4がどうなっているか。マウントの状況を調べるために/etc/fstabを確認

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
LABEL=/boot1             /boot                   ext3    defaults        1 2
/dev/hda3                swap                    swap    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
/dev/hdc                 /media/cdrom            auto    pamconsole,exec,noauto,managed 0 0

ふむ、/dev/hda3はswapとして割り当てられているので、hda3も除外。あとはhda2,4。
LABEL=/boot1というのが/bootに割り当てられている。なんだこのLABELってのは。いろいろ調べると、ふつうマウント先のデバイスって"/dev/hdaN"みたいな感じで表示されるもんだけど、最近は"/dev/hdaN"に対してラベルを割り当てて、そのラベルに対してマウントするように/etc/fstabの記述方法が変わったみたい。ということで、ラベルの対応を調べるためにe2labelを実行。

[root@kenmaz ~]# e2label /dev/hda5
/boot1

なるほろ。結局hda5なのね。とりあえずこれでmountされていないhda2,hda4をフォーマットしていいことがわかった。
で、ここは14GBほど占有しているhda2をフォーマットすることに決定。ドキドキ。

[root@kenmaz ~]# fdisk /dev/hda
コマンド (m でヘルプ): d
領域番号 (1-6): 2
コマンド (m でヘルプ): n
コマンドアクション
   l   論理 (5 以上)
   p   基本領域 (1-4)
p
Selected partition 2
最初 シリンダ (14-2432, default 14):
Using default value 14
終点 シリンダ または +サイズ または +サイズM または +サイズK (14-1797, default 1797):
Using default value 1797

コマンド (m でヘルプ): p
Disk /dev/hda: 20.0 GB, 20003880960 bytes
 デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        1797    14329980   83  Linux
/dev/hda3            1798        1894      779152+  82  Linux スワップ
/dev/hda4            1895        2432     4321485    5  拡張領域
/dev/hda5            1895        1907      104391   83  Linux
/dev/hda6            1908        2432     4217031   8e  Linux LVM

コマンド (m でヘルプ): t
領域番号 (1-6): 2
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました
コマンド (m でヘルプ): w
領域テーブルは交換されました!

とりあず、ここまでで/dev/hda2/の削除と作成が完了。加えて/dev/hda2のシステムタイプLinux LVMにする。あとは、VolGroup00に、/dev/hda2を追加する!

[root@kenmaz ~]# vgextend VolGroup00 /dev/hda2
  Volume group "VolGroup00" successfully extended

再度dfしてみると・・・

[root@kenmaz ~]# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00 3322008 3236344 316912 100% /

あら、まだ何か足りないみたい。で、ここでお出かけタイム。今日は会社の同期飲み会のために新宿に行かねばならないのだ。しかし作業途中で気になって仕方なかったので、新宿紀伊国屋書店に立ち寄り、CentOS本を立ち読み。どうやらボリュームグループを拡張するだけではダメらしい。そのほかの本も物色してたら飲み会には1時間遅刻。その後、元同僚のS氏が「オラ歌上手くなりてぇだ」とのことなのでカラオケに行き指導。帰宅。
作業再開。VGを拡張したら、次に論理ボリュームを拡張して、さらにその上でファイルシステムを拡張しなきゃいけないらしい。ということで、

[root@kenmaz ~]# vgdisplay
  --- Volume group ---
  VG Name               VolGroup00
  VG Size               17.66 GB

[root@kenmaz ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  LV Size                3.22 GB

(vgは17.66GBなのにlvは3.22GB。あと13GBくらい足せそうだな・・)

[root@kenmaz ~]# lvextend -L +13600M /dev/VolGroup00/LogVol00
  Extending logical volume LogVol00 to 16.50 GB
  Logical volume LogVol00 successfully resized
  
[root@kenmaz ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  LV Size                16.50 GB

(もうちょい)

[root@kenmaz ~]# lvextend -L +100M /dev/VolGroup00/LogVol00
[root@kenmaz ~]# lvextend -L +1000M /dev/VolGroup00/LogVol00
  Rounding up size to full physical extent 1.00 GB
  Extending logical volume LogVol00 to 17.62 GB
  Insufficient free space: 32 extents needed, but only 9 available
[root@kenmaz ~]#

おけ。で、最後にext3を拡張。

[root@kenmaz ~]# ext2online /dev/VolGroup00/LogVol00
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
(1分まつ)
[root@kenmaz ~]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      17161124   2849660  13441648  18% /
/dev/hda5               101086      9510     86357  10% /boot
none                    188808         0    188808   0% /dev/shm

おお!これで容量がふえました。使用率18%!まだまだいけるぜ!

【参考サイト】
Pantora Networks ≫ 3章 LVM操作 応用編
http://pantora.net/pages/linux/lvm/3/
Logical Volume Manager HOWTO: ファイルシステムを拡張する
http://www.linux.or.jp/JF/JFdocs/LVM-HOWTO-5.html