LVMのトラブルShooting☆Star(チガウ その2 [Linux(LVM/RAID/Storage)]
●mixiからの転記(&編集&追記)
LVMを構成しているディスクのうちの1本が壊れそうだ!という場合の対応方法について基本的なところを記載しておきます。
LVMを構成して運用しているディスクには、何らかのデータが書き込まれているはずですが、これをそのまま引っこ抜いてしまうと、データを失ってしまいますので…
① 引っこ抜きたいディスク上のデータを他のディスク(同じボリュームグループ内の他のディスク)にデータを移動する
↓
② ディスクを引っこ抜く(交換する)
という手順が必要です。
「同じボリュームグループ内の他のディスク」と記述してはいますが、例えばRAIDのように同じ容量のディスクをもう一つ用意しなければならないという訳ではありません。LVMの場合は抜き取りたいディスクが持っている物理エクステントと同じだけの空き物理エクステント(Free PE)があればよいのです。
その辺の確認方法を以下に示します。
例えば、ここでは例として「/dev/sdn1」のディスクを交換(抜き取り)したいと想定します。vgdisplayコマンドに「-v」オプションを付けて実行しますと…
このLVMの場合、ボリュームグループ全体で1193228個のPEを保有し、全部使っています。一方で交換対象としたいディスクは59841個のPEがあります。
というわけで、このディスクを交換するためには少なくとも59841個の空きPEを捻出しなければならないということが判ります。
で、ここがLVMの良いところなんですが、普通、ディスク交換というと壊れたディスクを抜く→新しいディスクを差し込む→リビルドなり設定なりという手順を踏む訳ですが、LVMだったら、新しいディスクを差し込む→設定変更・データ移動→壊れたディスクを抜く という手順で実施することができます。これでほぼオンラインで交換作業ができちゃったりする訳ですよ奥さん。
また、交換作業中の一時的な対応と割り切るなら、容量(物理エクステントの個数)のつじつまさえあればディスクの種類やら接続方法やらを全く問いません。
では、ディスクを交換する操作を追ってみましょう。
ステップ1:新しいディスクを接続する。
ここでは約320GBのUSB接続なディスクを用意してUSBのポートにざくっと接続してみました。
dmesgで接続されたことが確認できます。
sdpってw
で、これをLVMの構築時と同様に物理ボリュームを作成し、ボリュームグループに追加する手順を踏みます。
これで交換準備は整いました。vgdisplayコマンドでボリュームグループの状態を見てみると…
と、ボリュームグループ内に76310個の空き物理エクステントが追加されました。
ステップ2:交換対象となるディスク上のデータを移動する
これから引っこ抜きたいディスクの上のデータを、ボリュームグループ内に確保された空き物理エクステントにコピーする処理を行います。使用するコマンドは pvmove です。引数として「引っこ抜きたいディスクのデバイス名」(ここでは/dev/sdn1)を指定します。
なお、ここで「 mirror: Required device-mapper target(s) not detected in your kernel」とかエラーが出たら、dm-mirrorドライバを組み込んでやる必要があります。
こんな感じ。
コピーしたいデータの量によってはコピーに時間がかかりますので気長に待ちましょう。
ステップ3:交換対象となるディスクをボリュームグループから除外する
ここまでの操作で、ボリュームグループ内に登録されている物理ボリュームは、こんな状態になっています。sdn1が、今回交換対象としたディスク。参考までに、sdm1も表示していますが、これはsdn1と全く同じディスクで交換はしないディスクです。また、sdp1はsdn1の代わりに今回追加したディスクです。
sdn1のFree PEがTotal PEと同じ数値になっていることから、すでにこのディスクは使われていない(ボリュームグループに所属しているだけの)状態になっていることが確認できます。
このような状態になったディスクをボリュームグループから除外するには、 vgreduce コマンドを使用します。
ちゃんと除外されたかどうか、確認してみましょう。
sdn1がいなくなっていることが判ります。
これで、sdn1をいつでも引っこ抜ける状態になりました。
ちなみに、今回追加したsdp1が「一時しのぎ用」みたいなケースで、本番運用のためには別のディスクを戻して使いたいという場合は、交換した新しいディスクに、物理ボリュームを作成→ボリュームグループに追加→「一時しのぎ用ディスク」のデータを空き物理エクステントに移動→「一時しのぎ用ディスク」をボリュームグループから除外→「一時しのぎ用ディスク」を引っこ抜く…というような、今回と同じような操作をもう一度やればOKです。
なお、この辺の一連の作業はオンライン状態のまま実施できます。
LVMを構成しているディスクのうちの1本が壊れそうだ!という場合の対応方法について基本的なところを記載しておきます。
LVMを構成して運用しているディスクには、何らかのデータが書き込まれているはずですが、これをそのまま引っこ抜いてしまうと、データを失ってしまいますので…
① 引っこ抜きたいディスク上のデータを他のディスク(同じボリュームグループ内の他のディスク)にデータを移動する
↓
② ディスクを引っこ抜く(交換する)
という手順が必要です。
「同じボリュームグループ内の他のディスク」と記述してはいますが、例えばRAIDのように同じ容量のディスクをもう一つ用意しなければならないという訳ではありません。LVMの場合は抜き取りたいディスクが持っている物理エクステントと同じだけの空き物理エクステント(Free PE)があればよいのです。
その辺の確認方法を以下に示します。
例えば、ここでは例として「/dev/sdn1」のディスクを交換(抜き取り)したいと想定します。vgdisplayコマンドに「-v」オプションを付けて実行しますと…
# vgdisplay -v Finding all volume groups Finding volume group "vgtera" --- Volume group --- VG Name vgtera System ID Format lvm2 Metadata Areas 8 (途中省略) VG Size 4.55 TB PE Size 4.00 MB Total PE 1193228 Alloc PE / Size 1193228 / 4.55 TB Free PE / Size 0 / 0 VG UUID RBEJZT-k2Vo-AKtl-OIYq-imHx-gnca-RDbvUU --- Logical volume --- LV Name /dev/vgtera/lva VG Name vgtera (途中省略) --- Physical volumes --- (途中省略) PV Name /dev/sdn1 PV UUID Pp0EZz-2dNy-y5G3-Y92a-UZ7H-5pMA-RyM9rA PV Status allocatable Total PE / Free PE 59841 / 0 (以下略)
このLVMの場合、ボリュームグループ全体で1193228個のPEを保有し、全部使っています。一方で交換対象としたいディスクは59841個のPEがあります。
というわけで、このディスクを交換するためには少なくとも59841個の空きPEを捻出しなければならないということが判ります。
で、ここがLVMの良いところなんですが、普通、ディスク交換というと壊れたディスクを抜く→新しいディスクを差し込む→リビルドなり設定なりという手順を踏む訳ですが、LVMだったら、新しいディスクを差し込む→設定変更・データ移動→壊れたディスクを抜く という手順で実施することができます。これでほぼオンラインで交換作業ができちゃったりする訳ですよ奥さん。
また、交換作業中の一時的な対応と割り切るなら、容量(物理エクステントの個数)のつじつまさえあればディスクの種類やら接続方法やらを全く問いません。
では、ディスクを交換する操作を追ってみましょう。
ステップ1:新しいディスクを接続する。
ここでは約320GBのUSB接続なディスクを用意してUSBのポートにざくっと接続してみました。
dmesgで接続されたことが確認できます。
usb 3-1: new high speed USB device using ehci_hcd and address 3 usb 3-1: configuration #1 chosen from 1 choice scsi7 : SCSI emulation for USB Mass Storage devices usb-storage: device found at 3 usb-storage: waiting for device to settle before scanning Vendor: I-O DATA Model: HDC-U Rev: 1.09 Type: Direct-Access ANSI SCSI revision: 02 SCSI device sdp: 625142448 512-byte hdwr sectors (320073 MB) (以下略)
sdpってw
で、これをLVMの構築時と同様に物理ボリュームを作成し、ボリュームグループに追加する手順を踏みます。
# fdisk /dev/sdp # pvcreate /dev/sdp1 Physical volume "/dev/sdp1" successfully created # vgextend vgtera /dev/sdp1 Volume group "vgtera" successfully extended
これで交換準備は整いました。vgdisplayコマンドでボリュームグループの状態を見てみると…
# vgdisplay -v (ばっさり省略) VG Size 4.84 TB PE Size 4.00 MB Total PE 1269538 Alloc PE / Size 1193228 / 4.55 TB Free PE / Size 76310 / 298.09 GB VG UUID RBEJZT-k2Vo-AKtl-OIYq-imHx-gnca-RDbvUU (ばっさり省略) PV Name /dev/sdn1 PV UUID Pp0EZz-2dNy-y5G3-Y92a-UZ7H-5pMA-RyM9rA PV Status allocatable Total PE / Free PE 59841 / 0 PV Name /dev/sdp1 PV UUID Q002wj-0dsD-rf42-Q0gF-xXRg-iTK8-6yeW6Z PV Status allocatable Total PE / Free PE 76310 / 76310
と、ボリュームグループ内に76310個の空き物理エクステントが追加されました。
ステップ2:交換対象となるディスク上のデータを移動する
これから引っこ抜きたいディスクの上のデータを、ボリュームグループ内に確保された空き物理エクステントにコピーする処理を行います。使用するコマンドは pvmove です。引数として「引っこ抜きたいディスクのデバイス名」(ここでは/dev/sdn1)を指定します。
# pvmove /dev/sdn1
なお、ここで「 mirror: Required device-mapper target(s) not detected in your kernel」とかエラーが出たら、dm-mirrorドライバを組み込んでやる必要があります。
# modprobe dm-mirror # pvmove /dev/sdn1 /dev/sdn1: Moved: 0.1% /dev/sdn1: Moved: 0.2% /dev/sdn1: Moved: 0.4% /dev/sdn1: Moved: 0.5% /dev/sdn1: Moved: 0.6%
こんな感じ。
コピーしたいデータの量によってはコピーに時間がかかりますので気長に待ちましょう。
ステップ3:交換対象となるディスクをボリュームグループから除外する
ここまでの操作で、ボリュームグループ内に登録されている物理ボリュームは、こんな状態になっています。sdn1が、今回交換対象としたディスク。参考までに、sdm1も表示していますが、これはsdn1と全く同じディスクで交換はしないディスクです。また、sdp1はsdn1の代わりに今回追加したディスクです。
--- Physical volume --- PV Name /dev/sdm1 VG Name vgtera PV Size 233.76 GB / not usable 2.90 MB Allocatable yes (but full) PE Size (KByte) 4096 Total PE 59841 Free PE 0 Allocated PE 59841 PV UUID UjFfgA-XQgx-6xvl-PJ1m-aalI-HkIo-pv2kBB --- Physical volume --- PV Name /dev/sdn1 VG Name vgtera PV Size 233.76 GB / not usable 2.90 MB Allocatable yes PE Size (KByte) 4096 Total PE 59841 Free PE 59841 Allocated PE 0 PV UUID Pp0EZz-2dNy-y5G3-Y92a-UZ7H-5pMA-RyM9rA --- Physical volume --- PV Name /dev/sdp1 VG Name vgtera PV Size 298.09 GB / not usable 2.81 MB Allocatable yes PE Size (KByte) 4096 Total PE 76310 Free PE 16469 Allocated PE 59841 PV UUID Q002wj-0dsD-rf42-Q0gF-xXRg-iTK8-6yeW6Z
sdn1のFree PEがTotal PEと同じ数値になっていることから、すでにこのディスクは使われていない(ボリュームグループに所属しているだけの)状態になっていることが確認できます。
このような状態になったディスクをボリュームグループから除外するには、 vgreduce コマンドを使用します。
# vgreduce vgtera /dev/sdn1 Removed "/dev/sdn1" from volume group "vgtera"
ちゃんと除外されたかどうか、確認してみましょう。
# vgdisplay -v Finding all volume groups Finding volume group "vgtera" --- Volume group --- VG Name vgtera (途中省略) VG Size 4.61 TB PE Size 4.00 MB Total PE 1209697 Alloc PE / Size 1193228 / 4.55 TB Free PE / Size 16469 / 64.33 GB (途中省略) PV Name /dev/sdm1 PV UUID UjFfgA-XQgx-6xvl-PJ1m-aalI-HkIo-pv2kBB PV Status allocatable Total PE / Free PE 59841 / 0 PV Name /dev/sdp1 PV UUID Q002wj-0dsD-rf42-Q0gF-xXRg-iTK8-6yeW6Z PV Status allocatable Total PE / Free PE 76310 / 16469
sdn1がいなくなっていることが判ります。
これで、sdn1をいつでも引っこ抜ける状態になりました。
ちなみに、今回追加したsdp1が「一時しのぎ用」みたいなケースで、本番運用のためには別のディスクを戻して使いたいという場合は、交換した新しいディスクに、物理ボリュームを作成→ボリュームグループに追加→「一時しのぎ用ディスク」のデータを空き物理エクステントに移動→「一時しのぎ用ディスク」をボリュームグループから除外→「一時しのぎ用ディスク」を引っこ抜く…というような、今回と同じような操作をもう一度やればOKです。
なお、この辺の一連の作業はオンライン状態のまま実施できます。
コメント 0