かつて Linux のインストール先が物理マシンであることが多かった時代は、「パフォーマンス向上のため」と称してパーティションを細かく割ったり、LVM を入念に設定したものだが、サイズの小さい仮想マシン(以下 VM)相手のインストール機会が増えた今ではそのような作業は面倒になり、/boot に先頭パーティション(100MB 程度)、残りを LVM にして、/ と swap に LV を 2つ、と言う構成がほとんどになっている。
CentOS や Scientific Linux (以下 SL)等、RHEL 由来のディストリビューションでは、このパーティション設定がデフォルトになっていてインストール時の手間が省ける・・・とよかったが、デフォルト設定のボリューム・グループ(以下 VG)名 "VolGroup"、論理ボリューム(以下 LV)名 "lv_root" と "lv_swap" が個人的にはどうも気持ち悪く、結局修正することになる(無駄に長いし、単に "root" と言われると、/ なのか /root なのか迷う)。
ところが RHEL 系の 6.x では /boot のデフォルト・サイズが 500MB と少々デカいこと以外に、GUI インストール時にはどうとでもできるこの LVM の設定が、テキスト・モードの場合には変更できないと言う問題がある。これは Kickstart 等を使わず手動インストールしている限りどうしようもない(と思う)ので、インストール後に修正する。
例えば VG "VolGroup" を "vg01"、LV "lv_root" と "lv_swap" をそれぞれ "system"、"swap" に変更する場合の手順は、次の通り。
・デフォルト設定を確認 # vgs VG #PV #LV #SN Attr VSize VFree VolGroup 1 2 0 wz--n- 7.51g 0 # lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert lv_root VolGroup -wi-ao 6.51g lv_swap VolGroup -wi-ao 1.00g ・VG 名を変更 # vgrename VolGroup vg01 Volume group "VolGroup" successfully renamed to "vg01" # vgs VG #PV #LV #SN Attr VSize VFree vg01 1 2 0 wz--n- 7.51g 0 # lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert lv_root vg01 -wi-ao 6.51g lv_swap vg01 -wi-ao 1.00g ・LV 名を変更 # lvrename vg01 lv_root system Renamed "lv_root" to "system" in volume group "vg01" # lvrename vg01 lv_swap swap Renamed "lv_swap" to "swap" in volume group "vg01" # lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert swap vg01 -wi-ao 1.00g system vg01 -wi-ao 6.51g ・カーネルのロード先を修正 (/boot/grub/grub.conf) # cd /boot/grub/ # cp -a grub.conf grub.conf.bak ← 念のためバックアップ # sed -i 's/VolGroup/vg01/g' grub.conf # sed -i 's/lv_root/system/g' grub.conf # sed -i 's/lv_swap/swap/g' grub.conf # cat grub.conf ← 目視確認 ・パーティションのマウント設定を修正 (/etc/fstab) # cd /etc/ # cp -a fstab fstab.bak ← 念のためバックアップ # sed -i 's/VolGroup/vg01/g' fstab # sed -i 's/lv_root/system/g' fstab # sed -i 's/lv_swap/swap/g' fstab # cat fstab ← 目視確認 ・再起動 # reboot
grub.conf と fstab の修正が不完全だと OS が kernel panic 等で起動できなくなるので、置換後にファイルを開くか vi で直接置換する等して、VG や LV 名が間違いなく置換できていることを確認した方がいい。特に sed -i はシンボリック・リンクに対して実行しても本体内の文字列は置換されないため(/boot/grub/grub.conf へのリンク /boot/grub/menu.lst や /etc/grub.conf)、確認せずに再起動してしまうと危ない。
ファイルの修正ミスで OS が起動しなくなった場合は、慌てず騒がず次のように対処する。
- 起動時のカーネル選択画面で何かキーを押し、編集モードに切り替える。
- 目的のカーネルにカーソルを合わせ、[e] キーをタイプ。
- "kernel" 行にカーソルを合わせ、[e] キーをタイプ。
- シングル・ユーザー・モードで起動させるため、行末に " single" または " s" を付加。
- 行内の VG や LV 名を正しく修正し、[Enter] キーで終了。
- [b] キーで該当カーネルから起動 (状況により、要 root パスワード入力)。
- "df -h" でマウント状況を確認。
- / (/etc を含むブロック・デバイス) が read-only モードでマウントされている場合は、"mount -n -o remount,rw /" を実行して read-write モードで再マウント。
- /boot がマウントされていない場合は、"mount -t ext4 /dev/sda1 /boot" でマウント (※ /boot が /dev/sda1 で ext4 の場合)。
- /boot/grub/grub.conf や /etc/fstab を vi で開いて内容を修正し、保存。
- 再起動。
この点 VM は事前にスナップショットを取っておけば簡単にやり直しが効いて、非常に便利。「人生でも同じことができたら・・・」とはたまに聞く妄想だが、「VM が自分自身のスナップショットを操作できるか」と考えると、自力でコントロールできないスナップショットなら、あってもあまり意味がないか(笑)。