Gentoo Linuxな生活​/システム管理関連

LVMとは? anchor.png

ここを参照。

Logical Volume Managerのことです。これを行うと何が良いかというと、例えば皆さんもPCを長く使っているとこんなことがあるかと思います。

  • 古い中途半端な容量のHDがあったとします。どうにも使い回しが効かないから捨ててしまおうか、とか。でもLVMを使用すると、こういったHDをまとめてしまって、仮想的に1つのHDとして使用することができます。つまり/dev/hdb1 40Gと/dev/hdc1 40Gを合わせて/dev/lvm/dataとして75Gくらいの1ボリュームとして使用する、とか。
  • 100GbyteのHDを買ってきて、50、50で分けて使っていたら、かたっぽのパーティションが一杯になった。もう一方はまだ余ってるのに…かたっぽのパーティションを大きくできたらなー、とHDからデータを吸い出して、フォーマットして、また入れなおす、とか。これがLVMだとデータを削除しないで動的に増減できたりします。
  • HDを使ってたら、HDの寿命がきた。交換しないといけないけど、データの退避がでかいデータ領域だと超大変。というときも、2つや3つのHDを1グループで使用していた場合は、データ構造を変えることなく、交換したいHD以外のHDに退避して、ディスクの交換作業ができたりする。

(」゜ロ゜)」(」゜ロ゜)」(」゜ロ゜)」オオオオオッッッ、これは便利!但し一つ問題が。HDに直接アクセスするのではなく、LVMというソフトウェアのオブラートを物理HDにかまし、上位アプリケーションはこいつにアクセスします。HDへの書き込みは、LVMが勝手にグループに属しているHDに分散書き込みします。なので、ディスクアクセス時のCPUオーバーヘッドが増えます。ですが/var、/home、データ置き場等、これだけあれば十分、という容量がはっきり分からないパーティションをきる場合は非常に有利といえますね。

Page Top

では導入手順 anchor.png

おいちゃんところでは、LVMを最初は使用しない状態でスタートしましたので、LVM化する場合は、結局LVMを使わない場合と同じ事をする羽目になります。ですがこれは最初だけ。以下の方針を立てました。

基本方針
現在120G、140Gの2つの領域がある。これをLVMで統合して250Gbyte相当のHDを作る
  1. まずは120Gに入っているソフトデータ等を玄箱に退避
  2. 120GのHDをLVM化して、/var(20G)、/share(95G)に分ける
  3. 140Gの領域にある/var、/share、の内容をLVMの/var、/shareに移動して、実運用システムにマウント。しばらく様子を見る
  4. データ整合性などに問題なしとなったら、140GをLVM化し、グループ統合する
  5. /shareにこの140Gを追加して、200G程度のデータ領域を作る
  6. 玄箱に退避したデータを/shareに戻す

多分これで大丈夫、なはず。ここで領域を若干残してあるのは、snapshotバックアップ領域を作っておくため。snapshotとは、データの書き換えとかが行われている運用中のディスクドライブのある瞬間の状態を保存する機能です。例えばバックアップ中にアプリによる書き換えが発生した場合、バックアップ開始時にバックアップされたデータが、バックアップ終了間際に書き換えられて、不整合が発生したりする可能性があります。本来は一旦アプリサービスを停止して書き換えを抑止した状態でバックアップを撮るのがいいのですが、サーバが停止するためそれもいや。そこでサービスを運用していながらディスクのsnapshotが取れる機能が生きてくるわけですね♪しかもこのsnapshot用に撮っておく領域は、実領域の1/10以下でいいときてるのでとても柔軟性があります。

と、言うわけで、基本的なLVMの使い方をやってみましょう。

Page Top

カーネルをLVM対応にする anchor.png

カーネルのコンパイルオプションを確認してください。おいちゃんの所は2.6.ですので一般的にLVM2と言われる形式に合わせます。

Device Drivers  --->
 Multi-device support (RAID and LVM)  --->
  [*] Multiple devices driver support (RAID and LVM)
  < >   RAID support
  <M>   Device mapper support

このDevice Mapper supportをON、もしくはモジュール化してやります。

Page Top

LVM2パッケージ導入 anchor.png

# emerge lvm2

終ったら

# echo 'devices { filter=["r/cdrom/"] }' >/etc/lvm/lvm.conf

CD-ROMドライブをLVMの検索対象からはずすってことね。起動時にLVM化されたドライブを検索するの。CD-ROMとかは絶対ありえないからはずしておくと良い。

