Edited at

LVMで 論理ボリュームの作成、拡張、縮小、複製

More than 1 year has passed since last update.


前の記事

LVM 概要


構成概要

LVM_CreateLVMNormal0000.png

複数の物理ボリュームがあり、その上に複数のボリュームグループを作成することができ、その上に複数の論理ボリュームを作成することができます。

複数の物理ボリュームを使用する場合、その上に作成される論理ボリュームは、1 つの物理ボリュームよりも大きい領域を割り当てることができるようになります(ただし、その論理ボリュームは物理ボリュームの総数の容量を越えることはできません)。

上記の図では、未使用領域が存在しますが、その未使用領域は後ほど容量が追加で必要になった論理ボリュームに割り当てることもできます。

今回の例ではlvg-share というボリュームグループを作成し、その上に/dev/lvg-share/files, /dev/lvg-share/media, /dev/lvg-share/work 論理ボリュームを作成していきます。

また後ほど、各物理ボリュームの半分の領域を使用していき、RAID1 構成に切り替える手法についても説明していきます。


  • 検証した環境

    OS
    Fedora 21

    構成
    /dev/sda にroot ファイルシステムが入っているOS に、/deb/sdb 〜 /dev/sdf の物理的なストレージを追加。ハイパーバイザにVMWare を使用。



現在のデバイスの確認

fdisk -l コマンドで、現在のデバイスの状態を確認します。

/dev/sdb/dev/sde デバイスはまだパーティションが作成されていないことがわかります。


fdiskコマンドによる設定例

$ sudo fdisk -l

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sda: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002e29c

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 159385599 79691776 83 Linux
/dev/sda2 159387646 167770111 4191233 5 Extended
/dev/sda5 159387648 167770111 4191232 82 Linux swap / Solaris

Disk /dev/sdd: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdd doesn't contain a valid partition table

Disk /dev/sde: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sde doesn't contain a valid partition table

Disk /dev/sdc: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table


これから、/dev/sdb/dev/sde に対して/dev/sdb1/dev/sde1 という形でパーティションを作成していきます。

それぞれのパーティションのサイズは10 GB ととします。

まずは、fdisk コマンドを使用して/dev/sdb デバイスにLVM ボリュームを作成します。

$ sudo fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x995af6e7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-83886079, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +10G

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

パーティションが作成されたことを確認します。

$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
139 heads, 49 sectors/track, 12316 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x995af6e7

Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 8e Linux LVM

/dev/sdb のパーティションが作成できたら、/dev/sdc/dev/sde にもパーティションをコピーします。

$ for I in {c,d,e}; do sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sd${I} --force; done

それぞれのデバイスでパーティションを作成したら、fdisk -l コマンドを実行して、先ほどの出力と比較し、パーティションが作成されていることを確認してください。

$ sudo fdisk -l

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
139 heads, 49 sectors/track, 12316 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x995af6e7

Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 8e Linux LVM

Disk /dev/sda: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002e29c

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 159385599 79691776 83 Linux
/dev/sda2 159387646 167770111 4191233 5 Extended
/dev/sda5 159387648 167770111 4191232 82 Linux swap / Solaris

Disk /dev/sdd: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdd1 2048 20973567 10485760 8e Linux LVM

Disk /dev/sde: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sde1 2048 20973567 10485760 8e Linux LVM

Disk /dev/sdc: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdc1 2048 20973567 10485760 8e Linux LVM


物理ボリュームの作成

LVM ボリュームを作成します。

$ sudo pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sde1" successfully created

pvdisplay コマンドで確認します。

$ sudo pvdisplay

"/dev/sdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID dCvzjO-R0Tv-voXT-Me8v-q0ss-A5lI-ojbJTQ

"/dev/sdc1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID fxLbYc-4nOT-YKEB-Zzeh-L4pt-QiLa-eSEwdK

"/dev/sdd1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SkmklQ-s3Si-lC2b-hQNa-nOIt-uXnb-1uGs5W

"/dev/sde1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sde1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 5TkFOl-wXHc-u6vg-ryfY-WefK-4ftc-UkwPLg


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

vgcreate コマンドを使用してlvg-share ボリュームグループを作成します。

$ sudo vgcreate lvg-share /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

Volume group "lvg-share" successfully created

vgdisplay, vgscan コマンドで、ボリュームグループを確認します。

$ sudo vgdisplay

