Ubuntu 12.04 LTS Precise Pangolin で Native ZFS

ZFS を root ファイルシステムにして、Ubuntuを起動する方法。

Ubuntu 11.04 on a Native ZFS root 後編や、ZFS DAY 2011.10 LinuxでZFSに刺激を受けインストールしてみたメモ。
ZFS ON LINUXで開発が進んでいるものを使い、HOWTO install Ubuntu to a Native ZFS Root Filesystemに沿ってインストールします。

必要なもの

  • 64-bit Ubuntu Live CD. (alternate installerではなく)
  • AMD64(x86_64)なCPUで動いてるPC
  • 8GB 以上のHDD等
  • 最低 2GB のメモリー

(2GBは最低限必要、でも遅い。4GBを推奨、普通のパフォーマンス。重複除外や圧縮などの高度な機能を使用したい場合は16GBのメモリが推奨。と書いてある)

試したバージョン

  • Ubuntu 12.04 Precise Pangolin
  • SPL-0.6.0.62-RC8
  • ZFS-0.6.0.62-RC8

Step1:インストール環境の準備

UbuntuのLiveCDを起動し、デスクトップでターミナルを開きます。(以下ターミナルで作業します)
ZFSモジュールとDebian 基本システムをLiveCD環境上にインストールします。
(ここでインストールするのはdaily版です。ちょっとでも安定版をという場合はapt-add-repository ppa:zfs-native/stableとします。その場合はZFS-0.6.0.56-RC8がインストールされます。rcなんですけどね)

$ sudo -i
 # apt-add-repository ppa:zfs-native/daily
 # apt-get update
 # apt-get install debootstrap ubuntu-zfs

動作中のカーネルにZFSモジュールをインストールし確認します。

# modprobe zfs
# dmesg | grep ZFS:

で、

ZFS: Loaded module v0.6.0.62-rc8, ZFS pool version 28, ZFS filesystem version 5

と返ってくればOK。

Step2:パーティション作成

/bootはZFSに置けないのでブートパーティションとZFSパーティションに分けます。今回は1TBのHDDを使ったので、fdiskでパーティションをきりました。/dev/sdaをブートパーティションは8MB、残りをZFSに割り当てて、先頭のブートパーティションのIDをbe(Solaris boot)、ZFS用をbf(Solaris)に変更してブートパーティションをアクティブにします。(下記は例です。適当に読み替えてください)

# fdisk /dev/sda

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-5221, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-5221, default 5221): +8M

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (3-5221, default 3):
Using default value 3
Last cylinder, +cylinders or +size{K,M,G} (3-5221, default 5221):
Using default value 5221

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): be
Changed system type of partition 1 to be (Solaris boot)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): bf
Changed system type of partition 2 to bf (Solaris)

Command (m for help): a
Partition number (1-4): 1

Command (m for help): w

Step3:Diskのフォーマット

ブートパーティションをフォーマットします。

# mke2fs -m 0 -L /boot/grub -j /dev/sda1

後ろのパーティションにZFSのroot pool を作ります。

# zpool create rpool /dev/sda2

poolの名前は任意です。本家SolarisのZFSインストール時にはroot poolは初期状態でrpoolとなるので、上記ではrpoolとしました。ただこの場合、他のrpoolが存在するZFSなOSでマウント出来ないので他の名前しとくのもいいかもしれません。(ztankとかtankもよく使われるpoolの名前です)

rpoolに必要なファイルシステムを作成して、アンマウント後マウントポイントとbootfsを設定し、一旦エクスポートします。

# zfs create rpool/ROOT
# zfs create rpool/ROOT/ubuntu-1
# zfs umount -a
# zfs set mountpoint=/ rpool/ROOT/ubuntu-1
# zpool set bootfs=rpool/ROOT/ubuntu-1 rpool
# zpool export rpool

Step4:システムのインストール

さっき作ったrpoolを/mntにimportしてマウントし、/mnt/boot/grubにブートパーティションをマウントします。

# zpool import -R /mnt rpool
# mkdir -p /mnt/boot/grub
# mount /dev/sda1 /mnt/boot/grub

Debian 基本システムを/mntに展開します。

# debootstrap precise /mnt

Step5:システム設定とインストール

インストールが終わったら、LiveCD環境上から設定ファイルを/mntのZFS環境上にコピーします。
(debootstrapは最小構成インストールなので設定ファイルが初期状態だったりするのでLiveCD環境からコピーしたり追記したりします)

# cp /etc/hostname /mnt/etc/
# cp /etc/hosts /mnt/etc/

/mnt上のfstabやinterfacesを編集します。エディタはお好みで。(この例ではvi)

# vi /mnt/etc/fstab

/dev/sda1 /boot/grub auto defaults 0 1

を追記

# vi /mnt/etc/network/interfaces

auto eth0
iface eth0 inet dhcp

を追記

次にZFS上にUbuntuを導入するため、chrootで/mntにマウントしたZFSのルートに入ります。
ここから先はインストール先のZFSファイルシステムへの操作となります。

# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# chroot /mnt /bin/bash --login

chroot先ではリポジトリが初期化されているので、ftp.jaist.ac.jpにリポジトリを変更します。
(ここはお好みで)

# vi /etc/apt/sources.list

