LVMの拡大・縮小

▼大変参考になったサイト
http://memo.blogdns.net/lvm.html

LVMとは

Logical Volume Manager
ストレージ管理に柔軟性を持たせるための仕組み

  • 物理ボリューム(physical volume; pv)
  • ボリュームグループ(volume group; vg)
    • 1個以上の物理ボリュームから構成されるストレージ領域の集合
  • 論理ボリューム(logical volume; lv)

現在のHDD容量


$ df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00 10157368 439720 9193360 5% /
/dev/sda1 124427 15158 102845 13% /boot
tmpfs 1874700 0 1874700 0% /dev/shm
/dev/mapper/VolGroup00-LogVol01 5078656 2389056 2427456 50% /usr
/dev/mapper/VolGroup00-LogVol02 10157368 8728788 904292 91% /var
/dev/mapper/VolGroup00-LogVol03 50309320 1486512 46225944 4% /home

やりたいこと

/var の使用容量が日々増え続けているため、/var の割当容量を増やす
(/var には、MySQLのデータとバイナリログが保存されているので、今後もどんどん増えると予想される)


# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 4
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.56 GB
PE Size 32.00 MB
Total PE 2386
Alloc PE / Size 2385 / 74.53 GB
Free PE / Size 1 / 32.00 MB
VG UUID XlRTUo-25nM-bfAF-rEzV-op0i-O73P-6pYT2u

ひょえ〜っ、Free PE がたったの32MB
→空き容量を確保するには、/varにマウントされているLogVol02以外のLVを縮小しなければならない
→/home(LogVol03) を縮小し、/var を拡大する

Apache停止&データバックアップ


# /usr/local/apache2/bin/apachctl stop
# cd /home/username
# tar cpf /tmp/home-username-snapshot.tar .

MySQL停止&データバックアップ


# mysql
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+------------------+-----------+--------------+------------------+
| hostname-bin.008 | 554028919 | | |
+------------------+-----------+--------------+------------------+
mysql> quit
# mysqladmin shutdown
# cd /var/lib/mysql
# tar cpf /tmp/mysql-snapshot.tar --exclude 'hostname-bin*' .

※home-username-snapshot.tar,mysql-snapshot.tarは、ローカル側にFTP転送して保存

/home を縮小

サイズ縮小は、まず中身のファイルシステムを先に小さくし、その後、入れ物であるLVを小さくする。
ファイルシステムext3の場合は、
アンマウント→ファイルシステム縮小→LV縮小→再マウント の手順となる


# umount /home
# e2fsck -f /dev/mapper/VolGroup00-LogVol03
e2fsck 1.38 (30-Jun-2005)
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

/dev/mapper/VolGroup00-LogVol03: ***** FILE SYSTEM WAS MODIFIED *****
/dev/mapper/VolGroup00-LogVol03: 126300/12996192 files (1.0% non-contiguous), 778619/12984320 blocks
# resize2fs /dev/mapper/VolGroup00-LogVol03 15G
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/mapper/VolGroup00-LogVol03 to 3932160 (4k) blocks.
The filesystem on /dev/mapper/VolGroup00-LogVol03 is now 3932160 blocks long.
# lvreduce -L 15G /dev/mapper/VolGroup00-LogVol03
Volume group mapper doesn't exist
↑ /dev/ボリュームグループ名/論理ボリューム名 で指定しなければならないようだ
# lvreduce -L 15G /dev/VolGroup00/LogVol03
WARNING: Reducing active logical volume to 15.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol03? [y/n]: y
Reducing logical volume LogVol03 to 15.00 GB
Logical volume LogVol03 successfully resized
# e2fsck -f /dev/mapper/VolGroup00-LogVol03
e2fsck 1.38 (30-Jun-2005)
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
/dev/mapper/VolGroup00-LogVol03: 126300/3928320 files (1.0% non-contiguous), 491577/3932160 blocks
# mount /dev/mapper/VolGroup00-LogVol03 /home

空き容量が増えたか確認


# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 4
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.56 GB
PE Size 32.00 MB
Total PE 2386
Alloc PE / Size 1280 / 40.00 GB
Free PE / Size 1106 / 34.56 GB
VG UUID XlRTUo-25nM-bfAF-rEzV-op0i-O73P-6pYT2u


# df /home
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol03 15236560 1474228 12975900 11% /home
うーん。使用容量が若干減っている。。。大丈夫かな

/var を拡張

Fedora Core 3 以降では ext2/ext3 でもマウントしたままファイルシステムを拡大出来るようになった。

サイズの拡大は、まず入れ物であるLVを先に大きくし、その後、中身のファイルシステムを大きくする。
LV拡大→ファイルシステム拡大 の手順となる


# lvextend -L 30G /dev/VolGroup00/LogVol02
Extending logical volume LogVol02 to 30.00 GB
Logical volume LogVol02 successfully resized
# ext2online /dev/mapper/VolGroup00-LogVol02
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
Fedora Core 5 まではコマンド ext2online を、 Fedora Core 6 と Fedora 7 以降は
コマンド resize2fs を使用する。
※ext2online で可能なのは拡大だけで、縮小は出来ない。


# df /var
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol02 30472188 8733856 20165724 31% /var
うーん。使用容量が若干増えている。。。なんで?

再度LVM確認


# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 4
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.56 GB
PE Size 32.00 MB
Total PE 2386
Alloc PE / Size 1920 / 60.00 GB
Free PE / Size 466 / 14.56 GB
VG UUID XlRTUo-25nM-bfAF-rEzV-op0i-O73P-6pYT2u

MySQL起動


# /usr/bin/mysqld_safe --log &

Apache起動


# /usr/local/apache2/bin/apachctl start

バックアップは使用しないで済みました。