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