preciseより前のURLを

http://ftp.jaist.ac.jp/pub/Linux/ubuntu

に置き換えます。で、Ubuntuの最小構成インストール

# locale-gen ja_JP.UTF-8
# apt-get update
# apt-get install ubuntu-minimal python-software-properties

続いて、カーネル関連とZFSモジュール関連モジュールのインストール
(ubuntu-zfsは先程もインストールしましたが、今度はZFS上のシステムインストール先にインストールしてます。ここでインストールするのもdaily版の例です。ちょっとでも安定版をという場合はapt-add-repository ppa:zfs-native/stableとします。)

# apt-add-repository --yes ppa:zfs-native/daily
# apt-add-repository --yes ppa:zfs-native/grub
# apt-get update
# apt-get install --no-install-recommends linux-image linux-image-generic linux-headers-generic
# apt-get install ubuntu-zfs
# apt-get install grub-pc zfs-initramfs

ここで

# dkms status

をして

spl, 0.6.0.62, 3.2.0-23-generic, x86_64: installed
zfs, 0.6.0.62, 3.2.0-23-generic, x86_64: installed

等と返ってくればZFS関連モジュールのインストールは成功しています。
(インストール時のバージョンにより表示は変わります)

ここでZFSのシステムで使うユーザを登録します。
お試しなんでrootでいいかなーといった場合は、

# passwd root

で、パスワードを登録します。

しばらく使ってみようかといった場合は、定石どおり

# adduser 任意のユーザ名 admin

でちゃんとユーザを作ったほうがいいです。

HOWTO install Ubuntu to a Native ZFS Root Filesystemでは、このあとUbuntuのフルインストールしときたい場合は、ubuntu-desktopのパッケージをインストールしといて、となっています。
確かに便利ですが、後ほど再起動する前にZFSをexportしますが、そこで強制アンマウントでexport無しの再起動を行うことになります。自分の場合はちゃんと再起動できましたが、そういうのが気持ち悪い場合は後ほどインストールしたほうがいいです。

# apt-get install ubuntu-desktop

でインストール出来ます。

Step6: GRUBのインストール

まず、ZFSのシステムがGRUBによって認識されていることを確認します。

# grub-probe /

で、

ZFS

と返ってくればOK。

で、GRUBにZFSモジュール用がインストールされていることを確認します。

# ls /boot/grub/zfs*

で、

/boot/grub/zfs.mod /boot/grub/zfsinfo.mod

と返ってくればOK。

initrdファイルを更新します。

# update-initramfs -c -k all

update-initramfs: Generating /boot/initrd.img-3.2.0-23-generic

でOK。

ブートコンフィギュレーションファイルを更新します。

# update-grub

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
done

でOK。

出来たgrub.cfgの確認をします。

# grep boot=zfs /boot/grub/grub.cfg

linux /ROOT/ubuntu-1/@/boot/vmlinuz-3.2.0-generic root=/dev/sda2 ro boot=zfs $bootfs quiet splash $vt_handoff

な感じでOK。

MBRにブートローダをインストールします。

# grub-install /dev/sda

Installation finished.

でインストール完了。

Step7: お片づけと再起動

chroot環境から抜けて、LiveCD環境に戻りアンマウントします。

# exit
# umount /mnt/boot/grub
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# zfs umount -a
# zpool export rpool

ubuntu-desktopをインストールした場合は、umount /mnt/devでアンマウント出来ないと思われます。
その場合は、

# umount -l /mnt/dev

として、強制的にアンマウントするしかありません…

また、zfs umount -aでもアンマウント出来ない場合は、

# umount -l /mnt

してしまいましょう。

それでも、zpool export rpoolは自分の環境では- fしても出来ませんでした…

あとは再起動するだけです。

# root

上記の手順が成功していればZFSがルートファイルシステムになっているUbuntuが起動してきます。

もうちょっと続く

2 Replies to “Ubuntu 12.04 LTS Precise Pangolin で Native ZFS”

  1. Ubuntu 11.04 on〜を書いていた者です。モチベーションにしていただき光栄です。
    また古くなっていた情報を補完していただきありがとうございます。

    続きの記事にお書きになるかもしれませんが、一応当方でも12.04+rc8stableで試してみたので、
    当時はうまくできなかったGUI日本語化の手順を軽くメモとしてコメントさせていただきます。

    1.ubuntu-desktopのインストール
    2.以下のURLよりリポジトリを追加し、ubuntu-defaults-jaをインストール
    http://www.ubuntulinux.jp/japanese
    3.language-pack-gnome-jaをインストール(依存関係からlanguage-pack-jaも入ります)
    4.ログイン画面(lightdm)の日本語化のため、/etc/default/localeを作成しLANG=”ja_JP.UTF-8″と記述
    5.デスクトップ右上の歯車→System Settings→Language Support→言語タブ内の日本語を上に持っていく
    (/etc/default/localeを先に作っていれば既に上に来ているかもしれません)
    6.再ログイン

    以上の手順で日本語版をインストールしたときと同様の環境になるかと思います。
    無駄な手順があったり必要な手順を忘れていたらすいません。
    やってしまえば簡単ですが、インストーラを使わず英語環境から日本語化するケースがあまりないだけに情報が少ないですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください