btrfs rootfs on debian squeeze

UbuntuやFedoraがbtrfsへのインストールをサポートしてるようですが、敢えてDebian/GNU Linuxを載せてみました。
最近ZFSに感化されているのでsubvolumeを作ってそこにインストールします。

先に結論を書くと、subvolumeをrootにするのはちょっと早すぎたみたいです。
動作はしますが、メンテに手作業 or スクリプト作成が必要。

  • 導入が若干面倒:-/
  • カーネル更新時にgrubの設定を自動更新できない

踏み台環境を準備する

(2011/02/19追記)
debian-installer 6.0のリリース版ではbtrfsのパーティション作成が可能です。
インストール中、Partmgrが起動した後、下記を実施することで踏み台環境の構築は不要になります。

  1. 「Alt+F2」でコンソールへ移動する
  2. 次項「ディスクを設定する」を行う
  3. 作成したbtrfsへのマウントを解除する
  4. 「Alt+F1」でインストーラ画面に戻る
  5. Escapeでタスク一覧へ戻り「Detect Disk」を選択する

(以下はdebian-installer 6.0 beta1での話)
debian-installerがbtrfsをサポートしていないので、まず最小構成でUSBメモリなどにインストールします。
起動したら、次の2つをインストールします。

apt-get install btrfs-tools debootstrap

これで準備が出来ました。
Ubuntu 10.10のDesktopCDにdebootstrapが入っているような気がするので、踏み台を作らなくてもUbuntuからDebian環境を作る、という?な手もあります。

ディスクを設定する

fdisk か parted でパーティションを作ります。

/dev/sda1  255MB  83(ext2)  /boot   *BootFlag ON
/dev/sda2  4GB    82(swap)   * RAMの2倍くらい
/dev/sda3  *      83(btrfs)

パーティションを作ったらフォーマットします。

mkfs.ext2 /dev/sda1
mkswap /dev/sda2
mkfs.btrfs /dev/sda3

btrfsをマウントして、サブボリュームを準備します。
ひとまず、systemとhomeを作成しておきます。

mount /dev/sda3 /mnt
btrfs subvolume create /mnt/system
btrfs subvolume create /mnt/home

ここで注意点が。ZFSと同じ感覚でサブボリュームを入れ子にすることが一見して出来るのですが、現時点ではやってはいけません
下記を実行してみるとわかりますが、残念ながらエラーになります。細かくボリュームを分ける場合は面倒ですが入れ子しないように。

mkdir /test
btrfs subvolume create /mnt/system/usr
mount -t btrfs -o subvolume=system/usr /dev/sda3 /test     << Error...

インストールする

debootstrapを使ってインストールします。debian-installerも同じツールを使っています。
下記を始める前に先のマウントをいったん解除してください。

# インストールするフォルダ環境を作る
mkdir /dist
mount -t btrfs -o subvol=system /dev/sda3 /dist
mkdir /dist/boot
mkdir /dist/home
mount /dev/sda1 /dist/boot
mount -t btrfs -o subvol=home /dev/sda3 /dist/home
chmod 755 /dist/home

# debootstrapでベース環境を展開する (4つ目の引数でミラーサーバの設定が可能)
debootstrap squeeze /dist

# procとdevをbindする (chroot作業用)
mount -o bind /proc /dist/proc
mount -o bind /dev /dist/dev

# chrootして作業する
chroot /dist /bin/bash

# 起動に必要なソフトをインストール
apt-get update
apt-get install btrfs-tools
apt-get install linux-image-2.6-amd64
apt-get install console-setup tzdata

# grub2にすると依存関係にあるgrub-pcの設定が失敗する
# (grub-probeで/が自動認識できない)
apt-get install grub-legacy
grub-install /dev/sda
update-initramfs
update-grub

# grub-probeが動いてくれないので手作業でboot用の設定をする
cp /usr/share/doc/grub-legacy/example/menu.lst /boot/grub/menu.lst

/boot/grub/menu.lstに下記のようにブート設定する。rootflagsの部分が重要。

root (hd0,0)
linux /vmlinuz-2.6.32-5-amd64 root=/dev/sda3 rootflags=subvol=system quiet
initrd /initrd.img-2.6.32-5-amd64

/etc/fstab を設定する。 最近は /dev/sda* のようなデバイスの直接指定は好まれないので UUID=XXX にしたい場合は blkid などでUUIDを調べてください。

proc        /proc  proc   defaults  0  0
/dev/sda3   /      btrfs  defaults,subvol=system  0  1
/dev/sda3   /home  btrfs  defaults,subvol=home    0  2
/dev/sda1   /boot  ext2   noatime                 0  3
/dev/sda2   none   swap   sw                      0  0

chrootを抜けて /etc/network/interfaces を設定する。

# chrootを抜けてる
exit

# 面倒くさいのでホストの設定をコピー
cp /etc/network/interfaces /dist/etc/network/interfaces

あとは再起動すれば、立ち上がるはずです。

linux/btrfs_rootfs_on_debian.txt · 最終更新: 2011/02/19 20:16 by ldr
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0