HDDが一個しかないサーバで後からraid1を構築(その2...LVM編)


続きです。
前回までミラーを構築して/bootをコピーして起動できるところまで確認しました。
次はルート部分を移動させれば動くという算段です。

おさらいです。 図に書くと今はこんな感じです。


せっかく今、LVMで論理やマウントポイントを組んでいますのでそのあたりは一切変更せずやりたいと思います。
(grubが茨の道なので。。。今度、論理も変更のパターンもやります。。。)

RAIDにあるパーティションをPV(物理ボリューム)にする

図で見ると RAIDにあるパーテションのデバイス名は/dev/md127p5 ですね

root@mdtest:~# pvcreate /dev/md127p5
  Physical volume "/dev/md127p5" successfully created
root@mdtest:~#

うん、これだけ。

作ったPVをVG(ボリュームグループ)に参加

参加するVG名は【mdtest-vg】です。

root@mdtest:~# vgextend mdtest-vg /dev/md127p5
  Volume group "mdtest-vg" successfully extended
root@mdtest:~#

これも一行です。
これで図に書くと

こんな感じです。
次にデータが入ってるパーティションの中身を空っぽの方へ移動します。

root@mdtest:~# pvmove /dev/sda5 /dev/md127p5
  Insufficient free space: 1978 extents needed, but only 1924 available
  Unable to allocate mirror extents for pvmove0.
  Failed to convert pvmove LV to mirrored
root@mdtest:~#

怒られた。。。空き領域がないと怒られてしまいました。
パーティション作るときに適当に数字を入れたのがここにきて問題になりました。
(だって同じ数字を入れても警告とか出るから。。。)

root@mdtest:~# df -k
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root   7331536 1139876   5796192  17% /
none                                4       0         4   0% /sys/fs/cgroup
udev                           239388       4    239384   1% /dev
tmpfs                           50152     500     49652   1% /run
none                             5120       0      5120   0% /run/lock
none                           250748       0    250748   0% /run/shm
none                           102400       0    102400   0% /run/user
/dev/md127p1                   240972   38487    190044  17% /boot

今、17%しか使ってないのでとりあえず(/)を半分にしてもいいような。。。
ということで一時的に(恒久的かも)ルートの領域を小さくしてみましょう。
mountしている状態では縮小はできませんので、ubuntu 14.04のCDを入れて修復で立ち上げ(俗に言うレスキューですね)

流れとしては

  • ファイルシステムの縮小
  • 論理グループの縮小

となります。 (容量増やすのはあとからいくらでもできます!)

~# e2fsck -f /dev/mapper/mdtest--vg-root
※e2fsckをまずやれって怒られるから

~# resize2fs /dev/mapper/mdtest--vg-root 4G
※ファイルシステムのサイズは4Gでいいよ

~# lvreduce -L 4G /dev/mapper/mdtest--vg-root
※論理ボリュームのサイズは4Gでいいよ

これで一度リブートして、立ち上げなおすと。。。

root@mdtest:~# df -k
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root   3997504 1138364   2633044  31% /
none                                4       0         4   0% /sys/fs/cgroup
udev                           239388       4    239384   1% /dev
tmpfs                           50152     488     49664   1% /run
none                             5120       0      5120   0% /run/lock
none                           250748       0    250748   0% /run/shm
none                           102400       0    102400   0% /run/user
/dev/md127p1                   240972   38487    190044  17% /boot

減ってますね!

root@mdtest:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               mdtest-vg
  PV Size               7.76 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1986
  Free PE               835
  Allocated PE          1151
  PV UUID               PfeUP8-vYhu-d2Gq-7VDz-ijQ8-eV58-AFN2k6

  --- Physical volume ---
  PV Name               /dev/md127p5
  VG Name               mdtest-vg
  PV Size               7.52 GiB / not usable 1.94 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1924
  Free PE               1924
  Allocated PE          0
  PV UUID               tLMocZ-3tjX-KrKC-0SdM-4yMw-HKvB-0ogjDa

lvを減らしたのでそれにあわせてpvの使用率も減りました。
PV Name /dev/sda5
Total PE 1986
Free PE 835
Allocated PE 1151

/dev/sda5は 1151PE使ってると

PV Name /dev/md127p5
Total PE 1924
Free PE 1924
Allocated PE 0

/ev/md127p5は 1924PE空いているのでこれでいけるはずです!
※PE → LVMで扱う大きさの単位

もう一度、pvを移動します