--- Volume group ---
VG Name lvg-share
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 4
Act PV 4
VG Size 39.98 GiB
PE Size 4.00 MiB
Total PE 10236
Alloc PE / Size 0 / 0
Free PE / Size 10236 / 39.98 GiB
VG UUID rnFwhI-ybWH-el9e-NIgK-3vOY-hO8L-sehg7c

$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "lvg-share" using metadata type lvm2


論理ボリュームグループをリネームする (vgrename)

もし、ボリュームグループ名を変更したい場合は、vgrename コマンドを使用してボリューム名を変更することができます。

$ sudo vgrename <変更前論理ボリュームグループ名> <変更後論理ボリュームグループ名>


論理ボリュームグループを削除する (vgremove)

ボリュームグループを削除する場合は、vgremove コマンドを使用します。

$ sudo vgremove <論理ボリュームグループ名>


論理ボリュームを作成する

今回は、以下のような見積もりで論理ボリューム構成を構築します。


  • 割り当て

    論理ボリューム名
    容量

    public
    18GB

    media
    8GB

    document
    6GB


lvcreate コマンドを使用して、論理ボリュームを作成していきます。

$ sudo lvcreate --name public --size 18GB lvg-share

Logical volume "public" created
$ sudo lvcreate --name media --size 8GB lvg-share
Logical volume "media" created
$ sudo lvcreate --name document --size 6GB lvg-share
Logical volume "document" created

lvdisplay で確認してみます。

$ sudo lvdisplay

--- Logical volume ---
LV Path /dev/lvg-share/public
LV Name public
VG Name lvg-share
LV UUID IVnPIB-hJCA-PD7o-jcpe-Et9I-zVZb-eQbcTu
LV Write Access read/write
LV Creation host, time lvm-test-on-pdv, 2015-03-08 17:37:40 +0900
LV Status available
# open 0
LV Size 18.00 GiB
Current LE 4608
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0

--- Logical volume ---
LV Path /dev/lvg-share/media
LV Name media
VG Name lvg-share
LV UUID t9tpLc-0ddp-CnmH-BVoA-HEFr-Q1dq-M4x1Bj
LV Write Access read/write
LV Creation host, time lvm-test-on-pdv, 2015-03-08 17:37:51 +0900
LV Status available
# open 0
LV Size 8.00 GiB
Current LE 2048
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1

--- Logical volume ---
LV Path /dev/lvg-share/document
LV Name document
VG Name lvg-share
LV UUID ERAqAq-vzZF-AQev-tTS0-gAJo-BnPq-MjUrf2
LV Write Access read/write
LV Creation host, time lvm-test-on-pdv, 2015-03-08 17:37:57 +0900
LV Status available
# open 0
LV Size 6.00 GiB
Current LE 1536
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:2

$ sudo lvscan
ACTIVE '/dev/lvg-share/public' [18.00 GiB] inherit
ACTIVE '/dev/lvg-share/media' [8.00 GiB] inherit
ACTIVE '/dev/lvg-share/document' [6.00 GiB] inherit


論理ボリューム名の名前を変更する(lvrename)

論理ボリューム名を変更する場合は、lvrename コマンドを使用します。

$ sudo lvrename <変更前論理ボリューム名> <変更後論理ボリューム名>


補足:論理ボリュームを削除する(lvremove)

論理ボリュームを削除する場合は、lvremove コマンドを使用します。

$ sudo lvremove <論理ボリュームパス>


補足:論理ボリュームを拡張する

論理ボリュームの容量を拡張する場合は、lvextend コマンドを使用します。

$ sudo lvextend -L<サイズ> <論理ボリュームパス>


例(+1GBdocument論理ボリューム容量を拡張する)

$ sudo lvextend -L+1G /dev/lvg-share/hoge



補足:論理ボリュームを縮小する

論理ボリュームの容量を縮小する場合は、lvreduce コマンドを使用します。

$ sudo lvreduce -L <サイズ> <論理ボリュームパス>


例(document論理ボリューム容量を6GBに縮小する)

$ sudo lvreduce -L 6G /dev/sdz


※相対指定で-L-1G を指定した場合は、+1GB 減らす意味になるので、注意してください。


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

ここまでの手順で作成された論理ボリュームにファイルシステムを作成します。

まず、/dev/lvg-share/public 論理ボリュームにext4 ファイルシステムを作成します。

今回は、ファイルシステムを次のように割り当てていきます。


  • ファイルシステム構成

    論理デバイス
    ファイルシステム

    /dev/lvg-share/public
    ext4

    /dev/lvg-share/media
    XFS

    /dev/lvg-share/document
    ReiserFS



