LoginSignup
6
8

More than 5 years have passed since last update.

LVM2でRAID5

Posted at

概要

mdadmを使用せず、LVM2のRAID機能を使用したRAID5論理ボリュームをループバックデバイスを用いて構築します。

構築環境

項目 詳細
OS Gentoo Linux
initシステム Systemd
LVM2 バージョン 2.02.145-r2
RAID5 ファイルシステム XFS

準備

各種ツールのインストール

# emerge lvm2 xfsprogs
# systemctl start lvm2-lvmetad

ループバックデバイスの作成

# mkdir /tmp/img
# cd /tmp/img
# dd if=/dev/zero of=./img128_0 bs=1M count=128
# dd if=/dev/zero of=./img128_1 bs=1M count=128
# dd if=/dev/zero of=./img128_2 bs=1M count=128
# dd if=/dev/zero of=./img256_0 bs=1M count=256
# dd if=/dev/zero of=./img256_1 bs=1M count=256
# losetup /dev/loop0 ./img128_0
# losetup /dev/loop1 ./img128_1
# losetup /dev/loop2 ./img128_2
# losetup /dev/loop3 ./img256_0
# losetup /dev/loop4 ./img256_1

RAID5構築

論理ボリューム割り当てポリシー(allocation policy )に cling を用いてRAID5の論理ボリュームを構築します。cling では lvextend コマンドで論理ボリュームを拡張する際に、同じタグのついた物理ボリュームでサブ論理ボリュームを拡張します。したがって、同一の物理ボリュームに複数のサブ論理ボリュームが割り当てられなくなります。

物理ボリュームの作成

# pvcreate /dev/loop[0-2]

ボリュームグループの作成

# vgcreate vg00 /dev/loop[0-2]

cling用タグ付け

# pvchange --addtag raid5_0 /dev/loop0
# pvchange --addtag raid5_1 /dev/loop1
# pvchange --addtag raid5_2 /dev/loop2
# nano -w /etc/lvm/lvm.conf

allocation セクションの cling_tag_list を以下の様に設定

/etc/lvm/lvm.conf
allocation {
    cling_tag_list = [ "@raid5_0", "@raid5_1", "@raid5_2" ]
}

タグの確認方法

# pvs -a -o +pv_tags /dev/loop[0-2]
  PV         VG   Fmt  Attr PSize   PFree   PV Tags
  /dev/loop0 vg00 lvm2 a--  124.00m 124.00m raid5_0
  /dev/loop1 vg00 lvm2 a--  124.00m 124.00m raid5_1
  /dev/loop2 vg00 lvm2 a--  124.00m 124.00m raid5_2

RAID5構築

# lvcreate --alloc cling --type raid5 -i 2 -l 100%FREE -n r5 vg00 @raid5_0 @raid5_1 @raid5_2
# mkfs.xfs /dev/vg00/r5

lvcreate の最後のタグ指定は特に必要ありませんが他の物理ボリュームがあった場合、誤って別の物理ボリュームに作成される可能性があるため、指定したほうが無難です。

パラメータ 詳細
--alloc allocation policy を指定
cling
--type segment type を指定
RAID5を作るのでraid5
-i stripes を指定
2:3個の物理ボリュームを使ってRAID5を構築
3:4個の物理ボリュームを使ってRAID5を構築
-L 論理ボリュームのサイズ
-n 論理ボリューム名

デバイスの交換

/dev/loop[0-1] を容量の大きなデバイス /dev/loop[3-4] と交換します。

新しい物理ボリュームの準備

# pvcreate /dev/loop[3-4]
# vgextend vg00 /dev/loop[3-4]
# pvchange --addtag raid5_0 /dev/loop3
# pvchange --addtag raid5_1 /dev/loop4

物理ボリュームの交換

/dev/loop0/dev/loop3 に交換します。

# lvconvert --replace /dev/loop0 vg00/r5 /dev/loop3
# pvchange --deltag raid5_0 /dev/loop0

