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

  • 83
    いいね
  • 8
    コメント

前の記事

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ボリュームの追加