Ubuntu 8.04 を LVM 有効にしてインストールする

Ubuntu の Desktop 版インストーラではデフォルトで LVM を使ってインストールすることができません。

Alternate 版を使えば LVM を使ってインストールできるんですが,テキストモードでインストールするのは嫌だとか,日本語ローカライズド版でインストールしたい,ということであれば下記の手順でやることになります。

  1. Live CD として立ち上げる
  2. Live CD 環境に lvm2 をインストールする
  3. Live CD 環境で LVM を切る
  4. Live CD 環境で LVM 上にファイルシステムを作成する
  5. Live CD 環境からインストーラを立ち上げてインストールする
  6. インストールされた環境に chroot して lvm2 をインストールする

結果的に http://www.debuntu.org/how-to-install-ubuntu-over-lvm-filesystem に沿ってやることになりました。リンク先の説明では fdisk コマンドでパーティショニングしてますが,代わりに GParted で行いました。

Live CD として立ち上げる

インストーラ CD を立ち上げ,「コンピュータに変更を加えないで Ubuntu を使ってみる」を選択します。

lvm2 (LVM サポートパッケージ)をインストールする

ネットワークにつながった環境であれば下記のようにして lvm2 をインストールします*1

まず各種パッケージ情報を取得しておきます(yum update みたいなもの?)。

ubuntu@ubuntu:~$ sudo apt-get update

次に lvm2 パッケージをインストールします。

ubuntu@ubuntu:~$ sudo apt-get install lvm2

このままでも LVM の操作はそこそこできるのですが,LVM ボリュームをマウントするには Device Mapper が有効になっていないといけません(インストーラからもみえませんし lvcreate もできません)。ですので Device Mapper のカーネルモジュールを読み込みます。

ubuntu@ubuntu:~$ sudo modprobe dm-mod

これで Live CD 環境で LVM が使えるようになりました。

パーティションを切る

今回のディスクの切り方の方針は以下の通りです。

  • まっさらな /dev/sda にインストールする
  • /boot 用に ext3 を基本パーティションとして先頭に用意する
  • 残り容量を LVM の Physical Volume 用に割り当てる

「システム管理」から「パーティションエディタ(GParted)」を立ち上げます。

空き容量(全体)の先頭に /bootext3 パーティションを設定します。

次に残りを LVM 用に確保します。といってもこの GParted では LVM としての指定はできないので,領域として確保するだけです。

最後に「編集」メニューの「すべての操作を適用」を選択(ツールバーから選択してもいいです)してパーティションテーブルをディスクに書き込みます。

パーティションエディタを終了し,/dev/sda の様子を見てみます。

ubuntu@ubuntu:~$ ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2

sda1 が /boot 用 ext3 パーティション,sda2 が LVM 用パーティションになります。

LVM の設定を行う

ここからは残念ながら?コマンドラインインタフェースを使用して作業することになります。

LVM の概要や操作方法については Pantora Networks » LVMを使ってみよう! を参照してください。

/dev/sda2 を Physical Volume として作成します。

ubuntu@ubuntu:~$ sudo pvcreate /dev/sda2
  Physical volume "/dev/sda2" successfully created

Volume Group を作成します。名前はなんでもいいのですが,ここでは vgmain という名前にしました。

ubuntu@ubuntu:~$ sudo vgcreate vgmain /dev/sda2
  Volume group "vgmain" successfully created

swap 用と root パーティション用に Logical Volume を作成します。

ubuntu@ubuntu:~$ sudo lvcreate -L 1G -n lv_swap vgmain
  Logical volume "lv_swap" created

ubuntu@ubuntu:~$ sudo lvcreate -L 4G -n lv_root vgmain
  Logical volume "lv_root" created

作成した Logical Volume を見てみます。

ubuntu@ubuntu:~$ sudo lvdisplay -C
  LV      VG     Attr   LSize Origin Snap%  Move Log Copy%
  lv_root vgmain -wi-a- 4.00G
  lv_swap vgmain -wi-a- 1.00G