# vgscan
 Reading all physical volumes.  This may take a while...
 No volume groups found
# vgchange -a y
Page Top

パーティションタイプの変更 anchor.png

まずはLVMにしたいディスクのパーティションタイプをfdiskで変更します

#fdisk /dev/hdb

このディスクのシリンダ数は 15017 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
  (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/hdb: 123.5 GB, 123522416640 bytes
255 heads, 63 sectors/track, 15017 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hdb1               1       15017   120624021   83  Linux

Idが83ですよね。SystemがLinuxです。このhdb1を変更します。

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e

コマンド (m でヘルプ): p

Disk /dev/hdb: 123.5 GB, 123522416640 bytes
255 heads, 63 sectors/track, 15017 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hdb1               1       15017   120624021   8e  Linux LVM

分かりますか?SystemがLinux LVMに変更されましたよね。

Page Top

物理HDをLVMに加える anchor.png

pvcreateコマンドを使用して、物理HDをLVMのphysical volumeに加えます。

# pvcreate /dev/hdb1
 No physical volume label read from /dev/hdb1
 Physical volume "/dev/hdb1" successfully created
Page Top

ボリュームグループを作成する anchor.png

普通のHDで言うところのHD1ドライブに相当するボリュームグループってのを作ります。

# vgcreate -s 32M lvm /dev/hdb1
 Volume group "lvm" successfully created

ここでは、lvmというボリュームグループに先ほど作った/dev/hdb1を加えています。-s 32Mってのは何かというと、PhysicalExtentという、普通のHDで言うところのクラスタみたいなものを32Mbyteにする、という指定です。省略すると4Mbyteが指定されます。ディスク容量の増減が4Mbyte単位で行われるということ。但し、これが曲者。4Mbyteの場合だと、この64000倍である256Gbyteのボリュームグループまでしか作れません。なので32Mbyteに拡張してるのですね。すると、32×64000=2Tbyteまでのボリュームグループが作れるというわけ。但し増減は32Mbyte単位です。

Page Top

ロジカルボリュームを作る anchor.png

ロジカルボリュームとは、普通のHDで言うところのパーティションを切る作業です。

# lvcreate -L20G  -nvar lvm
# lvcreate -L95G  -nshare  lvm

これで先ほどのvar(20G)とshare(95G)ができたわけですね。あとは、/dev/lvm/var,/dev/lvm/shareで普通のディスクと同様にアクセスできます。
/dev/ボリュームグループ/ロジカルボリューム
がデバイス名ですね。

Page Top

フォーマットしてやる。 anchor.png

あとは普通のディスクと同様に、初期化してやります。おいちゃんはReiserFS好きなので

# mkreiserfs /dev/lvm/var

とかやってフォーマットしてやります。ext2でもext3でもXFSでも好きにして。 これをfstabに書いてやったり、mountで指定したりするわけです。

Page Top

ディスクの追加 anchor.png

さて、どーするかというと以下の手順。安全のため、一応/dev/lvm/shareのマウントははずしておいたほうが良いとは思います。 ここでは、/dev/hda7を新たに追加するとします。あらかじめパーティションタイプをfdiskで8eに変更しといてやって

# pvcreate /dev/hda7
# vgextend lvm /dev/hda7
# lvextend -L+120G /dev/lvm/share
# resize_reiserfs -s +120G /dev/lvm/share

順を追って説明すると/dev/hda7の物理ボリュームを作成。/dev/hda7を追加してボリュームグループlvmを拡張。ロジカルボリューム/dev/lvm/shareを120G拡張。最後にreiserfsのファイルサイズを拡張して、作業終了でっす。再度マウントしたら、データが消去されずにディスク領域が広がってるのが分かるはず。これはすごいっしょ??

Page Top

ディスクの交換 anchor.png

しばらく使用していたら、ディスクから異音が…そろそろ寿命かしら。ど、どうしよう~~~。てなときに、LVMの場合データを生かしたまま移動する手段があるんですよ。やってみましょう。

さて、このとき増設ディスクを/dev/sdc、故障間近のディスクを/dev/hddとしますね。 このとき注意するのは、交換するディスクのデータを移動するために、最低限同じ容量のディスクが必要ってことね。この時、ボリュームグループlvmのパーティションは、マウント解除しておくのをおすすめします。

Page Top

ディスクをまず増設してみる anchor.png

バラして、ディスクをのっけてみましょうね。

Page Top

増設したディスクを使用できるようにする。 anchor.png

  • fdiskでパーティション切る
  • パーティションタイプを8eに
  • fdiskプロンプトのwコマンドでパーティション情報を書き込む
  • qで終了
Page Top

増設したディスクをpvcreateして、vgextendする anchor.png

増設したディスクを、1ボリュームのパーティション切ったとして、話を進めましょう

# pvcreate /dev/sdc1
# vgextend lvm /dev/sdc1

これで、容量はそのままで、ボリュームグループlvmが使用されていないFree PEが増えた状態になります。

Page Top

/dev/hddの内容を移動 anchor.png

pvmoveコマンドを使用します。/dev/hddは、同じく1ボリュームのパーティションだとします。

# pvmove /dev/hdd1

これで、せこせことhdd1にあるPEが、sdc1に移動し始めます…移動が100%になったところで、pvdisplayコマンド打ってみてください。hdd1の Allocated PEが0になって、 Free PEが増えているはず。
かわりに、/dev/sdc1に、hdd1分のAllocated PEが増えているはずです。

Page Top

/dev/hddをボリュームグループから削除する anchor.png

# vgreduce lvm /dev/hdd1

最後に

# pvremove /dev/hdd1

これで、/dev/hddを引っこ抜いてもOKな状態になりました。電源落として、HDDを引っこ抜きましょう。ね、簡単でしょ…

Page Top

Snapshotを利用したバックアップ anchor.png

Snapshotとは、さっきも書いた、ロジカルボリュームの一瞬を切り取ったバックアップです。仕組みでいうと、変更が無いファイルは、元領域のデータを用いる。その代わりsnapshot領域に、変更されたファイルだけを書き込んでいくのです。ですので、ず~っとsnapshotをとった瞬間が保存されていくという寸法。 ですので、Snapshot用に取っておく領域は、変更差分が書き込まれる程度の大きさでよいわけです。目安でいうと元領域の10%程度だといわれています。1Gだったら100Mぐらい。でも、サービスが暇な夜間にSnapをとって、バックアップ領域に退避して、すぐに消してしまうのであれば、書き換えが多くは発生しないのでもっと少なくても良いわけです。これは効率的ですね♪

Page Top

ではSnapshotの作り方 anchor.png

SnapshotはSnapshot用の論理ボリュームを作成してやります。基本はlvmのlvcreateと一緒。

# lvcreate --size 1G --snapshot --name snap /dev/lvm/example

上の例だと、/dev/lvm/snapという名前の、/dev/lvm/exampleのスナップショットを作成するということ。実際に動きをみてみると、/dev/lvm/exampleが10Gの領域で/exportにマウントして運用中として、上記コマンドでSnapshotを作ります。で、/dev/lvm/snapを適当な場所(仮に/mnt/snap)にマウントしてやります。/exportも/mnt/snapも同じイメージが見えていますね?/exportに何かファイルを追加したり、削除したりしてやりましょう。当然/exportの内容は変わっていますよね。/mnt/snapを見てみるとどうですか?変わりない/exportが見えていませんか?

Page Top

注意 anchor.png

先ほど変更差分を記録していく、と言いました。この例では1Gの領域を取っています。当然変更差分が1Gを超えると記録し切れません。また、リブートが発生するとSnapshotは消えてしまいます。なので一時的なものだということを意識しましょう。別の領域にフルバックアップを必ずとりましょうね。

Page Top

というわけで anchor.png

# lvcreate --size 1G --snapshot --name snap /dev/lvm/example
# mount /dev/lvm/snap /mnt/snap
# rsync -auv --delete /mnt/snap/ /backup/
# umount /mnt/snap
# lvremove /dev/lvm/snap

とやってやれば、Snapshotとrsyncを使用した安全バックアップが取れるというわけですね。cronなんかにshellを書いて登録してやれば自動バックアップが取れるという寸法。これで安全♪


Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 14778, today: 1, yesterday: 1
Princeps date: 2009-08-19 (Wed) 00:33:50
Last-modified: 2010-06-23 (Wed) 02:49:55 (JST) (3779d) by maruo
ページ内検索

ログイン

ユーザー名:


パスワード:





パスワード紛失

メインメニュー

サブメニュー
自宅鯖計画

Gentoo Linuxな生活

玄箱HGにGentoo格闘記

航空ショーへ行こう

モータースポーツな世界

奥深き写真の世界への誘い

我思う ゆえに我あり



携帯用QRコード