public論理デバイスにext4ファイルシステムを作成する

$ sudo mkfs.ext4 /dev/lvg-share/public

mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size#4096 (log2)
Fragment size#4096 (log2)
Stride#0 blocks, Stripe width0 blocks
1179648 inodes, 4718592 blocks
235929 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
144 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done



media論理デバイスにXFSファイルシステムを作成する

$ sudo mkfs.xfs /dev/lvg-share/media

meta-data#/dev/lvg-share/media isize=256 agcount=4, agsize524288 blks
# sectsz=512 attr=2, projid32bit0
data # bsize=4096 blocks=2097152, imaxpct25
# sunit=0 swidth0 blks
naming #version 2 bsize=4096 ascii-ci0
log #internal log bsize=4096 blocks=2560, version2
# sectsz=512 sunit=0 blks, lazy-count1
realtime #none extsz=4096 blocks=0, rtextents0


document論理デバイスにReiserFSファイルシステムを作成する

$ sudo mkfs.reiserfs /dev/lvg-share/document

mkfs.reiserfs 3.6.24

Guessing about desired format.. Kernel 3.16.0-30-generic is running.
Format 3.6 with standard journal
Count of blocks on the device: 1835008
Number of blocks consumed by mkreiserfs formatting process: 8267
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: e56e8e90-46b1-4900-a447-33939e4a098f
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/lvg-share/document'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
ReiserFS is successfully created on /dev/lvg-share/document.



論理ボリュームをマウントしてみる

ファイルシステムを作成したら、論理ボリュームをマウントし、df -h コマンドで状態を確認してみましょう。

$ sudo mkdir /mnt/{public,media,document}

$ sudo mount /dev/lvg-share/public /mnt/public
$ sudo mount /dev/lvg-share/media /mnt/media
$ sudo mount /dev/lvg-share/document /mnt/document
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 75G 1.2G 70G 2% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 394M 3.1M 391M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/mapper/lvg--share-public 18G 44M 17G 1% /mnt/public
/dev/mapper/lvg--share-media 8.0G 33M 8.0G 1% /mnt/media
/dev/mapper/lvg--share-document 7.0G 33M 7.0G 1% /mnt/document

新しく作成した論理ボリュームがマウントできていることが確認出来ました。

この論理ボリュームをマウントした領域は、通常通りファイルを保存することができます。

また、通常のボリュームと同様にfstab に記述してOS 起動時に、自動的にマウントさせることもできるようになります。

$ sudo blkid | grep /dev/mapper

/dev/mapper/lvg--share-public: UUID#"e184b6b8-ed2f-470b-a08b-f45637623ad4" TYPE"ext4"
/dev/mapper/lvg--share-media: UUID#"ace4c3d3-12e3-43bb-8dfc-8fd0f9b73684" TYPE"xfs"
/dev/mapper/lvg--share-document: UUID#"e56e8e90-46b1-4900-a447-33939e4a098f" TYPE"reiserfs"

$ sudo cp -ip /etc/fstab /etc/fstab.org
$ sudo vim /etc/fstab

以下のように記述します。


/etc/fstab

UUID="e184b6b8-ed2f-470b-a08b-f45637623ad4" /mnt/public   ext4     defaults 0 0

UUID="ace4c3d3-12e3-43bb-8dfc-8fd0f9b73684" /mnt/media xfs defaults 0 0
UUID="e56e8e90-46b1-4900-a447-33939e4a098f" /mnt/document reiserfs defaults 0 0

fstab に記述したら、マウントのテストをしてみましょう。

$ sudo umount /mnt/{public,media,document}

$ sudo mount -a
$ echo $?
0

エラーなく実行できたら、OS を再起動して確認してみましょう。

$ sudo shutdown -r now

# ...再起動後
$ df -h
※出力結果については省略

fstab に記述したデバイスが問題なくマウントできていることが確認できると思います。


論理ボリュームのサイズを変更する

一度作成した論理ボリュームのサイズを変更する手順について説明していきます。

今回は/dev/lvg-share/public ボリュームを18GB から20GB に変更します。


論理ボリュームのサイズを拡張する

まずは、サイズ変更対象となる論理ボリュームをアンマウントします。

$ sudo umount /dev/lvg-share/public

lvextend コマンドを使用して論理ボリュームを拡張します。


lvextend

$ sudo lvextend -L 20G /dev/lvg-share/public

Extending logical volume public to 20.00 GiB
Logical volume public successfully resized

論理ボリュームを拡張したら、チェックします。

$ sudo e2fsck -f /dev/lvg-share/public

e2fsck 1.42.9 (4-Feb-2014)
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/lvg-share/public: 11/1179648 files (0.0% non-contiguous), 118065/4718592 blocks

この時点では、まだブロック数は18GB の時のままなので、ブロック数も拡張します。

$ sudo resize2fs /dev/lvg-share/public

resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/lvg-share/public to 5242880 (4k) blocks.
The filesystem on /dev/lvg-share/public is now 5242880 blocks long.

論理ボリュームをマウントしてサイズを確認してみます。

$ sudo mount /dev/lvg-share/public /mnt/public

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 75G 1.2G 70G 2% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 394M 3.1M 391M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/mapper/lvg--share-media 8.0G 33M 8.0G 1% /mnt/media
/dev/mapper/lvg--share-document 7.0G 33M 7.0G 1% /mnt/document
/dev/mapper/lvg--share-public 20G 44M 19G 1% /mnt/public

Size の値が20GB になっていることが確認できます。


論理ボリュームを縮小する

次は一度拡張した論理ボリュームのサイズを縮小する手順について説明していきます。

まず、縮小する論理ボリュームをアンマウントします。

$ sudo umount /dev/lvg-share/public

次にresize2fs コマンドを使用して論理ボリュームのサイズを縮小しますが、事前に正確なブロックサイズを求める必要があります。

正確なブロックサイズを求めるには、まず/dev/lvg-share/public 論理ボリュームの1ブロックあたりのサイズを確認します。

$ sudo blockdev --getbsz /dev/lvg-share/public

4096

上記の出力から、/dev/lvg-share/public の論理ボリュームの1 ブロックあたりのサイズは4096byte であることがわかります。

次に、このブロックサイズを参考に18GB(GiB) の容量を確保するには、どれだけのブロック数が必要か算出します。

$ echo "(1 * 1024 * 1024 * 1024 * 18) / 4096" | bc

4718592
$ echo "(1 * 1024 * 1024 * 1024 * 18) % 4096" | bc
0

ブロックサイズは4718592 であることがわかります。

2 つ目の計算式で、割り切れないことが確認できた(結果が0 にならなかった)場合は、ブロックサイズを1 切り上げてください。

正確なブロックサイズを求められたら、e2fsck コマンドで、チェックしてからresize2fs コマンドを使用してブロックサイズを変更します。

$ sudo e2fsck -f /dev/lvg-share/public

e2fsck 1.42.9 (4-Feb-2014)
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/lvg-share/public: 11/1310720 files (0.0% non-contiguous), 126289/5242880 blocks

$ sudo resize2fs /dev/lvg-share/public 4718592
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/lvg-share/public to 4718592 (4k) blocks.
The filesystem on /dev/lvg-share/public is now 4718592 blocks long.

コマンドが成功したら、再度e2fsck コマンドを実行して、ブロックサイズを確認してみます。

$ sudo e2fsck -f /dev/lvg-share/public

e2fsck 1.42.9 (4-Feb-2014)
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/lvg-share/public: 11/1179648 files (0.0% non-contiguous), 118065/4718592 blocks

コマンドの実行によって、ブロック数が変更されたことが確認できます。

次に、lvreduce コマンドを使用して論理ボリュームサイズを縮小します。

$ sudo lvreduce -L18G /dev/lvg-share/public

WARNING: Reducing active logical volume to 18.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce public? [y/n]: y
Reducing logical volume public to 18.00 GiB
Logical volume public successfully resized

コマンドを実行した時にDo you really want to reduce public? [y/n]: というメッセージが表示され、そこに書かれている通り、データが失われる可能性がある点に注意してください。

縮小した論理ボリュームをマウントしてみます。

$ sudo mount /dev/lvg-share/public /mnt/public

マウントしたら、df -h コマンドで論理ドライブを確認してみます。

$ df -h

Filesystem Size Used Avail Use% Mounted on
/dev/sda1 75G 1.2G 70G 2% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 394M 3.1M 391M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/mapper/lvg--share-media 8.0G 33M 8.0G 1% /mnt/media
/dev/mapper/lvg--share-document 7.0G 33M 7.0G 1% /mnt/document
/dev/mapper/lvg--share-public 18G 44M 17G 1% /mnt/public"