同期が完了したら、/dev/loop1/dev/loop4 に交換します。

# lvconvert --replace /dev/loop1 vg00/r5 /dev/loop4
# pvchange --deltag raid5_1 /dev/loop1

容量の拡張

/dev/loop2 と上記で交換した /dev/loop0 を束ねて容量の拡張を行ないます。
ここで、論理ボリューム割り当てポリシー(allocation policy )の cling 効果が発揮されます。

現状確認

# pvs -a -o +pv_tags /dev/loop[0-4]
  PV         VG   Fmt  Attr PSize   PFree   PV Tags
  /dev/loop0 vg00 lvm2 a--  124.00m 124.00m
  /dev/loop1 vg00 lvm2 a--  124.00m 124.00m
  /dev/loop2 vg00 lvm2 a--  124.00m      0  raid5_2
  /dev/loop3 vg00 lvm2 a--  252.00m 128.00m raid5_0
  /dev/loop4 vg00 lvm2 a--  252.00m 128.00m raid5_1

タグ設定

/dev/loop2 と同じタグを /dev/loop0 に設定します。

# pvchange --addtag raid5_2 /dev/loop0
# pvs -a -o +pv_tags /dev/loop[0-4]
  PV         VG   Fmt  Attr PSize   PFree   PV Tags
  /dev/loop0 vg00 lvm2 a--  124.00m 124.00m raid5_2
  /dev/loop1 vg00 lvm2 a--  124.00m 124.00m
  /dev/loop2 vg00 lvm2 a--  124.00m      0  raid5_2
  /dev/loop3 vg00 lvm2 a--  252.00m 128.00m raid5_0
  /dev/loop4 vg00 lvm2 a--  252.00m 128.00m raid5_1

容量拡張

# lvextend --alloc cling -r -l +100%FREE vg00/r5
# pvs -a -o +pv_tags /dev/loop[0-4]
  PV         VG   Fmt  Attr PSize   PFree   PV Tags
  /dev/loop0 vg00 lvm2 a--  124.00m      0  raid5_2
  /dev/loop1 vg00 lvm2 a--  124.00m 124.00m
  /dev/loop2 vg00 lvm2 a--  124.00m      0  raid5_2
  /dev/loop3 vg00 lvm2 a--  252.00m   4.00m raid5_0
  /dev/loop4 vg00 lvm2 a--  252.00m   4.00m raid5_1

# lvs -a -o name,devices,seg_le_ranges
  LV            Devices                                      PE Ranges
  r5            r5_rimage_0(0),r5_rimage_1(0),r5_rimage_2(0) r5_rimage_0:0-60 r5_rimage_1:0-60 r5_rimage_2:0-60
  [r5_rimage_0] /dev/loop3(1)                                /dev/loop3:1-61
  [r5_rimage_1] /dev/loop4(1)                                /dev/loop4:1-61
  [r5_rimage_2] /dev/loop2(1)                                /dev/loop2:1-30
  [r5_rimage_2] /dev/loop0(0)                                /dev/loop0:0-30
  [r5_rmeta_0]  /dev/loop3(0)                                /dev/loop3:0-0
  [r5_rmeta_1]  /dev/loop4(0)                                /dev/loop4:0-0
  [r5_rmeta_2]  /dev/loop2(0)                                /dev/loop2:0-0

上記の様に、/dev/loop0/dev/loop2 が束ねられて、/dev/loop3/dev/loop4PFree が減って新たに割り当てられたことがわかります。また、 -r オプションを付けることで自動でファイルシステム(XFS)の拡張も行われます。

同期の進捗率確認

# lvs -a -o name,sync_percent
  LV            Cpy%Sync
  r5            100.00
  [r5_rimage_0]
  [r5_rimage_1]
  [r5_rimage_2]
  [r5_rmeta_0]
  [r5_rmeta_1]
  [r5_rmeta_2]

Cpy%Sync 項目が進捗率になります。

その他

物理ボリュームに障害が発生した後の復旧方法はLVM - Gentoo Wikiを参照。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8