SSブログ
Linux(LVM/RAID/Storage) ブログトップ
- | 次の10件

LVMの構築方法(論理ボリュームの大きさを拡張する) [Linux(LVM/RAID/Storage)]

 すでにあるLVMの論理ボリュームの容量が不足してしまい、いよいよ増設しなければ!というケースでの操作について説明します。

 論理ボリュームを拡張しても、それはすぐにファイルシステムの容量が広がる…というものではありません。論理ボリュームの拡張のほかに、ファイルシステムの拡張という手順が必要になりますので注意が必要です。

 手順を整理すると…

 ①とにかくディスクを増設する
 ↓
 ②増設したディスクに、物理ボリュームを作成してからボリュームグループへの追加を行う
 ↓
 ③論理ボリュームの拡張を行う
 ↓
 ④ファイルシステムの拡張を行う

 という手順を踏みます。
 なお、我が家ではファイルシステムのext3を使用しているので、④の手順がちょっぴり面倒くさくてイカしてないです。


ステップ1:とにかくディスクを増設する

 省略


ステップ2:増設したディスクに、物理ボリュームを作成してからボリュームグループへの追加を行う

 今回の場合、例によって例のごとく、USBなHDDを増設したので、dmesgをみてデバイス名を確認します。

[root@chihiro ~]# dmesg
Linux version 2.6.18-92.1.13.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) #1 SMP Wed Sep 24 19:32:05 EDT 2008
Command line: ro root=LABEL=/1
  (途中省略)
usb 1-2: new high speed USB device using ehci_hcd and address 3
usb 1-2: configuration #1 chosen from 1 choice
scsi3 : 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: HDZ-UE810         Rev: 4B04
  Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sdc: 1593188352 512-byte hdwr sectors (815712 MB)
sdc: test WP failed, assume Write Enabled
sdc: assuming drive cache: write through
  (以下略)

 ということで、新しいディスクはsdcということがわかります。

 まあ、必要無いといえば必要無いけど、個人的な宗教上の理由によりfdiskでパーティションを切りまして、pvcreate、vgextendの一連の処理を行います。

[root@chihiro ~]# fdisk /dev/sdc

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

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

Disk /dev/sdc: 815.7 GB, 815712436224 bytes
255 heads, 63 sectors/track, 99171 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       99171   796591026   8e  Linux LVM