root 用に 4GB,swap 用に 1GB の Logical Volume を作成しました。

ファイルシステムを作成する

本来であればこのままインストーラに進んでいいはずなのですが,インストーラの partitioner が Logical Volume を whole disk として認識してしまい,ディスクラベルを作成するよう言われてしまいます。そのまま進んでしまうと途中で止まってしまうので,あらかじめコマンドラインファイルシステムを作成しておきます(そうするとインストーラも正しく認識してくれます)。

これまで作成した Logical Volume は Device Mapper のおかげで仮想ボリュームとして認識されています。たとえば Volume Group: vgmain の Logical Volume: lv_swap は /dev/vgmain/lv_swap のようにアクセスすることができます。また,/dev/mapper/vgmain-lv_swap でもアクセスすることができます。

swap 用ボリュームを swap 領域として初期化します。

ubuntu@ubuntu:~$ sudo mkswap -L swap /dev/vgmain/lv_swap
Setting up swapspace version 1, size = 1073737 kB
LABEL=swap, UUID=7c013409-a4cb-487b-b917-4cd516217f5c

root 用ボリュームを今回は XFS でフォーマットします。

ubuntu@ubuntu:~$ sudo mkfs.xfs -f /dev/vgmain/lv_root
meta-data=/dev/vgmain/lv_root    isize=256    agcount=8,  agsize=131072 blks
         =                       sectsz=512   attr=0
data     =                       bsize=4096   blocks=1048576, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=2560, version=1
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0

インストーラを立ち上げる

あとはデスクトップのアイコンからインストーラを立ち上げて,普通にインストールします。

ただし「ディスクの準備」のところは「手動」にしてください。

今回の例では,下記のように既存パーティションが見えています。

  • /dev/mapper/vgmain-lv_root
    • /dev/mapper/vgmain-lv_root xfs
  • /dev/mapper/vgmain-lv_swap
    • /dev/mapper/vgmain-lv_swap swap
  • /dev/sda
    • /dev/sda1 ext3
    • /dev/sda2

swap 以外の各パーティションについて「パーティションを編集」を行って,適宜マウントポイントを指定していってください。

インストールされた環境に lvm2 をインストールする

インストーラが完了して再起動させてしまうと,インストール後の環境では LVM が有効になっていないために起動途中で止まってしまいます。ですので,再起動はかけずに再びコマンドラインからインストールされた環境に lvm2 をインストールします。

まずは(アンマウントされている)インストールされた環境をマウントします。インストーラがマウントポイントとして /target というディレクトリを掘っているのでそれを再利用させてもらいます。

ubuntu@ubuntu:~$ sudo mount /dev/mapper/vgmain-lv_root /target

ubuntu@ubuntu:~$ sudo mount /dev/sda1 /target/boot

もちろん Volume の切り方が違う場合は適宜読み直してください。

次に /targetchroot して lvm2 をインストールします。インストールされた環境の apt-cache にはパッケージ情報がないので apt-get update するのを忘れずに。

ubuntu@ubuntu:~$ sudo chroot /target

root@ubuntu:/# apt-get update

root@ubuntu:/# apt-get install lvm2

あとは再起動すれば LVM on な環境が無事立ち上がります。

おまけ

lvm2 をインストールするのを忘れて再起動すると,えんえんオレンジのバーがいったりきたりしたあとに,

BusyBox v1.1.3 (Debian 1:1.1.3-5ubuntu12) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs)

のように緊急コンソールが立ち上がります。grub コンソールじゃなくて BusyBox なんですね。へぇー。

この様になってしまった場合,再度インストーラ CD を Live CD として立ち上げて lvm2 をインストールしたりする必要があります。面倒なので詳細は略します。

*1:ネットワークにつながっていない場合,USB メモリ等で lvm2 パッケージをコピーしてインストールしてください。後々のために dmsetup パッケージも取得しておくのがよいかと。