確認すると、ボリュームが縮小されていることが確認できます。


ボリュームを複製する

LVM として組み込まれている既存ボリュームを他のボリュームに複製し、そちらのボリュームを既存のボリュームと交換する手順について説明していきます。

今回は/dev/sdb1 物理ボリュームを/dev/sdf1 ボリュームに複製し、老朽化したディスクを取り替えることを想定した手順を実施していきます。

ここでは、ゲストOS に新たに未フォーマット状態の/dev/sdf 物理デバイスを追加しておきました。

今回使用しているVMWare Work Station にて物理デバイスを追加する手順については割愛します。

$ sudo ls /dev/sdf

/dev/sdf

/dev/sdb 物理デバイスのパーティションを/dev/sdf 物理デバイスに複製します。

$ sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/sdf --force

コマンドが正常終了したら、fdisk コマンドを使用してパーティションが作成されていることを確認します。

$ sudo fdisk -l /dev/sdf

Disk /dev/sdf: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units # sectors of 1 * 512 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdf1 2048 20973567 10485760 8e Linux LVM

/dev/sdf1 物理ボリュームにLVM を作成します。

$ sudo pvcreate /dev/sdf1

Physical volume "/dev/sdf1" successfully created

/dev/sdf1vgextend コマンドでlvg-shareボリュームグループに追加します。

$ sudo vgextend lvg-share /dev/sdf1

Volume group "lvg-share" successfully extended

vgdisplay コマンドで確認します。

$ sudo vgdisplay

--- Volume group ---
VG Name lvg-share
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 8
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 5
Act PV 5
VG Size 49.98 GiB
PE Size 4.00 MiB
Total PE 12795
Alloc PE / Size 8448 / 33.00 GiB
Free PE / Size 4347 / 16.98 GiB
VG UUID rnFwhI-ybWH-el9e-NIgK-3vOY-hO8L-sehg7c

/dev/sdb1 のデータを/dev/sdf1 にコピーするにあたって、事前に/dev/sdb1(/dev/lvg-share/public) をアンマウントしておきます。

$ sudo umount /dev/lvg-share/public

pvmove コマンドを使用してボリュームの内容をコピーします。

$ sudo pvmove /dev/sdb1 /dev/sdf1

/dev/sdb1: Moved: 0.2%
.......
/dev/sdb1: Moved: 100.0%

コピーが完了したら、/dev/sdb1 ボリュームをlvg-share ボリュームグループから外します。

$ sudo vgreduce lvg-share /dev/sdb1

Removed "/dev/sdb1" from volume group "lvg-share"

--- Volume group ---
VG Name lvg-share
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 12
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 4
Act PV 4
VG Size 39.98 GiB
PE Size 4.00 MiB
Total PE 10236
Alloc PE / Size 8448 / 33.00 GiB
Free PE / Size 1788 / 6.98 GiB
VG UUID rnFwhI-ybWH-el9e-NIgK-3vOY-hO8L-sehg7c

pvremove コマンドを使用して/dev/sdb1 物理ボリュームを削除します。

このコマンドを実行することで、/dev/sdb1 物理ボリュームは表示されなくなります。

$ sudo pvremove /dev/sdb1

Labels on physical volume "/dev/sdb1" successfully wiped

$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sdc1
VG Name lvg-share
PV Size 10.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2559
Free PE 510
Allocated PE 2049
PV UUID fxLbYc-4nOT-YKEB-Zzeh-L4pt-QiLa-eSEwdK

--- Physical volume ---
PV Name /dev/sdd1
VG Name lvg-share
PV Size 10.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2559
Free PE 511
Allocated PE 2048
PV UUID SkmklQ-s3Si-lC2b-hQNa-nOIt-uXnb-1uGs5W

--- Physical volume ---
PV Name /dev/sde1
VG Name lvg-share
PV Size 10.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2559
Free PE 767
Allocated PE 1792
PV UUID 5TkFOl-wXHc-u6vg-ryfY-WefK-4ftc-UkwPLg

--- Physical volume ---
PV Name /dev/sdf1
VG Name lvg-share
PV Size 10.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 2559
Free PE 0
Allocated PE 2559
PV UUID FezkAV-f4O5-7G2c-Y6sT-tV3m-1gcH-hveQOR

これで/dev/sdb 物理デバイスを取り外すことができるようになります。

= 次の記事 =

LVMでRAID1の構築、障害対応、他RAIDボリュームの追加