カテゴリー

アクセスカウンター


since 1996/06/14

アクセス状況

  • 0
  • 17
  • 137
  • 4,647

ディスク操作(主にLVM)

サーバを再構築しているんですが、毎回調べるのが面倒なのでメモしておきます。

LVM(Logical Volume Manager)

Linuxのストレージ管理の機能。使いこなすと、オンラインでのストレージ移動、パーテーションの拡張・縮小・結合など柔軟に出来る上、ソフトウェアミラーまで出来る。
※ただ、F/Wミラーや、Linuxの従来のミラーに比べると、信頼性が劣るっぽい。

PV操作

物理ディスクの操作。LVMで使う為のディスクを確保する。基本的にはパーテーションを切っておき、それをLVM用として確保するだけ。

PV情報を見る

# pvdisplay -v
ディスクの情報をを見る
# pvdisplay /dev/nvme0n1p3
  --- Physical volume ---
  PV Name               /dev/nvme0n1p3
  VG Name               vg_vm
  PV Size               <297.02 GiB / not usable 3.78 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              76036
  Free PE               71172
  Allocated PE          4864
  PV UUID               ***

管理下に無いPVを見るとエラーになります。

# pvdisplay パーティション 
Failed to find physical volume "パーティション ".

PVの作成・削除

# pvcreate パーティション
例)pvcreate /dev/md1p3
PV(LVM用物理ディスク)を作成する。
# pvremove パーティション
 Labels on physical volume "パーティション " successfully wiped.

PVのオンラインMove

pvmoveでデータをディスク間移動することができます。以下の例では、物理パーティション「/dev/sdf1」にあるVG「vg_m2d2」を「/dev/sdc2」へ移動します。

移動元PV

# pvdisplay /dev/sdf1
   --- Physical volume ---
   PV Name               /dev/sdf1
   VG Name               vg_m2d2 ←VGがある。
   PV Size               80.00 GiB / not usable 32.00 MiB
~略~ 
# pvdisplay /dev/sdc2
   "/dev/sdc2" is a new physical volume of "100.00 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/sdc2
   VG Name                 ←VGが無い
   PV Size               100.00 GiB
~略~

まず、 /dev/sdc2 をVG「vg_m2d2」に迎え入れます。

# vgextend vg_m2d2 /dev/sdc2
 Volume group "vg_m2d2" successfully extended
pvdisplay /dev/sdc2
 --- Physical volume ---
   PV Name               /dev/sdc2
   VG Name               vg_m2d2 ←加わった。
   PV Size               100.00 GiB / not usable 32.00 MiB

そして、Moveします。ちなみに、このパーティションのLVはKVMで仮想サーバが利用していますが、サーバにはほとんど負荷が無く、仮想サーバが停止することはありません。サイズにもよると思いますが、10数秒毎に進捗が%で表示されます。

# pvmove /dev/sdf1 /dev/sdc2
    /dev/sdf1: Moved: 0.00%
   /dev/sdf1: Moved: 2.22%
   /dev/sdf1: Moved: 4.43%
~略~
   /dev/sdf1: Moved: 99.33%
   /dev/sdf1: Moved: 100.00%

移動が完了し、移動元のTotal PEとFree PEが同じになり、移動元が全て空き状態になります。

pvdisplay /dev/sdf1
 --- Physical volume ---
   PV Name               /dev/sdf1
   VG Name               vg_m2d2
   PV Size               80.00 GiB / not usable 32.00 MiB
   Allocatable           yes
   PE Size               32.00 MiB
   Total PE              2559
   Free PE               2559

最後に、移動元のVGを切り離します。

# vgreduce vg_m2d2 /dev/sdf1
 Removed "/dev/sdf1" from volume group "vg_m2d2"

VG操作

ボリュームグループ操作。複数のボリュームを一つのグループとする。1グループが1論理パーティションになる訳では無い。グループの中に複数の論理パーティションが作れる。普通は1グループ1論理でもいいし、1グループに全部つっこんでも構わない。仮想化をするなら、1ゲストOS1グループにした方がわかりやすい。

# vgdisplay -v VG名
VGの内容をみる。

VGの削除は以下のような感じ。所属するLVが削除されてないと消せないと思います。

vgremove  VG名 
 Volume group " VG名 " successfully removed

VGの追加。
-sはエクステントサイズ。32Mにすると、2TBまでのpvを扱える。デフォは4M(256GBまで)。大きく取ると容量の無駄(残が32M以下だとそこが使われない)らしいけど、そのくらいなら気にしない。小さい方が性能が良くなるらしいけど、まぁ気にする程でも無いという話もある。
これは古い情報で、現在はこんなことは無いそうです。よほど巨大なディスクを扱わない限り、デフォの4MBで良いらしい。

vgcreate -s 32M vg_vgname /dev/sda1

LV操作

論理ディスク操作。LVMは『必ず』PVをVGで纏めた上で、その中にLVを作る。VGを省略してPVに直接LVを作ったりは出来ない。

