HDDが一個しかないサーバで後からraid1を構築（その２...LVM編）

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

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

![無題図形描画 (2).png](https://qiita-image-store.s3.amazonaws.com/0/79067/a7514b07-00de-a958-f93a-8a42cfcb3996.png)
せっかく今、LVMで論理やマウントポイントを組んでいますのでそのあたりは一切変更せずやりたいと思います。
（grubが茨の道なので。。。今度、論理も変更のパターンもやります。。。）

### RAIDにあるパーティションをPV（物理ボリューム）にする
図で見ると RAIDにあるパーテションのデバイス名は/dev/md127p5 ですね

```shell-session
root@mdtest:~# pvcreate /dev/md127p5
  Physical volume "/dev/md127p5" successfully created
root@mdtest:~#
```

うん、これだけ。

### 作ったPVをVG（ボリュームグループ）に参加

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

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

これも一行です。
これで図に書くと
![無題図形描画 (3).png](https://qiita-image-store.s3.amazonaws.com/0/79067/3dc9ef77-8629-056d-ddbb-4cfdb38440aa.png)
こんな感じです。
次にデータが入ってるパーティションの中身を空っぽの方へ移動します。

```shell-session
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:~#
```

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

```shell-session
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のＣＤを入れて修復で立ち上げ（俗に言うレスキューですね）

流れとしては

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

となります。　（容量増やすのはあとからいくらでもできます！）

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

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

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

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

```shell-session
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
```

減ってますね！

```shell-session
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を移動します

```shell-session
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で確認すると

```shell-session
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から削除の流れです。

```shell-session
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が消えました！
図に書くとこんな感じです。
![無題図形描画 (4).png](https://qiita-image-store.s3.amazonaws.com/0/79067/fe75df2e-2183-fa23-1025-59a98634df60.png)

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

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

```shell-session
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に追加です。

```shell-session
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のミラーリングの完成です。
ただし、ここで再起動をかけると立ち上がらなくなりますので、おまじないが必要です。

```shell-session
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の設定を流し込み
```

最終的にこんな感じです。
![無題図形描画 (5).png](https://qiita-image-store.s3.amazonaws.com/0/79067/3975859c-f7a4-c029-ed94-929e79710c4f.png)
LVMを使うことで論理グループより上のレイヤーを変更する必要がないので便利です！
うん　LVMってステキ！！