mdadmとlvmでディスク管理

復習

64bit版 Debianで構築したサーバー君が容量不足でupdate出来ないなど困ったことが多かったので意を決してパーティーションの変更作業。
扱うデータの量が多いので失敗時が恐いけど、一応バックアップもあるし最悪消えることは・・無い。

まず現状。下記のようなパーティーションとした1GBのディスクが4台。
Device Boot Start End Blocks Id System
/dev/sda1 * 1 33 265041 fd Linux raid autodetect
/dev/sda2 34 121601 976494960 5 Extended
/dev/sda5 34 457 3405748+ 82 Linux swap / Solaris
/dev/sda6 458 121601 973089148+ fd Linux raid autodetect

sd[abcd]1はmd0を構成し、/マウント
sd[abcd]5はswap
sd[ab]6はmd1,sd[cd]6はmd2を構成。
アレイmd0,md1,md2はいずれもRAID1で、md1+md2をlvmでvg00としている。

logical volumeはVolume group目一杯で構成してしまっていたので、ディスクのやりくりが心配だったが、運良く縮小すればmd1 or md2で収まる範囲だった。(これ重要だな
$ sudo lvdisplay -C
homelv vg00 -wi-ao 28.00g
optlv vg00 -wi-ao 3.72g
srvlv vg00 -wi-ao 1.73t
tmplv vg00 -wi-ao 360.00m
usrlv vg00 -wi-ao 10.00g
varlv vg00 -wi-ao 6.00g

/dev/md0 on / type ext3
/dev/mapper/vg00-homelv on /home type ext3
/dev/mapper/vg00-optlv on /opt type ext4
/dev/mapper/vg00-tmplv on /tmp type ext4
/dev/mapper/vg00-usrlv on /usr type ext3
/dev/mapper/vg00-varlv on /var type ext3
/dev/mapper/vg00-srvlv on /srv type ext3

変更手順。
2台ずつ変更していくために、まずvg00からmd2を外したい。
巨大なパーティーションとしている/srvを800GB以下にすることでmd1以内の容量となるようにする。
$ lvdisplay -m
でマッピングを確認すると、vgでpvのどれが利用されているか解る。

パーティーションの縮小作業
$ sudo umount /srv
$ sudo fsck.ext3 -f /dev/mapper/vg00-srvlv
$ sudo resize2fs /dev/mapper/vg00-srvlv 730G
$ sudo mount /srv

中身が小さくなったので、lvを小さくする。
$ sudo lvreduce -L 730G /dev/mapper/vg00-srvlv

続いて、md2側を利用しているデータをmd1に移動。
$ sudo pvmove /dev/md2
このコマンドは凄く時間がかかるらしいのだが、ほぼ使っていなかったらしく一瞬だった。

md2をvgから外す
$ sudo vgreduce vg00 /dev/md2

sdc,sddのswapパーティーションを利用解除
$ sudo swapoff -v UUID=
$ sudo swapoff -v UUID=

アレイの解除
$ sudo mdadm -S /dev/md2
$ sudo mdadm /dev/md0 -f /dev/sdc6
$ sudo mdadm /dev/md0 -f /dev/sdd6
$ sudo mdadm /dev/md0 -r /dev/sdc6
$ sudo mdadm /dev/md0 -r /dev/sdd6
これでsdc, sddはフリーになった。

新しくパーティーションを設定。
$ sudo fdisk /dev/sdc
新しく下記のように編集。
/dev/sda1 * 1 132 1060258+ fd Linux raid autodetect
/dev/sda2 133 121601 975699742+ 5 Extended
/dev/sda5 133 525 3156741 82 Linux swap / Solaris
/dev/sda6 526 121601 972542938+ fd Linux raid autodetect

sdcに設定したパーティーションをsddに複写
$ sudo sfdisk -d /dev/sdc | sudo sfdisk /dev/sdd

アレイを再作成
$ sudo mdadm –create /dev/md2 –level=1 –raid-disks=2 missing /dev/sdd6

初期化してリビルド
$ sudo mkfs.ext3 /dev/md2
$ sudo mdadm /dev/md2 -a /dev/sdc6
時間がかかるので待つ。今回は3時間近くかかった。
$ watch cat /proc/mdstat

vgに追加
$ sudo vgextend vg00 /dev/md2

md0にもsdc1,sdd1を追加
$ sudo mdadm /dev/md0 -a /dev/sdc1
$ sudo mdadm /dev/md0 -a /dev/sdd1
容量が小さいので比較的短時間で終わる。

swapも作り直し
$ sudo mkswap /dev/sdc5
$ sudo mkswap /dev/sdd5
fstabの設定も修正
$ sudo vim /etc/fstab
$ sudo swapon -v UUID=
$ sudo swapon -v UUID=

md2側完了。
同じようにmd1側のパーティーションも変更するために、
md1側からmd2側利用に切り替える。
$ sudo pvmove /dev/md1 &
かなり時間がかかるからバックグラウンドで動かしておくといいかも。

sda,sdbも同じように作業を繰り返す。
md0からsda1,sdb1を外し、vg00からmd1を分離してmd1アレイを解除。
swapも利用解除してsda,sdbをフリーにしてからパーティーション切り直し。

$ sudo sfdisk -d /dev/sdc | sudo sfdisk /dev/sda
$ sudo sfdisk -d /dev/sdc | sudo sfdisk /dev/sdb
これですべてのディスクが同じ設定になったと。

md0へsda1,sdb1を追加
sda6,sdb6でmd1を作成、フォーマット。
md1をvg00へ追加(lvの拡張は後でいつでも出来るから後回し)
sda5,sdb5でswapを作成、fstab修正。swapon

大事なポイントはここからで、md0にマウントしている/をどうするのか。
今回知ったポイントで一番大きいところはext3の拡張はマウントした状態で行えると言うこと。

今までの作業でmd0のsd[abcd]1パーティーションは1GBとなっているので、
まずアレイのサイズを拡張する。
$ sudo mdadm –grow /dev/md0 -z max
リビルドが行われるが、これも1GBなのですぐ終わる。

ここです、ext3ファイルシステムはマウントしたまま拡張可能。安心
$ sudo resize2fs /dev/md0

これにて万事解決。
容量不足で実行できなかったlinux-imageのupdateを実行したところ気になるwarningが。

W: mdadm: the array /dev/md2 with UUID 958d14c4:ce08bb4b:26636c8b:317bbf90
W: mdadm: is currently active, but it is not listed in mdadm.conf. if
W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare
W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes.
W: mdadm: the array /dev/md1 with UUID d84d2821:b6365b56:4c31cd24:6521e64d
W: mdadm: is currently active, but it is not listed in mdadm.conf. if
W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE!
W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare
W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes.

そうだ、アレイを構築し直したのでUUID等情報を修正しないとなりません。
$ sudo mdadm –detail –scan
これで表示されるARRAY表示をmdadm.confに記載する。
$ sudo vim /etc/mdadm/mdadm.conf

起動できなくなったりしたら恐いので、再度インストールしてみる。
$ sudo aptitude reinstall linux-image-2.6.32-5-amd64

もしかしたら
update-initramfs だけでいいのかな。

またもう一つ調べなきゃ行けないことを思いだした。
initramfsについて。

「mdadmとlvmでディスク管理」への2件のフィードバック

  1. 長いよ(−_−#)

    意味わかんないし(・・?)

    最近ゴハンネタないジャーン(>_<)

    1. 書くのにも結構時間かかりました。
      これでも途中はしょっていますけど

      ごはんは先週1週間グラタンだったんで。。(汗
      今週末は何を作ろうか思案中。簡単かつ2,3日食べられるもの。

コメントを残す

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