root@mdtest:~# pvmove /dev/sda5 /dev/md127p5
  /dev/sda5: Moved: 0.0%
  /dev/sda5: Moved: 7.2%
  /dev/sda5: Moved: 14.4%
  /dev/sda5: Moved: 21.5%
  /dev/sda5: Moved: 29.5%
  /dev/sda5: Moved: 51.2%
  /dev/sda5: Moved: 88.1%
  /dev/sda5: Moved: 100.0%
root@mdtest:~#

移動が出来ました!
pvdisplayで確認すると

root@mdtest:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               mdtest-vg
  PV Size               7.76 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1986
  Free PE               1986
  Allocated PE          0
  PV UUID               PfeUP8-vYhu-d2Gq-7VDz-ijQ8-eV58-AFN2k6

  --- Physical volume ---
  PV Name               /dev/md127p5
  VG Name               mdtest-vg
  PV Size               7.52 GiB / not usable 1.94 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1924
  Free PE               773
  Allocated PE          1151
  PV UUID               tLMocZ-3tjX-KrKC-0SdM-4yMw-HKvB-0ogjDa

PV Name /dev/sda5
Total PE 1986
Free PE 1986
Allocated PE 0

/dev/sda5の内容、全部消えました!
(正確には/dev/md127p5に移動ですが。。。)

あとは、/dev/sda5をLVMから外せば/dev/sda5が一切使われない状態になります。
VGから削除 → pvから削除の流れです。

root@mdtest:~# vgreduce mdtest-vg /dev/sda5
  Removed "/dev/sda5" from volume group "mdtest-vg"
root@mdtest:~#
root@mdtest:~# pvremove /dev/sda5
  Labels on physical volume "/dev/sda5" successfully wiped
root@mdtest:~#
root@mdtest:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md127p5
  VG Name               mdtest-vg
  PV Size               7.52 GiB / not usable 1.94 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1924
  Free PE               773
  Allocated PE          1151
  PV UUID               tLMocZ-3tjX-KrKC-0SdM-4yMw-HKvB-0ogjDa

pvから/dev/sda5が消えました!
図に書くとこんな感じです。

あとは/dev/sdaのパーテションを/dev/sdbにあわせて、/dev/md127に追加すればOKです。

partedを対話式じゃなく実行する方法を覚えました!w

root@mdtest:~# parted /dev/sda rm 1
root@mdtest:~# parted /dev/sda rm 2
※パーテションの削除(5は論理なので2を消すと一緒に消えます)

root@mdtest:~# parted /dev/sdb unit s print
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 16777216s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始   終了       サイズ     タイプ   ファイルシステム  フラグ
 1    2048s  16777215s  16775168s  primary                    boot, raid

※今動いてる/dev/sdbを確認。 これと同じ設定にすればいいはず!

root@mdtest:~# parted /dev/sda mkpart primary 2048s 16777215s
root@mdtest:~# parted /dev/sda set 1 boot on
root@mdtest:~# parted /dev/sda set 1 raid on

※同じ設定した!

root@mdtest:~# parted /dev/sda unit s print
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 16777216s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始   終了       サイズ     タイプ   ファイルシステム  フラグ
 1    2048s  16777215s  16775168s  primary  ext2              boot, raid

※確認! 同じになっています。

パーテション作成したら、RAIDに追加です。

root@mdtest:~# mdadm /dev/md127 --add /dev/sda1
mdadm: added /dev/sda1
root@mdtest:~#
root@mdtest:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sda1[2] sdb1[0]
      8383424 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  2.4% (209472/8383424) finish=5.2min speed=26184K/sec

unused devices: <none>
root@mdtest:~#

再同期が始まりました。
これで再同期処理が終われば、RAID1のミラーリングの完成です。
ただし、ここで再起動をかけると立ち上がらなくなりますので、おまじないが必要です。

root@mdtest:~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
root@mdtest:~# echo 'raid1' >> /etc/initramfs-tools/modules
root@mdtest:~# update-initramfs -k all -u
update-initramfs: Generating /boot/initrd.img-3.16.0-30-generic

※raid1モジュールを確実にロードする設定

root@mdtest:~# grub-install /dev/sda
root@mdtest:~# grub-install /dev/sdb
root@mdtest:~# update-grub
root@mdtest:~#

ここまできて失敗したら嫌なので、再度 /dev/sda /dev/sdbにgrubの設定を流し込み

最終的にこんな感じです。

LVMを使うことで論理グループより上のレイヤーを変更する必要がないので便利です!
うん LVMってステキ!!