ラベル LVM の投稿を表示しています。 すべての投稿を表示
ラベル LVM の投稿を表示しています。 すべての投稿を表示

2011/01/18

CentOS5.X 設定 No.17 LVM No.02

「CentOS5.X 設定 No.13 LVM No.01」では、LVMの基礎と失敗について書きました。
今回はLVMのVolume Group(VG)にあるHDDの外し方を書きたいと思います。
まず最初に用語の復習を。
LVM: 正式名称は「Logical Volume Manager」, 日本語としては「論理ボリュームマネージャ」
PE: 正式名称は「Physical Extents」, 日本語としては「物理エクステント」, 最小単位
PV: 正式名称は「Physical Volume」, 日本語としては「物理ボリューム」, 追加されたHDD, PE単位に分割されVGとなる
VG: 正式名称は「Volume Group」, 日本語としては「ボリュームグループ」, パーティションに分割する前の総容量
LV: 正式名称は「Logical Volume」, 日本語としては「論理ボリューム」, VGをパーティションに分けた物

[root@CentOS ~]# pvscan #PVの各使用量
PV /dev/sdb1 VG VolumeX lvm2 [1.82 TB / 0 free]
PV /dev/sdc1 VG VolumeX lvm2 [1.82 TB / 0 free]
PV /dev/sdd1 VG VolumeX lvm2 [1.82 TB / 0 free]
PV /dev/sde1 VG VolumeX lvm2 [1.82 TB / 79.25 GB free]
PV /dev/sdf1 VG VolumeX lvm2 [1.36 TB / 1.36 TB free]
Total: 5 [8.64 TB] / in use: 5 [8.64 TB] / in no VG: 0 [0 ]
[root@CentOS ~]# pvdisplay #PVの詳細
--- Physical volume ---
PV Name /dev/sdX #HDD
VG Name VolumeX #使用されているVG
PV Size X.XXTB / not usable XXX.XX KB #PVとして使用されている容量 / PVとして使用されていない容量
Allocatable yes
PE Size (KByte) 4096 #1PEあたりの容量
Total PE XXXXXX #PEの総数, PV Size = PE Size * Total PE
Free PE XXXXXX #総PE中未使用PE数
Allocated PE 0
PV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
[root@CentOS ~]# vgdisplay #VGの詳細
--- Volume group ---
VG Name VolumeX #VGの名前
System ID
Format lvm2 #ファイルシステム
Metadata Areas 4 #アクティブなPV(HDD)数?
Metadata Sequence No 5 #VGに使用されているPV(HDD)数?
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 5 #VGに使用されているPV(HDD)数?
Act PV 5
VG Size X.XX TB #VGの総容量
PE Size 4.00 MB #1PEサイズ
Total PE XXXXXXX #総PEサイズ
Alloc PE / Size XXXXXXX / X.XX TB #LVとして使用されているPE数 / LVの総容量
Free PE / Size XXXXXX / X.XX TB #未使用PE数 / 空き容量
VG UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
[root@CentOS ~]# lvdisplay #LVの詳細
--- Logical volume ---
LV Name /dev/VolumeX/LogVolX #LVの名前
VG Name VolumeX #使用しているVGの名前
LV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
LV Write Access read/write
LV Status available
# open 1
LV Size X.XX TB #LVの総容量
Current LE XXXXXXX #総PE数?
Segments 4 #使用されているPV(HDD)数?
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

現状4発のHDD(sd[abcd])で構成してあるLVMのHDDを交換(sd[abce])してみたいと思います。
順序としては HDD追加 → データの移動 → HDD外す となると思います。
[root@CentOS ~]# pvcreate /dev/sde #新しいHDD(sde)をPVに追加
[root@CentOS ~]# vgextend VolumeX /dev/sde #新しいHDD(sde)をVGに追加
[root@CentOS ~]# pvdisplay #「交換する予定のHDDのAllocated PE」 < 追加したHDDのFree FE」となっている必要がある, (追加したHDDの容量が小さい場合は以下のlvreduceを行う)
[root@CentOS ~]# lvreduce -L X.XXTB /dev/VolumeX/LogVolX #必要であればLVの容量を減らしておく。(追加したHDDの容量が小さい場合)
[root@CentOS ~]# pvmove /dev/sdf1 /devsde1
WARNING: dev_open(/dev/sdf1) called while suspended
Volume group VolumeX metadata is inconsistent
WARNING: dev_open(/dev/sdf1) called while suspended
Volume group VolumeX metadata is inconsistent
ここでエラーが発生した為、以下の方法を試した。
[root@CentOS ~]# vgcfgrestore VolumeX -f /etc/lvm/archive/VolumeX_XXXXX.vg #現在の構成の1つ前くらいを指定
しかしデータが復旧出来ず、500GB程のデータが失われた。
[root@CentOS ~]# vgreduce VolumeX /dev/sdf1 #VolumeXからsdf1を外す
[root@CentOS ~]# pvscan #VGから外れているかどうかを確認
[root@CentOS ~]# pvremove /dev/sdf1 #PVからsdf1を外す
[root@CentOS ~]# pvscan #PVから外れているかどうかを確認
LVMって怖いわ。
やっぱり自分は使うのやめておこう。
頻繁にパーティションを変更することもないし。
容量増加はRAIDでHDD交換で対応します。

