Misc/LVMの使い方

2017-06-14 (水) 06:49:17 (104d)

セットアップ

wget ftp://ftp.sistina.com/pub/LVM/1.0/lvm_1.0.8.tar.gz
cd LVM/1.0.8
./configure
make
sudo make install
vgscan
//ディスクごとに必要
//8eでフォーマット
fdisk /dev/hde
pvcreate /dev/hde1

//ディスクグループに追加
vgcreate jp_vg /dev/hde1
//容量を確認
vgdisplay

順番が違うかも

//パーティションを作成
lvcreate -l ??? jp_vg

mkfs.ext3 /dev/hde1

起動時に必要なコマンドがあるので起動スクリプトを作成

vgchange -a y jp_vg

起動用スクリプト作成(/etc/init.d/lvm)

#!/bin/bash

RETVAL=0

start()
{
    /sbin/vgchange -a y jp_vg
    /bin/mount /dev/jp_vg/lvol1 /mnt1
}

stop()

{
    /bin/umount /mnt1
    /sbin/vgchange -a n jp_vg
}

case "$1" in
start)
    start
;;
stop)
    stop
;;
restart)
    stop
    start
;;
*)
    echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
    RETVAL=1
esac

exit $RETVAL
ln -s ../init.d/lvm S99lvm

Tips

LVMディスクの移動

マシン No 1 で、

vgchange -a n vg01
vgexport vg01

マシン No 2 で、

vgimport vg01 /dev/sda1 /dev/sdb1
vgchange -a y vg01

ディスクの増加

# fdisk /dev/hde

8eでフォーマット

# pvcreate /dev/hde1
-ff

オプションが必要なときもあり

# vgchange -a y storage_vg
# vgextend storage_vg /dev/hde1
# umount /dev/storage_vg/lvol1  // umountしてなければいらない?

そうでもない

# lvextend -l+size /dev/storage_vg/...

Vineのlvextendはバグ持ちで駄目なのでどこからか修正ソースを持ってきてrpm再インストール
具体的には下記の話

http://search.luky.org/vine-users.7/msg07261.html

# e2fsadm -l+624 /dev/storage_vg/lvol1

Fedora Core 6 では最後

# resize2fs /dev/storage_vg/lvol1

もしくはオンラインなら

# ext2online /dev/storage_vg/lvol1

となる

ディスク間データ移動

pvmoveの前はその上のvgとかを全部アンマウントしておくこと。pv吹っ飛ぶ可能性あり。

umount /dev/.../vg
vgchange -a n vg
pvmove /dev/hde1 /dev/hdi1
pvmove /dev/hde1

で hde1のPVを他に追い出す

失敗したときには(戻せているかどうかは未確認)

pvmove中に ここ のような状態になって失敗した場合。

device-mapper: create ioctl failed: Peripherique ou ressource occupe
  Loading aya-kvms table
device-mapper: reload ioctl failed: Argument invalide
  Checking progress every 10 seconds
WARNING: dev_open(/dev/sdd1) called while suspended
WARNING: dev_open(/dev/sda2) called while suspended
WARNING: dev_open(/dev/hdb3) called while suspended
WARNING: dev_open(/dev/sdd1) called while suspended
WARNING: dev_open(/dev/sda2) called while suspended
WARNING: dev_open(/dev/hdb3) called while suspended
WARNING: dev_open(/dev/sdd1) called while suspended
WARNING: dev_open(/dev/sda2) called while suspended
WARNING: dev_open(/dev/hdb3) called while suspended
/dev/sdd1: Moved: 100,0%
  Found volume group "aya"
  Found volume group "aya"
  Found volume group "aya"
  Found volume group "aya"
  Suspending aya-pvmove0 (253:6) with device flush
  Found volume group "aya"
  Creating aya-pvmove0
device-mapper: create ioctl failed: Peripherique ou ressource occupe
Unable to reactivate logical volume "pvmove0" 

この場合メタデータの更新だけ行われてしまったと思われるのでメタデータを戻せば復活できる(はず、というかそうでないと自分のストレージもダメージ受けてるorz)

/etc/lvm/backup or /etc/lvm/archive に設定ファイル(storage_vg)が残っているか確認して残っていれば可能性あり。

pvmoveの場合、メタデータの segmentxx って処の stripes って処が書き換えられてかつ中身も移動するという作りだと思う。なので今回の失敗のようにメタデータだけ書き換えられた場合はその部分を修復してみる。

segment11 {
        start_extent = 47095
        extent_count = 3726     # 232.875 Gigabytes

        type = "striped"
        stripe_count = 1        # linear

        stripes = [
                "pv7", 0  <- ここを修正 "pv指定", 開始extent みたいなもんだと思う
        ]
}

pvmoveなので start_extent, extent_count 等は修正されないはずなのでほっておく(同じ数のextentを消費するはずだから)。archiveに過去のものが入っていればその設定ファイルをそのまま利用した方が無難だしよいと思います(自分はそのあとにLVM操作してたので無理でしたがorz)。

修正が終わったらその設定ファイルでメタデータを書き換える。

vgcfgrestore storage_vg -f storage_vg_rec
  storage_vg_rec は修正した設定ファイル

あとはpvmoveをやり直す。

ちなみにこれはURL先の記述を見る限りバグらしい。

pvの削除

vgreduce vg_name /dev/hdp1
pvremove /dev/hdp1

間違って消してしまったら

vgreduce --removemissing VG_XenStorage-xxxx

LVMディスクのPC間移動

同バージョンのLVMを導入さえすればすべてのHDDをもってきて vgscan をすれば使えるみたいである

# /sbin/vgscan

環境

  • Vine 2.6CR

参考

この参考ページの方が役に立つような気がする(ぉ

LVM

注意)このバージョンのsafariではjavascriptがうまく動作しないので、recaptchaはページ切り替え版を利用しています。
リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS