LVMでRAID1の構築、障害対応、他RAIDボリュームの追加

# 前回記事
[LVMで論理ボリュームの作成、拡張、縮小、複製](http://qiita.com/TsutomuNakamura/items/93c6333c8dd32aeb197a "LVMで論理ボリュームの作成、拡張、縮小、複製")

# LVM でRAID1 を構築する
次はRAID1 の上にLVM を構築する方法について説明していきます。
今度はRAID1 の上にLVM を構築し、高可用性を実現します。
![LVM_CreateLVMRAID1_0000.png](https://qiita-image-store.s3.amazonaws.com/0/70152/a7b9b4ea-2a1c-6947-072c-6740a3355fdd.png)

物理デバイスの構成としては[LVMで論理ボリュームの作成、拡張、縮小、複製](http://qiita.com/TsutomuNakamura/items/93c6333c8dd32aeb197a "LVMで論理ボリュームの作成、拡張、縮小、複製") と同じデバイス構成で実施していきます。
`/dev/md0` を`/dev/sdb1` と`/dev/sdc1` で、`/dev/md1` を`/dev/sdd1` と`/dev/sde1` で構築し、これらがLVM を構築するための物理ボリュームとなります。

## 必要な容量の見積もりについて 
普段、物理的なRAID1 を構築する場合、物理デバイス(例えば1台 100GB 容量のHDD) を2 台でRAID1 を構築しても、利用できる容量は物理デバイス1 台分の100 GB の容量しか使用できないことは、RAID1 構築経験者であれば、理解できるでしょう。
LVM 上でRAID1 を構築する場合は、容量の見積もり感覚が若干異なる点に注意してください。
例えば、100 GB のRAID1 領域を作成したい場合は、その2 倍の領域が必要で、まず物理ボリューム合計で200 GB の領域を確保(できればもう少し余裕をもって確保)し、それを論理ボリュームグループに加え、RAID1 を構築し、100 GB のRAID1 利用可能領域ができるといった感覚で見積もります。
もしくは違う考え方として、最初に200GB の論理ボリュームグループを作成した場合は、その上で構築できるRAID1 領域は100GB 以下になるということを理解してください。
一番最初、自分はこれで失敗しました...(；´Д`A)

## デバイスパーティションの削除 
パーティションを再度作成します。
これより前の手順で既にパーティションが作成されている場合は、次のような手順で一旦削除してください。

```text
$ sudo fdisk /dev/sdb

Command (m for help): d
Selected partition 1

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

```


`/dev/sdb` のパーティションを削除したら、他のデバイスにも構成をコピーします。

```text
$ for I in {c,d,e,f}; do sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sd${I} --force; done
```


# ボリュームの作成 
新たにfdisk コマンドで各デバイスに20GB のボリュームを作成します。

```text
$ sudo fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xccc65e15.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-83886079, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +20G

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
```


パーティションを他デバイスにコピーします。

```text
$ for I in {c,d,e}; do sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sd${I} --force; done
```


論理ボリュームを構築します。

```text
$ sudo pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
$ sudo vgcreate lvg-share /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
$ sudo lvcreate --name public --size 18G lvg-share
$ sudo lvcreate --name media --size 8GB lvg-share
$ sudo lvcreate --name document --size 6GB lvg-share
```


ファイルシステムを作成します。

```text
$ sudo mkfs.ext4 /dev/lvg-share/public
$ sudo mkfs.xfs /dev/lvg-share/media
$ sudo mkfs.reiserfs /dev/lvg-share/document
```


ファイルシステムを作成したら、一旦マウントしてみます。

```text
$ sudo mount /dev/lvg-share/public /mnt/public
$ sudo mount /dev/lvg-share/media /mnt/media
$ sudo mount /dev/lvg-share/document /mnt/document
$ df -h
.......
/dev/mapper/lvg--share-public     18G   44M   17G   1% /mnt/public
/dev/mapper/lvg--share-media     8.0G   33M  8.0G   1% /mnt/media
/dev/mapper/lvg--share-document  7.0G   33M  7.0G   1% /mnt/document
```


# 既存データの退避 
ここで、`/dev/sdc1 `(/dev/md0 のセカンダリ)と`/dev/sde1 `(/dev/md1 のセカンダリ)のデータを残りのパーティション(/dev/sdb1, /dev/sdd1)に退避していきます。
この2 つの物理ボリュームは、後ほどRAID1 を構築するときにフォーマットをして、RAID1 のセカンダリボリュームとして追加しますが、既に保存されているデータを失わないようにするための方法です。

まず、現在の論理ボリュームの状態を確認してみます。

```text
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               511
  Allocated PE          4608
  PV UUID               Sf0Pph-cQxd-fRJH-1TdU-iiCR-WjmF-w9fdxL
   
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               1535
  Allocated PE          3584
  PV UUID               u0oCVN-FH5t-nsXn-32zr-x0wL-PLEH-Bm5pQO
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               Qaj34D-N5Fj-ktA1-OO5M-lwf2-COM5-VzABEK
   
  --- Physical volume ---
  PV Name               /dev/sde1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               NUBljh-9EnD-e2oT-9MYS-vckQ-DKdz-TQxaRU
```


`/dev/sdc1` のデータを退避します。

```text
$ sudo modprobe dm-mirror
$ sudo pvmove /dev/sdc1
  /dev/sdc1: Moved: 0.1%
  /dev/sdc1: Moved: 4.7%
.......
  /dev/sdc1: Moved: 97.9%
  /dev/sdc1: no pvmove in progress - already finished or aborted.
```


`/dev/sdc1` のデータ移行が完了したら、`pvdisplay` コマンドで結果を確認してみます。

```text
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               511
  Allocated PE          4608
  PV UUID               Sf0Pph-cQxd-fRJH-1TdU-iiCR-WjmF-w9fdxL
   
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               u0oCVN-FH5t-nsXn-32zr-x0wL-PLEH-Bm5pQO
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               1535
  Allocated PE          3584
  PV UUID               Qaj34D-N5Fj-ktA1-OO5M-lwf2-COM5-VzABEK
   
  --- Physical volume ---
  PV Name               /dev/sde1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               NUBljh-9EnD-e2oT-9MYS-vckQ-DKdz-TQxaRU
```


上記の結果を確認すると、`/dev/sdc1` に格納されていた3584 物理エクステントが、`/dev/sdd1` に移動していることがわかります。
データの退避が確認できたら、`/dev/sdc1` を論理ボリュームグループからはずし、物理ボリュームも削除します。

```text
$ sudo vgreduce lvg-share /dev/sdc1
$ sudo pvremove /dev/sdc1
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               511
  Allocated PE          4608
  PV UUID               Sf0Pph-cQxd-fRJH-1TdU-iiCR-WjmF-w9fdxL
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               1535
  Allocated PE          3584
  PV UUID               Qaj34D-N5Fj-ktA1-OO5M-lwf2-COM5-VzABEK
   
  --- Physical volume ---
  PV Name               /dev/sde1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               NUBljh-9EnD-e2oT-9MYS-vckQ-DKdz-TQxaRU
```


続けて`/dev/sde1` 物理ボリュームに格納されているデータを移行します。

```text
$ sudo pvmove /dev/sde1
  No data to move for lvg-share
```


今回は、`/dev/sde1` にデータは含まれていなかったため、何も起こりませんでした。
`/dev/sde1` を論理ボリュームグループからはずし、物理ボリュームも削除します。

```text
$ sudo vgreduce lvg-share /dev/sde1
$ sudo pvremove /dev/sde1
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               511
  Allocated PE          4608
  PV UUID               Sf0Pph-cQxd-fRJH-1TdU-iiCR-WjmF-w9fdxL
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               1535
  Allocated PE          3584
  PV UUID               Qaj34D-N5Fj-ktA1-OO5M-lwf2-COM5-VzABEK
```


# RAID1 パーティションの作成 
物理ボリュームの取り外しが完了したら、`/dev/sdc1` と`/dev/sde1` をLinux RAID autodetect パーティションを作成します。

```text
$ sudo fdisk /dev/sdc

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix      
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
```


`/dev/sdc` のパーティションを`/dev/sde` にコピーします。

```text
$ sudo sfdisk -d /dev/sdc | sudo sfdisk /dev/sde --force
```


現在のデバイスの状態を確認します。

```text
$ sudo fdisk -l

......

Disk /dev/sdc: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512  512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41945087    20971520   fd  Linux raid autodetect

......

Disk /dev/sde: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512  512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1            2048    41945087    20971520   fd  Linux raid autodetect

```


次に、RAID1 を構築していきます。
RAID1 を構築するために`/dev/sdc1` を`/dev/md0` デバイスに、`/dev/sde1` を`/dev/md1` デバイスに追加します。
`/dev/sdb1` と`/dev/sdd1` は、まだこの段階では追加しません。
そのため、`/dev/sdc1`, `/dev/sde1` を追加するには`mdadm` コマンドに`missing` オプションを使用して実行します。


```text
$ sudo mdadm --create /dev/md0 --auto=yes -l 1 -n 2 /dev/sdc1 missing
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

$ sudo mdadm --create /dev/md1 --auto=yes -l 1 -n 2 /dev/sde1 missing
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

```


### RAID1 のデバイス名ズレ解消 
OS 再起動時にRAID1 のデバイス名(md0, md1)がずれる(md127 等に)ことがあるので、事前に`mdadm.conf` ファイルに設定を追加しておきます。

```text:/etc/mdadm/mdadm.conf
$ cp -ip /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.org

$ echo "DEVICE partitions" | sudo tee -a /etc/mdadm/mdadm.conf
DEVICE partitions

$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata#1.2 name=lvm-test-on-pdv:0 UUID7a359312:522cb81f:a99b6b1b:b9b3efb9
ARRAY /dev/md1 metadata#1.2 name=lvm-test-on-pdv:1 UUIDda70e87b:01242494:f0b45f80:e575ea0e
```


/etc/mdadm/mdadm.conf ファイルを開き、ファイルの最後の方に次のような定義が追加されていることを確認します。

```text
$ sudo vim /etc/mdadm/mdadm.conf
.......
DEVICE partitions
ARRAY /dev/md0 metadata#1.2 name=lvm-test-on-pdv:0 UUID7a359312:522cb81f:a99b6b1b:b9b3efb9
ARRAY /dev/md1 metadata#1.2 name=lvm-test-on-pdv:1 UUIDda70e87b:01242494:f0b45f80:e575ea0e
```


initramfs イメージを再作成します。

```text
$ sudo update-initramfs -u
```


可能であれば、OS を再起動してRAID デバイス名が変更されていないことを確認してみてください。

# RAID1 の構築 
`/dev/md0` と`/dev/md1` を物理ボリュームとして登録します。

```text
$ sudo pvcreate /dev/md0 /dev/md1
  Physical volume "/dev/md0" successfully created
  Physical volume "/dev/md1" successfully created
```


`/dev/md0` と`/dev/md1` を`lvg-share` ボリュームグループに追加します。

```text
$ sudo vgextend lvg-share /dev/md0 /dev/md1
  Volume group "lvg-share" successfully extended
```


`pvdisplay` コマンドと`vgdisplay` コマンドを実行して状態を確認します。

```text:pvdisplay
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               511
  Allocated PE          4608
  PV UUID               MQWAVQ-IAY5-0KPR-F5Dq-WbI9-jk8T-7UuIyz
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               lvg-share
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               1535
  Allocated PE          3584
  PV UUID               NHHOBT-eAkD-Uffv-CAcs-oa2y-2yqN-cho3UO
   
  --- Physical volume ---
  PV Name               /dev/md0
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 3.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               5115
  Allocated PE          0
  PV UUID               nKzZBM-UEi0-jK0T-2riv-ceej-7a0N-hmWupv
   
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 3.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               5115
  Allocated PE          0
  PV UUID               M7oAVU-kU9W-vhxf-80Cx-fGHw-yHMw-VjZXS3
```



```text:vgdisplay
$ sudo vgdisplay
  --- Volume group ---
  VG Name               lvg-share
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               79.95 GiB
  PE Size               4.00 MiB
  Total PE              20468
  Alloc PE / Size       8192 / 32.00 GiB
  Free  PE / Size       12276 / 47.95 GiB
  VG UUID               Xkf0yt-YxbZ-dTN3-KFMa-g1wz-ax3v-4dSfAf
```


いよいよ`/dev/sdb1` を`/dev/md0` へ、`/dev/sdd1` を`/dev/md1` RAID アレイへ追加していきます。
まずは、`/dev/sdb1` と`/dev/sdd1` のデータを`/dev/md0` 及び`/dev/md1` へ退避します。


```text
$ sudo pvmove /dev/sdb1 /dev/md0
  /dev/sdb1: Moved: 0.1%
.......
  /dev/sdb1: Moved: 100.0%

$ sudo pvmove /dev/sdd1 /dev/md1
  /dev/sdd1: Moved: 0.0%
.......
  /dev/sdd1: Moved: 100.0%
```



`/dev/sdb1` と`/dev/sdd1` をボリュームグループから外します。

```text
$ sudo vgreduce lvg-share /dev/sdb1 /dev/sdd1
  Removed "/dev/sdb1" from volume group "lvg-share"
  Removed "/dev/sdd1" from volume group "lvg-share"

$ sudo pvremove /dev/sdb1 /dev/sdd1
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdd1" successfully wiped
```


`pvdisplay` コマンドでボリュームを確認します。
`/dev/md0`, `/dev/md1` のみが残っている状態です。

```text
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/md0
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 3.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               507
  Allocated PE          4608
  PV UUID               nKzZBM-UEi0-jK0T-2riv-ceej-7a0N-hmWupv
   
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 3.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               1531
  Allocated PE          3584
  PV UUID               M7oAVU-kU9W-vhxf-80Cx-fGHw-yHMw-VjZXS3
```


次に、先ほどボリュームグループから外した`/dev/sdb1` と`/dev/sdd1` をLinux raid autodetect でフォーマットします。

```text
$ sudo fdisk /dev/sdb

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

$ sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sdd --force
```


`/dev/sdb1` を`/dev/md0`, `/dev/sdd1` を`/dev/md1` へ追加します。

```text
$ sudo mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1

$ sudo mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: added /dev/sdd1
```


これでRAID1 の同期が開始されました。
同期の進捗は次のコマンドを実行することで確認できます。

```text
$ sudo cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdd1[2] sde1[0]
      20955008 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery #  1.7% (368000/20955008) finish=22.3min speed15333K/sec
      
md0 : active raid1 sdb1[2] sdc1[0]
      20955008 blocks super 1.2 [2/1] [U_]
      [#=>..................]  recovery = 10.7% (2259008/20955008) finish=12.7min speed24390K/sec
      
unused devices: <none>
```


同期が完了すると以下のようになります。

```text
unuses devices: <none>
nalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdd1[2] sde1[0]
      20955008 blocks super 1.2 [2/2] [UU]
      
md0 : active raid1 sdb1[2] sdc1[0]
      20955008 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
```


同期が完了すれば、RAID1 の構築は完了です。

# ディスク障害を想定した手順 
ここでは、`/dev/sdc`と`/dev/sde` ディスクに障害が発生した場合を想定した手順を実施していきます。
まずは、`mdadm` コマンドの`--fail`で不良パーティションとして定義します。
次に`--remove` を使用して不良パーティションをRAID から切り離します。

```text
$ sudo mdadm --manage /dev/md0 --fail /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
$ sudo mdadm --manage /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
$ sudo mdadm --manage /dev/md1 --fail /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md1
$ sudo mdadm --manage /dev/md1 --remove /dev/sde1
mdadm: hot removed /dev/sde1 from /dev/md1
```


RAID1 の状態を確認します。

```text
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdd1[2]
      20955008 blocks super 1.2 [2/1] [_U]
      
md0 : active raid1 sdb1[2]
      20955008 blocks super 1.2 [2/1] [_U]
      
unused devices: <none>
```

切り離しが完了しました。
この後、実際の業務等では物理デバイスを入れ替え、`/dev/sdc`, `/dev/sde` を取り替えをしておきます。

ここでは学習目的なので、物理デバイスの入れ替えは行わず、パーティションを削除して未フォーマット状態の物理デバイスとして再生します。

```text:わざとパーティションを壊す
$ for I in {c,e}; do sudo dd if#/dev/zero of=/dev/sd${I} bs=1024 count$(echo "1 * 1024 * 100" | bc); done
.......

$ sudo fdisk -l /dev/sdc
Disk /dev/sdc: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512  512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table

$ sudo fdisk -l /dev/sde
.......
```


`/dev/sdb` のパーティションを`/dev/sdc`, `/dev/sde` にコピーします。

```text
$ for I in {c,e}; do sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sd${I} --force; done
※今回は/dev/sdb と同じ構成で問題ないためこのようにしています。
```


`/dev/sdc` と`/dev/sde` を、それぞれ`/dev/md0` と`/dev/md1` に追加します。


```text
$ sudo mdadm --manage /dev/md0 --add /dev/sdc1
mdadm: added /dev/sdc1

$ sudo mdadm --manage /dev/md1 --add /dev/sde1
mdadm: added /dev/sde1
```


同期の進捗状態を確認します。

```text
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sde1[3] sdd1[2]
      20955008 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery #  1.5% (332544/20955008) finish=22.7min speed15115K/sec
      
md0 : active raid1 sdc1[3] sdb1[2]
      20955008 blocks super 1.2 [2/1] [_U]
      [#==>.................]  recovery = 18.0% (3784640/20955008) finish=12.1min speed23564K/sec
      
unused devices: <none>
```


同期が完了すれば成功です。

# 物理デバイスのあまり領域を使用してもうひとつRAID1 を作成する 
`/dev/md2` と`/dev/md3` を物理デバイスの残り領域を使用して作成してみましょう。
ここでは、`/dev/sdb` と`/dev/sdc` に余りの未フォーマット領域があることを想定し、`/dev/md2` に`/dev/sdb2` と`/dev/sdc2`、`/dev/md3` に`/dev/sdd2` と`/dev/sde2` を使用してもうひとつRAID1 を作成してみます。
今回の手順は、VM を使用していますが、実際は例えば`/dev/sdg`や`/dev/sdh` 等の物理デバイスを増設して 論理ボリュームの容量を増やすといったシチュエーションで役に立ったりします。
まず、各物理デバイスの残り領域をフォーマットします。

```text
$ sudo fdisk /dev/sdb
Command (m for help): p

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
246 heads, 3 sectors/track, 113666 cylinders, total 83886080 sectors
Units # sectors of 1 * 512  512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x253bf895

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41945087    20971520   fd  Linux raid autodetect

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 
Using default value 2
First sector (41945088-83886079, default 41945088): 
Using default value 41945088
Last sector, +sectors or +size{K,M,G} (41945088-83886079, default 83886079): 
Using default value 83886079

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
```


他の物理デバイスにパーティションをコピーします。

```text
$ for I in {c,d,e}; do sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sd${I} --force; done
```


---------------------------------------------------------------------------------------------------
TODO: OS を再起動しないと/dev/sdb2〜/dev/sde2 が出現しない！？
今回の自分の環境ではOS を再起動することで/dev/sdb2〜/dev/sde2 が出現しました。
---------------------------------------------------------------------------------------------------

`/dev/sdb2` と`/dev/sdc2` を`/dev/md2` へ取り込みます。

```text
$ sudo mdadm --create /dev/md2 --auto=yes -l 1 -n 2 /dev/sdb2 /dev/sdc2
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
```


`/dev/sdd2` と`/dev/sde2` を`/dev/md3` へ取り込みます。

```text
$ sudo mdadm --create /dev/md3 --auto=yes -l 1 -n 2 /dev/sdd2 /dev/sde2
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md3 started.
```


デバイス名のズレを防止するために、mdadm.conf ファイルを編集します。

```text
$ sudo mdadm --detail --scan | egrep '^ARRAY /dev/md[23]' | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md2 metadata#1.2 name=lvm-test-on-pdv:2 UUID366d696f:c5a69c4f:8b1d198e:d0c88a13
ARRAY /dev/md3 metadata#1.2 name=lvm-test-on-pdv:3 UUID0cf37c81:ec6324c2:01de9bd6:a23d8fb8
```


initramfs イメージを再作成します。

```text
$ sudo update-initramfs -u
```


`/dev/md2` と`/dev/md3` RAID1 の同期進捗を確認します。

```text
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md3 : active raid1 sde2[1] sdd2[0]
      20953984 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc2[1] sdb2[0]
      20953984 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sde1[3] sdd1[2]
      20955008 blocks super 1.2 [2/2] [UU]
      
md0 : active raid1 sdc1[3] sdb1[2]
      20955008 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
```


物理ボリュームとして`/dev/md2`, `/dev/md3` を追加します。

```text
$ sudo pvcreate /dev/md2 /dev/md3
```


`/dev/md2`, `/dev/md3` をボリュームグループに追加します。

```text
$ sudo vgextend lvg-share /dev/md2 /dev/md3
```


`pvdisplay` を実行します。

```text
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/md0
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 3.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               507
  Allocated PE          4608
  PV UUID               lMgkug-CfZE-STFc-L0aJ-mz77-BZnw-FMaeaU
   
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 3.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               1531
  Allocated PE          3584
  PV UUID               kq6z6E-6nYu-u1Ad-TUEe-TZfL-RPHi-Lq18Jd
   
  --- Physical volume ---
  PV Name               /dev/md2
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 2.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               5115
  Allocated PE          0
  PV UUID               qp8YU4-wuH3-VI3q-PnFD-bY4e-szHP-MVk2Mq
   
  --- Physical volume ---
  PV Name               /dev/md3
  VG Name               lvg-share
  PV Size               19.98 GiB / not usable 2.88 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5115
  Free PE               5115
  Allocated PE          0
  PV UUID               2DXJxE-Kow7-1p8j-jw2I-29WI-VVNx-9NoeKt
```



```text:vgdisplay
$ sudo vgdisplay
  --- Volume group ---
  VG Name               lvg-share
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  21
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               79.92 GiB
  PE Size               4.00 MiB
  Total PE              20460
  Alloc PE / Size       8192 / 32.00 GiB
  Free  PE / Size       12268 / 47.92 GiB
  VG UUID               DBgEtU-tjpa-jqcN-tKGV-Ped5-WKT0-BcGuv1
```



```text:lvdisplay
$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/lvg-share/public
  LV Name                public
  VG Name                lvg-share
  LV UUID                s6aaIK-Dfaz-dIkL-sybW-W5q2-9ANc-rorUbQ
  LV Write Access        read/write
  LV Creation host, time lvm-test-on-pdv, 2015-03-14 18:20:00 +0900
  LV Status              available
  # open                 0
  LV Size                18.00 GiB
  Current LE             4608
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0
   
  --- Logical volume ---
  LV Path                /dev/lvg-share/media
  LV Name                media
  VG Name                lvg-share
  LV UUID                FZzDeD-lPFn-WEH3-JKPH-93eS-9y0z-RQeGht
  LV Write Access        read/write
  LV Creation host, time lvm-test-on-pdv, 2015-03-14 18:20:04 +0900
  LV Status              available
  # open                 0
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
   
  --- Logical volume ---
  LV Path                /dev/lvg-share/document
  LV Name                document
  VG Name                lvg-share
  LV UUID                d00kFR-a0jk-YGwn-j53z-ZMav-nyy9-O9c3ft
  LV Write Access        read/write
  LV Creation host, time lvm-test-on-pdv, 2015-03-14 18:20:10 +0900
  LV Status              available
  # open                 0
  LV Size                6.00 GiB
  Current LE             1536
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

```


上記コマンド結果で特に問題が無いことが確認できました。
論理ボリュームグループの容量が増えたので、これで他の論理ボリュームの容量を増やすことができるようになりました。
今回は`xfs` ファイルシステムの`/dev/lvg-share/media` の容量を`8GiB` から`28GiB` に拡張してみます。

```text
$ sudo lvextend -L 28G /dev/lvg-share/media
  Extending logical volume media to 28.00 GiB
  Logical volume media successfully resized
```


`xfs` ファイルシステムを拡張します。

```text
$ sudo xfs_growfs /dev/lvg-share/media 
meta-data#/dev/mapper/lvg--share-media isize=256    agcount=4, agsize524288 blks
         #                       sectsz=512   attr2
data     #                       bsize=4096   blocks=2097152, imaxpct25
         #                       sunit=0      swidth0 blks
naming   #version 2              bsize=4096   ascii-ci0
log      #internal               bsize=4096   blocks=2560, version2
         #                       sectsz=512   sunit=0 blks, lazy-count1
realtime #none                   extsz=4096   blocks=0, rtextents0
data blocks changed from 2097152 to 7340032
```


`df -h` コマンドでボリュームが拡張されたことを確認します。

```text
$ df -h 
Filesystem                       Size  Used Avail Use% Mounted on
/dev/sda1                         75G  1.2G   70G   2% /
none                             4.0K     0  4.0K   0% /sys/fs/cgroup
udev                             2.0G  4.0K  2.0G   1% /dev
tmpfs                            394M  3.2M  391M   1% /run
none                             5.0M     0  5.0M   0% /run/lock
none                             2.0G     0  2.0G   0% /run/shm
none                             100M     0  100M   0% /run/user
/dev/mapper/lvg--share-media      28G   33M   28G   1% /mnt/media
/dev/mapper/lvg--share-public     18G   44M   17G   1% /mnt/public
/dev/mapper/lvg--share-document  6.0G   33M  6.0G   1% /mnt/document
```


`/mnt/media` の領域が拡張されていることがわかります。

# 次の記事
[LVMでスナップショットの作成と状態の復元](http://qiita.com/TsutomuNakamura/items/a68377952d07397db448 "LVMでスナップショットの作成と状態の復元")