2010/12/15

CentOS5.X 設定 No.13 LVM No.01

今回はLVMでmissった事を書きます。

その前にLVMとはなんなのでしょうか?
普通ファイルを書き込める領域というのは1つのHDD(パーティション)の容量を超える事はありません。
容量が足りなくなった場合は、HDDを交換するか、増設してシンボリックリンクを貼る必要があります。
これではシステムの入れ替え等の際、大変苦労する事になります。
(自分は入れ替えの際もそうですが、Macからsanbaでアクセスするとシンボリックリンクが辿れず苦労しました。)
そこで、LVMの登場です。
LVMを例えるなら、HDDのプールですかね。
1つあたりのHDDの容量は関係なく、すべてを結合して1つの大きなHDDを見なす訳です。
そこから必要な容量だけ切り分けてパーティションとするといった感じでしょうか。
Windowsで言うならスパンボリュームですね。

複数のHDDを統合するならRAIDでもいいのでは?と思う方もいますが、RAIDの場合はHDDの使用する容量を揃えないければいけないという点が面倒です。
また、必要に応じてHDDの追加や削除を行うのが面倒です。
しかし、RAIDの場合特定のバージョンであれなHDDの故障に対する耐久度が上がるのは確かです。
LVMの場合は、複数のHDDにまたがってアクセスする為、1台でも故障するとアクセスできなくなり、最悪データが失われます。
なので、RAIDを構築し、そのアレイを使用してLVMを使用するのが柔軟性&耐久性が高いシステムになると思います。
因みに、RAIDはHDDの故障に対する耐久度は上がりますが、バックアップではありません。
バックアップというのは、過去に逆昇てファイルを救出できるようにするのもで、RAIDにそのような機能はありません。
missってファイルを削除してしまえばそれでお終いです。
バックアップがあれば、バックアップから削除してしまったファイルを戻す事が出来ますね。
あくまでもHDDが壊れてもデータが失われにくいという効果しかありません。
(まぁファイルサーバで5TBを超えてくると、バックアップを取る気が失せるというか、もう一台サーバ建てないと無理。)


上図がLVMのイメージ図になります。(OpenOffice.orgのDrawで作成)
正確に書くとPVはPE(Physical Extents, 物理エクステント)に分割され、VGとして集約される訳です。
PEの大きさはデフォルトで4MBとなっています。
ファイルサーバで大きいサイズのファイルが多い場合は、PEの大きさを大きくしたほうが効率がよくなります。
参考:「LVMとは@ITPro」

さて、ここでようやく今回の失敗に入る訳ですが。
何をしたのかというと、HDDをVGに追加した後にzero書き込みでHDDのパーティションを消してしまったんですね。
LVMはHDDをUUIDで管理しているみたいで、新たにパーティションを作成して追加しようとしても認識されず。
VGから消そうと思っても「PV Name」が不明になっており、コマンドが認識されず。
今回、このHDDにデータは入っておらず、このまま使用しても問題ないのですが、
[root@CentOS ~]# vgdisplay
と行う度に、「Couldn't find device with uuid ~」と表示されるのも目障りなので。
[root@CentOS ~]# fdisk /dev/sdX
で追加したいHDDにLVMのパーティションを作成しておく。
作成したパーティションに対し
[root@CentOS ~]# pvcreate --uuid XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX /dev/sdX1
を行い、PVとして登録されているUUIDと新規パーティションを結びつける。
これで、完成です。

現在、ファイルサーバのHDDをWD20EARSに交換する作業をしている最中です。
現在はRAID5のアレイを組み合わせて運用しているのですが、容量やシンボリックリンクの関係でRAID6+LVMへの移行を思案中です。
試験運用としてML110 G6 XeonモデルにLVMを構築し、ファイルサーバのデータをバックアップ中です。
WD20EARSはAFTを使用しているので、セクタの操作が必要なのですが、思うような速度が出ず試行錯誤中です。
fdiskコマンドではパーティションが作成出来ず、partedコマンドでGPTパーティションを作成した後に、fdiskコマンド開始セクタを8の倍数にしているのですが。。。
ddコマンドで100GBも書き込まないうちに33Mbpsまで落ちるのはなんでなんでしょうか。。。
まぁ一度書きこんでしまえば、後は呼び出ししかしませんので問題は少ないような気がするのですが。