LVMでファイルシステムを作成する

仮想マシンに追加した複数領域をLVMで1つのディスクにし、自動mountさせるまで。
今回大容量領域が必要だったので、最大値で確保したハードディスク領域2つをLVMで一つのディスクにする必要がありました。作業時の手順メモ。

## 作業手順

1. 仮想マシンの設定でハードディスク領域を追加(sdb, sdc)
2. 追加したデバイスをパーティションに登録
3. PV(Physical Volume、物理ボリューム)を作成
4. VG(Volume Group、ボリュームグループ)を作成
5. LV(Logical Volume、論理ボリューム)作成
6. ファイルシステム構築
7. マウント
8. reboot時にマウントされるように設定

## 手順詳細

+ 仮想マシンの設定でハードディスク領域を追加(sdb, sdc)

仮想マシンの設定画面などからハードディスクを追加。
rebootすると新しいデバイスが認識されている。

```
# fdisk -l

Disk /dev/sdb: xxxx.0 GB, xxxxxxxxxxxxx bytes
xxx heads, xx sectors/track, xxxxxx cylinders
Units = シリンダ数 of xxxxx * xxx = xxxxxxx bytes

ディスク /dev/sdb は正常な領域テーブルを含んでいません

～略～

ディスク /dev/sdc は正常な領域テーブルを含んでいません
```

+ 追加したデバイスをパーティションに登録 (/dev/sdb, /dev/sdc それぞれ)

1. p 区画テーブルの表示(何も追加されていないことの確認）
2. n 新しい区画を作成
3. t 区画のシステムIDを変更(LVMとして使用するので 8e にする)
4. w テーブルを書き込んで終了
5. p 区画テーブルの表示(パーティションが追加されたことの確認）

```
# fdisk /dev/sdb
コマンド (m でヘルプ): p
Disk /dev/sdb: xxxx.0 GB, xxxxxxxxxxxxx bytes
xxx heads, xx sectors/track, xxxxxx cylinders
Units = シリンダ数 of xxxxx * xxx = xxxxxxx bytes

デバイス Boot      Start         End      Blocks   Id  System

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-xxxxxx, default 1): (Enter)
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-xxxxxx, default xxxxxx): (Enter)

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました！

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
# fdisk /dev/sdb
コマンド (m でヘルプ): p

Disk /dev/sdb: xxxx.0 GB, xxxxxxxxxxxxx bytes
xxx heads, xx sectors/track, xxxxxx cylinders
Units = シリンダ数 of xxxxx * xxx = xxxxxxx bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      xxxxxx  xxxxxxxxxx   8e  Linux LVM
```

+ PV(Physical Volume、物理ボリューム)を作成

```
# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               VgData01
  PV Size               x.xx GB / not usable x.xx MB
  Allocatable           yes (but full)
  PE Size (KByte)       xxxx
  Total PE              xxxxxx
  Free PE               0
  Allocated PE          xxxxxx
  PV UUID               xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx

  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               VgData01
  PV Size               x.xx GB / not usable x.xx MB
  Allocatable           yes (but full)
  PE Size (KByte)       xxxx
  Total PE              xxxxxx
  Free PE               0
  Allocated PE          xxxxxx
  PV UUID               xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx
```

+ VG(Volume Group、ボリュームグループ)を作成

```
# vgcreate VgData01 /dev/sdb1 /dev/sdc1
  Volume group "VgData01" successfully created
# vgdisplay
  --- Volume group ---
  VG Name               VgData01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  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               x.xx TB
  PE Size               x.00 MB
  Total PE              xxxxxx
  Alloc PE / Size       xxxxxx / x.xx TB
  Free  PE / Size       0 / 0
  VG UUID               xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx
```

+ LV(Logical Volume、論理ボリューム)作成

100%FREEを指定することで、全VGをLVにあてることができる。

```
# lvcreate -n LvData01 -l 100%FREE VgData01
  Logical volume "LvData01" created
# lvdisplay
  --- Logical volume ---
  LV Name                /dev/VgData01/LvData01
  VG Name                VgData01
  LV UUID                xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                x.xx TB
  Current LE             xxxxxx
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
```

+ ファイルシステム構築

OSが古かったので今回はext3フォーマットだった

```
# mkfs.ext3 /dev/VgData01/LvData01
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
xxxxxxxx inodes, xxxxxxxx blocks
xxxxxxxx blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=xxxxxxxx
xxxxx block groups
xxxxx blocks per group, xxxxx fragments per group
xxxxx inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done
Creating journal (xxxxx blocks): done
Writing superblocks and filesystem accounting information: done
```

+ マウント

```
# mount -t ext3 /dev/VgData01/LvData01 /lvmdata
```

+ reboot時にマウントされるよう設定

LABELを使ったけれど、UUIDを使ったほうがいいみたい(´・ω・｀)
「LABELは小学生まで」

```
# e2label /dev/VgData01/LvData01 /lvmdata
# vi /etc/fstab
---
LABEL=/lvmdata            /lvmdata ext3    defaults 1 2
---
```

こんなかんじででっかいディスクを追加できました(・∀・)
次に同じ事をすることになった時にはもう悩みたくない。

**LVM（logical volume manager）** ： 
LinuxをはじめとするUnix系OSが持つディスク管理機能。複数のハード・ディスク、パーティションにまたがった記憶領域を一つの論理的なディスクとして扱うことができる。