# lvdisplay VG名
VGに含まれるLVを表示する

# lvcreate -n LV名 --size サイズ VG名
例)lvcreate -n lv_root --size 100G vg_vm
「VG名」の中に「サイズ」分の大きさの「LV名」を作成する。
確保可能な領域を全て使う場合は「-l 100%FREE」を指定する。

LVはOSに直接マウントが可能。通常はUUIDを指定します(/devのパスでマウントしてもいいけど、仮想化環境は環境が変わる毎にデバイス名が変わりやすい。UUIDはデバイスに対して固定なので、その点のメリットがあります)

UUIDを調べる

  1. ディスクを使える状態にする(通常のパーティションはmkfsまでしないと次のコマンドでも見えません)
  2. blkidを実行→各ディスクのUUIDが表示される
  3. /etc/fstabに書く
例)/etc/fstab
/dev/mapper/vg_vm-lv_root /                               ext4    defaults        1 1
UUID=6a9e4aeb-(略)  /boot          ext4    defaults        1 2

注意)マウント済みパーティションのfstabを更新すると、シャットダウン時にアンマウントに失敗するので、「アンマウント→fstab編集→マウント」とした方がいいです。

LVは使用中でもサイズの変更ができます。しかもfdiskで作るようなパーティションのように、ディスク上の連続した領域を確保する必要はありません。なお、実行する前にアンマウントしてfsckをしておいた方が安全です。

# e2fsck -f /dev/vg_vm/lv_root

LVの削除。VGも指定しますが、このコマンドでVGは消せません。

# lvremove VG名/LV名
 Do you really want to remove active logical volume VG名/LV名 ? [y/n]: y
   Logical volume " LV名 " successfully removed

LVの拡張。アンマウントしなくてもできます。
※事前にVGの空きを確認しておきましょう。⇒vgdisplayコマンドに表示される「Free  PE / Size」が空きです。

# lvextend -L +200Gb -r /dev/vg_vm/lv_root

⇒現状の容量に200GB追加。「-r」はLV内のファイルシステムも同時に拡張します。
確保可能な領域を全て使う場合は「-l 100%FREE」を指定する。

# lvextend -L 100%FREE -r /dev/vg_vm/lv_root

なお、LV内をさらにパーティション分割しているような環境の場合は、「-r」を付けずに、resize2fsで手動拡張して下さい。

LVの縮小。アンマウント必須みたいです。

# lvreduce -L -200Gb -r /dev/vg_vm/lv_root

機能は上記のlvextendと同じです。

rawディスク操作

LVMは機能豊富で様々なことができるけど、やはり一長一短はあります。なので、ディスクイメージファイルによるストレージ作成も使いこなせると便利。ここではrawファイルについて触れます。

rawディスク作成

作り方はいろいろありますが、以下の方法を使うとスパース化が防げる。
(スパースは実容量が見た目より小さく、使うほど大きく成長するファイル。ディスク使用量は同じだが、成長する分パフォーマンスが劣るので、はじめっから巨大なファイルを作っておいた方がいい)

1GByteのイメージファイルを作成する

# dd if=/dev/zero of=vs.img bs=1M count=1024

スパース化してないかは以下のコマンドで確認可能

# qemu-img info vs.img

※ファイルをコピーするだけでもスパース化するので注意。ちなみにスパース化を防ぐには「cp –sparse=never コピー元 コピー先」とする

てな感じです。

VMのクローン

KVM上でゲストOSを丸ごとコピーする。

# virt-clone –original mst –name new –file /vm/new.img –nonsparse
意味)ゲストOS「mst」からクローンし、新ゲストOS「new」を作る。その際の新しいストレージは「/vm/new.img」でノンスパースファイルにする。

スパースファイルとは、imgファイルを使用している分しかディスクを確保しないファイル。ディスクの節約にはなるが、使いながらディスクを拡張する為、効率は悪いらしい(パフォーマンスが落ちる)。なので、はじめからノンスパースファイルにしておいた方がいい。
うちのVMは元々ノンスパースで作成しているので、クローンをするときもノンスパースオプションを付けないと、勝手にスパースファイルに変換されてしまう。

また、クローン後はクローン元の情報を持ったままですが、とりあえずネットに繋がらないので、ネットの設定をしなければならない

  1. 「/etc/udev/rules.d/70-persistent-net.rules」を編集。
    「SUBSYSTEM==云々」というのが二行出てくるが、一行目はクローン元の情報なので削除する。また、二行目に記載されたIF名が「eth1」になっているので、「eth0」に直す。
  2. 「/etc/sysconfig/network」を編集。ホスト名を最新にする。
  3. 「/etc/sysconfig/network-scripts/ifcfg-eth0」を編集。IPを最新化する。また、「UUID」「HWADDR」も必ず最新化する(削除でも良い)。
  4. networkを再起動する(/etc/init.d/network restart)

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>