2011/04/03

linuxハードディスク載せかえ、btrfs使用。

以前使ってたディスクから環境を新しいディスクに移すことにした。手順をメモ。

新しいディスクのファイルシステムは新しいbtrfsを使用することにした。btrfsのwikiに
"Btrfs is under heavy development, but every effort is being made to keep the filesystem stable and fast. As of 2.6.31, we only plan to make forward compatible disk format changes"
ってあったし。

まずカーネルコンフィグでbtrfsにチェックを入れ、btrfs-progsをインストール。自分の環境ではバージョンは0.19だった。ディスクのパーティションテーブルはMBR(msdos)じゃなくてGUIDパーティションテーブル(gpt)にした。
gptではmsdosと違って:基本パーティション"とか"論理パーティション"とかの区別は必要ない。grubをgptのディスクで使うためにはbios_grubフラグのついた空のパーティションが必要になる。

今まで使っていたディスク:/dev/sda、これから使う新しいディスク:/dev/sdb

# parted /dev/sdb
(parted) mklabel gpt            #gptパーティションを使用する。MBRにしたいときはmsdos。データは全て消える。
(parted) unit GIB                #ギビバイトを使用
mkpartですきなように分ける。ファイルシステムは聞かれるが反映されない。
(parted) toggle 1 bios_grub    #先頭にbios_grubフラグをつける。このパーティションは31kb以上ないといけない。
(parted) toggle 2 boot          #/bootのマウントポイント。vmlinuzが入る場所
(parted) print
Number  Start   End     Size    File system     Name  Flags
 1      1049kB  8389kB  7340kB                        bios_grub
 2      8389kB  2147MB  2139MB  ext4                  boot
 3      2147MB  8590MB  6442MB  linux-swap(v1)
 4      8590MB  81.6GB  73.0GB
 5      81.6GB  90.2GB  8590MB
 6      90.2GB  107GB   17.2GB
 7      107GB   1000GB  893GB
(parted) quit

# mkfs.btrfs /dev/sda4 等
これを書く現時点ではgrubはbtrfsに完全には対応していないのでext4にした。
# mkfs.ext4 /dev/sda2
# mkswap /dev/sda3
ここでシステムをログオフして/dev/sdaの内容を/dev/sdbにコピー。
作業用の環境としてSystemRescueCdを使用した。btrfsにも対応してていい感じ。
/dev/sda1(/mnt/sda1)の内容を/dev/sdb1(/mnt/sdb1)にコピーする場合は

# cd /mnt/sda1
# tar cpf - ./ | tar pfxvC - /mnt/sdb1
とすればよい。tarはpオプションでパーミッションを保存してくれる。

今回は/dev/sdb4が新しい/になる。
終わったら/以下の/bootとか/tmpとか/dev、/procをマウントさせてから新しい環境の/となる場所にchroot。
/dev、procをマウントさせるには
# mount -o bind /dev /mnt/sdb4/dev
# mount -t proc none /mnt/sdb4/proc
その後
# chroot /dev/sdb4

/etc/fstabを書き換えて、/usr/src/linuxでmake && make install && make modules_installして、grub-install /dev/sdbすればOK。
BIOSでbootを/dev/sdbのディスクから行うようにすれば新しいディスクに乗り換えることができる。足りない所があったらもう一度SystemRescueCdでブートして作業。
SystemRescueCd便利だわ。