コマンド (m でヘルプ): w
領域テーブルは交換されました!
[root@chihiro ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
[root@chihiro ~]# vgextend mystorage /dev/sdc1
  Volume group "mystorage" successfully extended


 ここまででボリュームグループは大きくなりました。確認してみます。

[root@chihiro ~]# vgdisplay -v
    Finding all volume groups
    Finding volume group "mystorage"
  --- Volume group ---
  VG Name               mystorage
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.56 TB
  PE Size               32.00 MB
  Total PE              83927
  Alloc PE / Size       59617 / 1.82 TB
  Free  PE / Size       24310 / 759.69 GB
  VG UUID               Rh2eH5-oVGz-kw50-MEb7-DnPy-Kj6v-7BMelq

  --- Logical volume ---
  LV Name                /dev/mystorage/vol00
  VG Name                mystorage
  LV UUID                CzkjoT-deWp-ashv-n3t2-ESv8-5yx5-Onj1oF
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.82 TB
  Current LE             59617
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sdb1
  PV UUID               wf4W3u-M1jZ-WN06-oevF-6G3e-MFCA-PGERP8
  PV Status             allocatable
  Total PE / Free PE    59617 / 0

  PV Name               /dev/sdc1
  PV UUID               h1RkfJ-9NZX-iL65-iJA6-sBVJ-Aqv4-eMsoaP
  PV Status             allocatable
  Total PE / Free PE    24310 / 24310



ステップ3:論理ボリュームの拡張を行う

 今度は、ボリュームグループ内の空き物理エクステント(Free PE)をすでにある論理ボリュームに追加で割り当てる操作を行います。
 物理エクステントの状態といえば…

  Total PE              83927
  Alloc PE / Size       59617 / 1.82 TB
  Free  PE / Size       24310 / 759.69 GB

 現時点で59617個の物理エクステントを使っていて、あと24310個を追加できます。要するに全体としては83927個なので、これを全部すでにある論理ボリュームに割り当てたいのです。

 使用するコマンドは lvextend コマンドです。「-l」オプションに続けて物理エクステントの個数を指定しますが、2通りの記述方法が使えます。

# lvextend -l 83927 /dev/mystorage/vol00

#lvextend -l +24310 /dev/mystorage/vol00

 前者の記述方法は、「拡張後の」物理エクステントの個数を直接指定する方法。後者の記述方法は「増加させる」物理エクステント数を指定する相対的な方法です。どっちでも支障ありません。

 ちなみに私は前者の方が好みです。(笑)というわけで、前者の方法でさくっと容量拡張します。

[root@chihiro ~]# lvextend -l 83927 /dev/mystorage/vol00
  Extending logical volume vol00 to 2.56 TB
  Logical volume vol00 successfully resized

 あっという間に終了します。これで論理ボリュームとしては拡張が完了しました。確認してみましょう。

[root@chihiro ~]# vgdisplay -v
    Finding all volume groups
    Finding volume group "mystorage"
  --- Volume group ---
  VG Name               mystorage
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.56 TB
  PE Size               32.00 MB
  Total PE              83927
  Alloc PE / Size       83927 / 2.56 TB
  Free  PE / Size       0 / 0
  VG UUID               Rh2eH5-oVGz-kw50-MEb7-DnPy-Kj6v-7BMelq

  --- Logical volume ---
  LV Name                /dev/mystorage/vol00
  VG Name                mystorage
  LV UUID                CzkjoT-deWp-ashv-n3t2-ESv8-5yx5-Onj1oF
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                2.56 TB
  Current LE             83927
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sdb1
  PV UUID               wf4W3u-M1jZ-WN06-oevF-6G3e-MFCA-PGERP8
  PV Status             allocatable
  Total PE / Free PE    59617 / 0

  PV Name               /dev/sdc1
  PV UUID               h1RkfJ-9NZX-iL65-iJA6-sBVJ-Aqv4-eMsoaP
  PV Status             allocatable
  Total PE / Free PE    24310 / 0



ステップ4:ファイルシステムの拡張を行う

 論理ボリュームの拡張をしても、dfコマンドで容量を確認すると…

[root@chihiro ~]# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda3              89G  2.2G   82G   3% /
/dev/sda1             251M   22M  217M   9% /boot
tmpfs                1001M     0 1001M   0% /dev/shm
/dev/mapper/mystorage-vol00
                      1.8T  196M  1.7T   1% /mnt/mystorage

 論理ボリュームとしては2.56TBあることになっていますが、ファイルシステムとしては1.8Tほどしか無いことになっています。これでは都合が悪いので、ファイルシステムを拡張しなければなりません。

 ファイルシステムの種類によってこの操作方法は異なりますので、もしもあなたがext3以外のファイルシステムを使用している場合、この手順をそっくりそのまま実行しないでください。

 ext3のファイルシステムの拡張方法としては、 以下のような手順を踏みます。

 手順1:ファイルシステムをいったんアンマウントします
 手順2:アンマウントしたファイルシステムを fsck コマンドでチェックします
 手順3:ファイルシステムを resize2fs コマンドで拡張します
 手順4:ファイルシステムを再びマウントします

 そんな訳で、基本的にはext2/ext3ファイルシステムをオンラインのまま拡張することは残念ながらできません。(できるようにするツールはあるそうですが…)

 では、実行します。
 ファイルシステムをいったんアンマウントするところは、特に難しいことはありませんので省略。

 続いてアンマウントしたファイルシステムをfsckコマンドでチェックします。コマンドとしては、「-f」オプションを使用することになります。チェックに時間がかかるので気長に待ちましょう。

[root@chihiro ~]# fsck -f /dev/mystorage/vol00
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
LABEL=MyStorage: 14/244203520 files (7.1% non-contiguous), 7713456/488382464 blocks


 fsckが終わればいよいよファイルシステムの拡張です。
 resize2fsコマンドに、ファイルシステムのデバイス名と、拡張(変更後)のファイルシステムの容量を指定しますが、容量については指定を省略すると「最大容量」まで拡張してくれます。

[root@chihiro ~]# resize2fs /dev/mystorage/vol00
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/mystorage/vol00 to 687529984 (4k) blocks.
The filesystem on /dev/mystorage/vol00 is now 687529984 blocks long.


 あとはマウントしてみて容量が拡張されたことを確認してみます。

[root@chihiro ~]# mount /dev/mystorage/vol00 /mnt/mystorage
[root@chihiro ~]# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda3              89G  2.2G   82G   3% /
/dev/sda1             251M   22M  217M   9% /boot
tmpfs                1001M     0 1001M   0% /dev/shm
/dev/mapper/mystorage-vol00
                      2.6T  203M  2.5T   1% /mnt/mystorage

LVMの構築方法(物理エクステントの大きさを変更する) [Linux(LVM/RAID/Storage)]

 LVM2ではあまり意識する必要も無くなりましたが、LVMのver1では、1個の論理ボリュームに組み込める物理エクステントの個数は65536個までという制限がありました。このため、デフォルトのままでLVMを構築しても、1個のボリュームはたかだか256GBまでしか使えないという切ない制限がありました。
 そこで、もっと大きなボリュームが必要という場合は、物理エクステント1個あたりの大きさを大きくして対応するということになっていました。標準状態では1個4MBですが、これを16MBにすれば1TBまで使えるし、64MBにすれば4TBとかいけるようになる…というものでした。

 LVM2の場合は個数制限が緩やかになったので、とてつもなく大きな数値にすることが出来るようになった訳ではありますが、特性上、物理エクステントの個数がやたら増えるとパフォーマンスが低下する…と、言われています。そこで、最初から大きな容量になることが判っているような場合は、物理エクステントの1個あたりの大きさをあらかじめ大きくしておくことが推奨されているようです。

 では、物理エクステントの大きさを変更するにはどうすればよいか、記述しておきます。

 ボリュームグループを作成する時点(つまり、最初)から変更しておきたいという場合は、 vgcreate コマンドに「-s」オプションを追加します。

# vgcreate -s 16M mystorage /dev/sdb1

 ↑この例ですと、物理エクステント1個あたりの大きさは16MBになります。通常の4倍です。

 また、私は試したことがないのですが、ボリュームグループ作成後にも変更できそうな雰囲気ではあります。 vgchange コマンドに「-s」オプションを指定します。

# vgchange -s 16M mystorage


 このようになるようです。ちょっと今は実験する環境が無いのでのちほど実験しておきたいとは思います。
 こうして物理エクステントの大きさが変更されたことが vgdisplay コマンドで確認できますので見ておきましょう。

# vgdisplay
  --- Volume group ---
  VG Name               mystorage
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TB
  PE Size               16.00 MB
  Total PE              119234
  Alloc PE / Size       119234 / 1.82 TB
  Free  PE / Size       0 / 0
  VG UUID               Rh2eH5-oVGz-kw50-MEb7-DnPy-Kj6v-7BMelq

 物理エクステント1個あたりの大きさ(PE Size)が16.00MBとなっていることが確認できました。



 まあ、もっと大きくしておいてもいいのかもしれないけどねー。





確認してみました


LVMのトラブルShooting☆Star(チガウ その2 [Linux(LVM/RAID/Storage)]

●mixiからの転記(&編集&追記)

 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です。

 なお、この辺の一連の作業はオンライン状態のまま実施できます。

LVMのトラブルShooting☆Star(チガウ [Linux(LVM/RAID/Storage)]

●mixiからの転記(&加筆)

 LVMの構築方法とかはあちこちに紹介があるんだけど、トラブったときの情報とかめっちゃ少な杉なのでここに書いておくお。

☆他のサーバ(PC)で構築したlvmなディスクを移植する場合

 例えばPCが壊れちゃったとかのケースで、他のマシンにLinuxをセットアップして中のデータをサルベージしたいとかありますよね。その場合にどうすればいいかな~?という時に役立つかもしれない役立たないかもしれない対処方法。
 こういう時はさすがにUSBなハードディスクだとラクに救済できてラッキーとか思いますよほんとに。(笑)

 手順としてはこんな感じ。

 ①他のサーバでlvmが使えるようにしておく
    →確認方法とかセットアップ方法とかは基本編を参照汁!
 ②ディスクを他のサーバに接続する
    →USBならざくざく差し込めばいいですな。
 ③移設したディスクにある「物理ボリューム」を認識させる
 ④移設したディスクにある「ボリュームグループ」を認識させる
 ⑤「ボリュームグループ」を活性化させる
 ⑥マウント汁

 ということになります。
 てなわけで解説いきますお。

ステップ1:他のサーバでlvmが使えるようにしておく

 省略!


ステップ2:ディスクを他のサーバに接続する

 省略!

 なお、cat /proc/partitionsで接続したディスクがちゃんと見えていることをあらかじめ確認しておきましょう。この際に、デバイス名が元々のサーバと違っていても全く気にする必要はありません。例えば、元々のサーバに接続されていた時に「/dev/sdg1」だったデバイス名が他のサーバで「/dev/sdj1」とかになっていても、無問題だということです。


ステップ3:移設したディスクにある「物理ボリューム」を認識させる

 なんも難しいことは無くて、 pvscan コマンドをポンと実行して終了。
 エラーがなければ特に何も表示されないかと。

 認識されたかどうか、 pvdisplay コマンドで確認しておきませう。


ステップ4:移設したディスクにある「ボリュームグループ」を認識させる

 これも難しいことはなくて、 vgscan コマンドをポンと実行して終了。


 なお、ここでは触れてないけども、元々のサーバで vgexport コマンドを実行した場合は、ディスクを移設した先のマシンで vgimport コマンドを実行するですよ。まあ、この手順を省略してもほとんどの場合はサクっとボリュームグループが認識されるはずです。サーバがハングアップしたとかいうケースで運が悪いとこの手順が無いとダメぽ!…みたいなこともあるようなないような。



 ボリュームグループが本当に認識されたかどうか vgdisplay コマンドで確認しましょう。
 ただし、この状態だとまだボリュームグループが非活性という状態になっていて、そのボリュームをマウントできない状態になっていますので、あと一手間必要です。


ステップ5:「ボリュームグループ」を活性化させる

 実際にそのファイルシステムを使用するために必要なおまじないがあります。 vgchange コマンドを使用します。「-ay」オプションに続けてボリュームグループ名を記述するのです。前アーティクル(LVMの構築方法(基本編))の例では「vgtera」という名前を割り当てましたから…

[root@server1 root]# vgchange -ay vgtera


 ということになりますな。これでlvmが活性化されましたので…


ステップ6:マウント汁

 まうんとしる。
 mount /dev/vgtera/lva /mnt/hoge
 とか
 mount LABEL=DATAAREA /mnt/hoge
 とかでおっけーですお。



 なお、こんな場末なblogの落書きを見てしまった識者の方で指摘とかツッコミとかありましたらコメントよろしこです。




続きを読む


LVMの構築方法(基本編) [Linux(LVM/RAID/Storage)]

●mixiからの転記(&加筆)

 HDDがアフォみたいに安くなってくる一方で、動画ファイルとか使う方もサイズがでっかくなってくるので、「ニコイチ」とか「ヨンコイチ」とかああいうディスクケースを使ったりRAIDしたりする訳ですが、特にUSBのHDDを使い出すと、だんだんPCにディスクが「鈴なり」状態に、ディスクスペースが細切れ状態になってきて微妙にもったいなかったり、使いづらかったりする訳ですよ。

 で、そこで複数のディスクをガッチャンコしちゃおうという目的でLinuxでLVMしちまおう…ということでこのエントリーとあいなった訳ですよ。

 基本路線としては、
 ・LinuxでSambaな環境を構築して、Windowsには「ネットワークドライブ」という形で見せよう
 ・ネットワークドライブがいっぱいになるのはかんべんな
 ・バックアップとか考えると頭が痛くなるので、本当ならRAID5とかしたい訳だが、失業した古いHDDを再利用してでっかいディスクとして見せたいので、「壊れたら壊れたであきらめる」前提とする(ちゃんと守りたいデータは新しいディスクを買ってきてRAIDしる!)

 ということで。

 なお、当方の環境の都合上話は全てCentOS5.2とかその辺の上で進行しますので念のため。



 で、lvmを使うにはおおざっぱにいって3段階の手順とか必要になる。
 ①ハードディスクに「物理ボリューム」を作成する。
    →まずは全部のハードディスクに物理ボリュームを作成することになる
 ②作成した物理ボリュームを、「ボリュームグループ」に登録する。
    →この「ボリュームグループ」は「1個の巨大なハードディスク」みたいな感じに見えることになる。
 ③複数の物理ボリュームが登録されたボリュームグループから、必要に応じて「論理ボリューム」を切り出す。
    →ボリュームグループは「1個の巨大なハードディスク」なら、「物理ボリューム」は「パーティション」に相当すると考えるとよろし。今回のような目的で使うなら、「1個のハードディスクに1個のパーティション」みたいな感じになるですよ。

 これ以降は、普通にファイルシステムを作成してマウントして使えるですよ。
 これだけならまあRAID0したり「テラタワー」みたいな製品を使えばいいじゃんということになるんだろうけども、lvmにしておけば…
 メリット1:あとからハードディスクを追加して、ボリュームグループとか論理ボリュームを大きくできる
 メリット2:ディスクの「交換」にも割と柔軟に対応できる(ダメな時はダメぽ…ということもあるけどなー)
 メリット3:SASだろうとSATAだろうとUSBなHDDだろうとお構いなしに全部「がっちゃんこ」できる

 要するに、RAIDよりもずーっと敷居が低い訳ですよ。いろんな意味で。(特に資金的にも!)まあ、その分、RAID1とかRAID5とかのようにファイルをがっちり守るとかはちょっとアレな面も。(lvmでミラーリングもできるけどなー)


 そんな訳で、lvm構築方法を以下に書き殴っておく。

ステップ0:準備・lvmに必要なパッケージは入っているかな?&ディスクをつなごう~!

 おそらく、普通にCentOSをセットアップしておけば標準で入ってくるような気がする今日この頃ですが、パッケージは入っているかな?チェックしてみませう。

[root@server1 root]# pvdisplay --version
  LVM version:     2.02.28 (2007-08-24)
  Library version: 1.02.22 (2007-08-21)
  Driver version:  4.5.0


 コマンドが入っててLVM versionの表示が2以降なら多分問題ない希ガス。必要なパッケージは…

[root@server1 root]# rpm -qa | fgrep lvm
lvm2-2.02.28-0vl0.1


 入ってない場合は、yumでさくっと入れてしまいませう。

[root@server2 ~]# yum search lvm
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
 * addons: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
lvm2.i386 : ユーザーランド論理ボリューム管理ツール
system-config-lvm.noarch : A utility for graphically configuring Logical Volumes
lvm2.i386 : Userland logical volume management tools
lvm2-cluster.i386 : Cluster extensions for userland logical volume management tools


 ということなので、

[root@server2 ~]# yum install lvm2.i386


 ですな。なお、Vineなお友達は…

[root@server1 root]# apt-cache search lvm
lvm2 - 論理ボリューム管理ツール
lvm - Linux Logical Volume Manager utilities.
ocaml - Objective Caml コンパイラとプログラミング環境


 つーことなので

[root@server1 root]# apt-get install lvm2


 とするよろし。



 で、ディスクをざくざく接続するですよ。OSから認識できているディスクについてはdmesgで確認するとか/proc/partitionsを見るとかしませう。

[root@server1 root]# cat /proc/partitions
major minor  #blocks  name

   8     0  312570167 sda
   8     1     104391 sda1
   8     2  312464250 sda2
   8    16  976762584 sdb
   8    17  976760001 sdb1
   8    32  312571224 sdc
   8    33    2040223 sdc1
   8    34  310528417 sdc2
   8    48  976762584 sdd
   8    49  976760001 sdd1
   8    64  976762584 sde
   8    65  976760001 sde1
   8    80  976762584 sdf
   8    81  976760001 sdf1
   9     0 2930279808 md0
   8    96  976762584 sdg
   8    97  976760001 sdg1
   8   112  976762584 sdh
   8   113  976760001 sdh1
   8   128  976762584 sdi
   8   129  976760001 sdi1
   8   144  976762584 sdj
   8   145  976760001 sdj1
   8   160  245117376 sdk
   8   161  245111706 sdk1
   8   176  245117376 sdl
   8   177  245111706 sdl1
   8   192  245117376 sdm
   8   193  245111706 sdm1
   8   208  245117376 sdn
   8   209  245111706 sdn1
 253     0 4887461888 dm-0
   8   224 1464845256 sdo
   8   225 1464838798 sdo1


 まあ、健全なパソコンオタクちゃんならこれくらいはディスクが鈴なりになっているんじゃなかろうかと思います。健全でない「マル廃」なオタクちゃんの場合はきっと「すげー高級なRAIDカード」とか使っていそうなのでそういう「マル廃本仕込み」なオタクちゃんはどっか他いくよろし。

 ちなみにこのマシンの場合、sdaとsdcがマザボに接続されているHDD、sdoはRAID5なUSB-HDD(具体的にはバッキャローのUSBなアレ)で今回「がっちゃんこ」する対象外。md0はLinuxのソフトウェアRAIDなデバイスで、sdf、sde、sdd、sdbを4本束ねてRAID5してるので、これも今回の「がっちゃんこ」する対象外。

 そんな訳で、sdg、sdh、sdi、sdj、sdk、sdl、sdm、sdnの8本がlvmで「がっちゃんこ」される対象となるですよ。
 では、さっそく「がっちゃんこ」してまいります。


ステップ1:ハードディスクに「物理ボリューム」を作成する
 えーと、本当はいらないんだけど、私はコレを省略するとどーしても気持ちが悪いのでやってますが、よい子のみんなはやってもやらなくてもどっちでもいいお。

 それぞれのディスクにパーティションを切ります。おきまりの「fdisk」ですな。(サンプル中のデバイス名は適宜読み替えよう。)

[root@server1 root]# fdisk /dev/sdg

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

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

Disk /dev/sdg: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/sdg1               1      121601   976760001   8e  Linux LVM

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


 1個のハードディスクを丸ごと1個のパーティションにしておいて、パーティションのIDを変更します。「n」して「t」して「8e」にして「w」すればオッケーです。(リサイクルだという場合は最初に「d」してくだちい。)何のことかさっぱりわからんという人はお帰りください。

 lvmで「がっちゃんこ」したい全てのディスクにLinuxLVMのパーティションを作成したら、いよいよlvmの操作に入ります。

 lvmの「物理ボリューム」の作成には pvcreate コマンドを使います。基本形としては…

[root@server1 root]# pvcreate /dev/sdg1


 です。いちいちコマンド8回も実行するのは面倒くさいので
[root@server1 root]# pvcreate /dev/sd[g-n]1


 とでもしておけば8本全部に物理ボリュームが作成されるですよ。

 物理ボリュームが作成されたかどうかチェックするには pvdisplay コマンド。

[root@server1 root]# pvdisplay -v /dev/sdg1
    Using physical volume(s) on command line
    Wiping cache of LVM-capable devices
  --- Physical volume ---
  PV Name               /dev/sdg1
  VG Name               vgtera
  PV Size               931.51 GB / not usable 3.19 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              238466
  Free PE               0
  Allocated PE          238466
  PV UUID               abEiuq-JRcs-3AOl-qxEB-BP8k-QSmx-8YxlUA



 すでにこのサーバではLVMでボリュームを作成してあるのでFree PEが0になってますが、作成したばっかりの状態だとFree PEになんらかの数値が入っていることでせう。VG Nameも表示されなはずですお。


ステップ2:作成した物理ボリュームを、「ボリュームグループ」に登録する。
 複数ある「物理ボリューム」を「ボリュームグループ」に登録して、「1個の巨大なハードディスクのようなもの」を作成します。
 このボリュームグループには何か分かり易そうな名前を付けておきます。で、使用するコマンドは vgcreate です。引数として、「ボリュームグループ名」と「登録する物理ボリュームのデバイス名」を続けて書きます。
 今回の例として、「ボリュームグループ名」に「vgtera」と名前を付けることにします。

[root@server1 root]# vgcreate vgtera /dev/sdg1


 なんてことになりますが、最初から複数の物理ボリュームを追加しつつ新規作成できますので、その場合は物理ボリュームのデバイス名を書き並べることになります。

[root@server1 root]# vgcreate vgtera /dev/sdg1 /dev/sdx1 /dev/sdy1


 たとえば↑こんな感じ。ちなみに今回のケースだと

[root@server1 root]# vgcreate vgtera /dev/sd[g-n]1


 と、なる訳です。

 ちなみに、「初めてだから1個だけ登録してみた~」とか「やっう゛ぇー。デバイス名書き忘れてしまった~」みたいな場合は、 vgextend コマンドで既存のボリュームグループに物理ボリュームを追加します。

[root@server1 root]# vgextend vgtera /dev/sdz1


 とかこんな感じで。
 ディスクが「がっちゃんこ」された様子を見たい場合は、 vgdisplay コマンドで表示されます。

[root@server1 root]# vgdisplay vgtera
  --- Volume group ---
  VG Name               vgtera
  System ID
  Format                lvm2
  Metadata Areas        8
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                8
  Act PV                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



 ↑上記の例だと、すでにlvmが以下略なのでFree PE/Sizeが以下略ですが、ボリュームグループを作成した直後の場合は以下略。
 なお、コマンドにボリュームグループ名「vgtera」を付けてますが、これを省略するとそのマシンで作成されている全てのボリュームグループの情報が表示されます。また、「-v」オプションを付けると登録されている物理ボリュームの情報とかも全て表示されます。

[root@server1 root]# vgdisplay -v vgtera
    Using volume group(s) on command line
    Finding volume group "vgtera"
  --- Volume group ---
  VG Name               vgtera
  System ID
  Format                lvm2
  Metadata Areas        8
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                8
  Act PV                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
  LV UUID                suPCyY-vhXr-ptAP-sQph-TZFY-8msV-Km4cJa
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                4.55 TB
  Current LE             1193228
  Segments               8
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sdg1
  PV UUID               abEiuq-JRcs-3AOl-qxEB-BP8k-QSmx-8YxlUA
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdh1
  PV UUID               ztiGC4-cO3A-He3a-2f2x-Dz82-qBPY-Imc45D
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdi1
  PV UUID               Sz7dZh-LkUM-ltYw-gKaY-PKn8-PpMY-La3TGa
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdj1
  PV UUID               FNhgGT-22dc-W0HJ-qDYQ-ye3L-SEG6-hn4XEi
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdk1
  PV UUID               mLw2JO-emCp-3auI-if98-cw4u-e82r-6znQ5D
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

  PV Name               /dev/sdl1
  PV UUID               lDPisv-2kgJ-kt32-OLeZ-V4uo-3Eqx-lG1rv1
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

  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/sdn1
  PV UUID               Pp0EZz-2dNy-y5G3-Y92a-UZ7H-5pMA-RyM9rA
  PV Status             allocatable
  Total PE / Free PE    59841 / 0



 ↑上記の例だと、すでにlvmが以下略なので論理ボリュームの情報が表示されていたり以下略ですが新規に作成したばっかりの状態だと以下略。


ステップ3:複数の物理ボリュームが登録されたボリュームグループから、必要に応じて「論理ボリューム」を切り出す。
 ここまでで、ディスク8本を「がっちゃんこ」して約4.5TBのでっかい領域が作成されてニヨニヨしてますが、これではまだ不完全で、ここから「論理ボリューム」を作成します。

 さきほと vgdisplay コマンドで…
  Total PE              1193228

 という表示があったと思う。この「PE」という物は「物理エクステンド」という物で、ボリュームグループをデフォルトで4MB単位のブロックに区切り、そのブロックの個数を示しています。この物理エクステンドのサイズは変更することが出来るのだけども、ぶっちゃけ、lvm2を使っている限りあんまり意味はないです。
 大きくするとディスク容量の端数が無駄になりやすいとかあったり、小さくすると物理エクステンドの個数がやたら多くなってパフォーマンスが低下するとかありますが、まあ、USB-HDDを使ってる時点でパフォーマンス云々言うのは筋違いかなと思うところではありますが。(笑)

 で、論理ボリュームにこの「物理エクステンド」を何個割り当てます…みたいな指定をやることで、ようやくファイルシステムをそこに作成できるようになるわけです。

 今回は8個全てのディスクを「がっちゃんこ」して1個の広大な領域にしたいので、1個の論理ボリュームに全ての物理エクステンドを割り当てることになります。
 使用するコマンドは lvcreate です。「-l」オプションと「-n」オプションを併用します。「-l」オプションに続けて使用する物理エクステンドの個数を、「-n」オプションに続けて論理ボリュームの名前を指定します。最後に切り出す元となるボリュームグループ名です。なお、「-n」オプションを省略するとデフォルトで変な名前が割り当てられます。別にそっちでも構わないのですがね。

[root@server1 root]# lvcreate -l 1193228 -n lva vgtera


 今回の例でいくとこんな具合になる訳ですな。これで、論理ボリュームが作成されました。
 この論理ボリュームに対して、ファイルシステムを作成したり、マウントしたりする訳ですが、デバイス名の組み立て方としては…

 /dev/(ボリュームグループ名)/(論理ボリューム名)

 ということになります。今回の場合は、ボリュームグループ名に「lvtera」、論理ボリューム名に「lva」と名前を付けたので、「/dev/lvtera/lva」というデバイス名が付くことになります。


ステップ4:あとはもうファイルシステムを作成してマウントしる。

 あとはもう詳しく説明するのもアレなんですが、mke2fs -j /dev/lvtera/lva して、tune2fs -c 0 -i 0 /dev/lvtera/lva して、お好みに応じてe2label /dev/lvtera/lva DATAAREA とかやってからmkdir -p /mnt/mountpoint でマウントポイントを適宜作成してmount /dev/lvteta/lva /mnt/mountpoint とかやるよろしね。
 これで、4.5TBの領域がウヒヒヒヒ…

[root@server root]# df -h
ファイルシステム    サイズ  使用  残り 使用% マウント位置
/dev/sda2             294G  4.3G  275G   2% /
(見せられないよ! ><)
/dev/mapper/vgtera-lva
                      4.5T  3.1T  1.4T  69% /mnt/mountpoint
(見せられないよ ><)


 まあ、もう実際に使用しているので容量がアレですが以下略。



 なお、こんな場末なblogの落書きを見てしまった識者の方で指摘とかツッコミとかありましたらコメントよろしこです。
- | 次の10件 Linux(LVM/RAID/Storage) ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。