Red Hat Training

A Red Hat training course is available for RHEL 8

68.5. 論理ボリュームのサイズ変更

論理ボリュームを作成したら、ボリュームのサイズを変更できます。

68.5.1. 論理ボリュームとファイルシステムの拡張

この手順では、論理ボリュームを拡張し、同じ論理ボリューム上のファイルシステムを拡張する方法を説明します。

論理ボリュームのサイズを拡張するには、lvextend コマンドを使用します。論理ボリュームを拡張する場合は、追加するボリュームの容量、または拡張後のボリュームのサイズを指定できます。

前提条件

  1. ファイルシステムを持つ既存の論理ボリューム (LV) がある。df -Th コマンドを使用して、ファイルシステムのタイプを確認します。

    LV およびファイルシステムの作成に関する詳細は、LVM 論理ボリュームの作成 を参照してください。

  2. LV およびファイルシステムを拡張するのに十分な領域がボリュームグループにある。vgs -o name,vgfree コマンドを使用して、利用可能な領域を確認します。

手順

  1. オプション:オプション: ボリュームグループに LV を拡張するのに十分な領域がない場合は、以下のコマンドを使用してボリュームグループに新しい物理ボリュームを追加します。

    # vgextend myvg /dev/vdb3
    Physical volume "/dev/vdb3" successfully created.
    Volume group "myvg" successfully extended

    詳細は、LVM ボリュームグループの作成 を参照してください。

  2. ボリュームグループが十分に大きくなったので、要件に応じて以下のいずれかの手順を実行します。

    1. 指定されたサイズで LV を拡張するには、次のコマンドを使用します。

      # lvextend -L 3G /dev/myvg/mylv
      Size of logical volume myvg/mylv changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
      Logical volume myvg/mylv successfully resized.
      注記

      lvextend コマンドで -r オプションを使用すれば、1 つのコマンドで、論理ボリュームを拡張し、基礎となるファイルシステムのサイズを変更できます。

      # lvextend -r -L 3G /dev/myvg/mylv
      警告

      lvresize コマンドを使用して、同じ引数で論理ボリュームを拡張することもできますが、このコマンドでは、誤って縮小されない保証はありません。

    2. mylv 論理ボリュームを拡張して、myvg ボリュームグループの未割り当て領域をすべて埋めるには、次のコマンドを使用します。

      # lvextend -l +100%FREE /dev/myvg/mylv
       Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 6.35 TiB (1665465 extents).
       Logical volume myvg/mylv successfully resized.

      lvcreate コマンドと同様に、lvextend コマンドの -l 引数を使用して、論理ボリュームの拡張サイズをエクステント数で指定できます。また、この引数を使用してボリュームグループのパーセンテージ、またはボリュームグループに残ってる空き領域をパーセンテージで指定することもできます。

  3. lvextend コマンドで r オプションを使用して 1 つのコマンドで LV を拡張してファイルシステムのサイズを変更しない場合は、以下のコマンドを使用して論理ボリューム上のファイルシステムのサイズを変更します。

    xfs_growfs /mnt/mnt1/
    meta-data=/dev/mapper/myvg-mylv  isize=512    agcount=4, agsize=65536 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=262144, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 262144 to 524288
    注記

    xfs_growfs は、-D オプションを指定しないと、基となるデバイスがサポートする最大サイズまでファイルシステムを拡張します。詳細は Increasing the size of an XFS file system を参照してください。

    ext4 ファイルシステムのサイズを変更する場合は、Resizing an ext4 file system を参照してください。

検証

  • 以下のコマンドを使用して、ファイルシステムが拡大しているかどうかを確認します。

    # df -Th
    Filesystem            Type      Size  Used Avail Use% Mounted on
    devtmpfs              devtmpfs  1.9G     0  1.9G   0% /dev
    tmpfs                 tmpfs     1.9G     0  1.9G   0% /dev/shm
    tmpfs                 tmpfs     1.9G  8.6M  1.9G   1% /run
    tmpfs                 tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/mapper/rhel-root xfs        45G  3.7G   42G   9% /
    /dev/vda1             xfs      1014M  369M  646M  37% /boot
    tmpfs                 tmpfs     374M     0  374M   0% /run/user/0
    /dev/mapper/myvg-mylv xfs       2.0G   47M  2.0G   3% /mnt/mnt1

関連情報

  • vgextend(8)lvextend(8)、および xfs_growfs(8) の man ページ

68.5.2. 論理ボリュームの縮小

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

注記

GFS2 および XFS のファイルシステムでは縮小に対応していないため、GFS2 または XFS のファイルシステムが含まれる論理ボリュームのサイズは縮小できません。

縮小する論理ボリュームにファイルシステムが含まれている場合は、データの損失を防ぐため、ファイルシステムが、縮小する論理ボリュームにある領域を使用しないようにしてください。そのため、論理ボリュームにファイルシステムが含まれている場合は lvreduce コマンドの --resizefs オプションを使用することが推奨されます。

このオプションを使用すると、lvreduce コマンドは論理ボリュームを縮小する前にファイルシステムの縮小を試みます。ファイルシステムの縮小に失敗した場合 (ファイルシステムが満杯であったり、ファイルシステムが縮小をサポートしない場合に失敗します)、lvreduce コマンドの実行に失敗し、論理ボリュームを縮小しません。

警告

ほとんどの場合、lvreduce コマンドはデータ損失の可能性を警告し、確認を要求します。しかし、論理ボリュームが非アクティブな状態であったり、--resizefs オプションが使用されなかった場合など、警告が表示されない場合があるため、データの損失を防ぐのに確認プロンプトのみを信頼しないようにしてください。

lvreduce コマンドの --test オプションは、ファイルシステムの確認やファイルシステムのサイズ変更のテストを行わないため、操作が安全な場所を示しません。

手順

  • myvg ボリュームグループの mylv 論理ボリュームを 64 メガバイトに縮小するには、次のコマンドを使用します。

    # lvreduce --resizefs -L 64M myvg/mylv
    fsck from util-linux 2.37.2
    /dev/mapper/myvg-mylv: clean, 11/25688 files, 4800/102400 blocks
    resize2fs 1.46.2 (28-Feb-2021)
    Resizing the filesystem on /dev/mapper/myvg-mylv to 65536 (1k) blocks.
    The filesystem on /dev/mapper/myvg-mylv is now 65536 (1k) blocks long.
    
    Size of logical volume myvg/mylv changed from 100.00 MiB (25 extents) to 64.00 MiB (16 extents).
     Logical volume myvg/mylv successfully resized.

    この例では、mylv にはファイルシステムが含まれ、このコマンドによって論理ボリュームとともにサイズが変更されます。

  • サイズ変更値の前に - 記号を指定すると、その値が論理ボリュームの実際のサイズから減算されます。論理ボリュームを絶対サイズ 64 メガバイトに縮小するには、次のコマンドを使用します。

    # lvreduce --resizefs -L -64M myvg/mylv

関連情報

  • lvreduce(8) の man ページ

68.5.3. ストライプ化論理ボリュームの拡張

ストライプ化論理ボリュームのサイズを拡大するには、ボリュームグループを設定している物理ボリュームに、ストライプをサポートする十分な空き領域が必要です。たとえば、ボリュームグループ全域を使用する 2 way ストライプがある場合は、ボリュームグループに物理ボリュームを 1 つ追加しただけでは、ストライプを拡張することはできません。ボリュームグループには物理ボリュームを 2 つ以上追加する必要があります。

たとえば、以下の vgs コマンドで表示された、2 つの物理ボリュームで設定されるボリュームグループ vg について考えてみましょう。

# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     2   0   0 wz--n- 271.31G 271.31G

ボリュームグループの全領域を使用して、ストライプを作成できます。

# lvcreate -n stripe1 -L 271.31G -i 2 vg
  Using default stripesize 64.00 KB
  Rounding up size to full physical extent 271.31 GB
  Logical volume "stripe1" created
# lvs -a -o +devices
  LV      VG   Attr   LSize   Origin Snap%  Move Log Copy%  Devices
  stripe1 vg   -wi-a- 271.31G                               /dev/sda1(0),/dev/sdb1(0)

ボリュームグループの空き領域がなくなっていることに注意してください。

# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     2   1   0 wz--n- 271.31G    0

以下のコマンドで、ボリュームグループに物理ボリュームをもう 1 つ追加します。 これで、135 ギガバイトの領域が追加されます。

# vgextend vg /dev/sdc1
  Volume group "vg" successfully extended
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     3   1   0 wz--n- 406.97G 135.66G

この時点では、ストライプ化論理ボリュームを、ボリュームグループの最大サイズまで拡大することはできません。データをストライプ化するには、基になる物理デバイスが 2 つ必要です。

# lvextend vg/stripe1 -L 406G
  Using stripesize of last segment 64.00 KB
  Extending logical volume stripe1 to 406.00 GB
  Insufficient suitable allocatable extents for logical volume stripe1: 34480
more required

ストライプ化論理ボリュームを拡張するには、もう 1 つの物理ボリュームを追加してから、論理ボリュームを拡張します。この例では、ボリュームグループに物理ボリュームを 2 つ追加することにより、ボリュームグループの最大サイズまで、論理ボリュームを拡張できるようになっています。

# vgextend vg /dev/sdd1
  Volume group "vg" successfully extended
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     4   1   0 wz--n- 542.62G 271.31G
# lvextend vg/stripe1 -L 542G
  Using stripesize of last segment 64.00 KB
  Extending logical volume stripe1 to 542.00 GB
  Logical volume stripe1 successfully resized

ストライプ化論理ボリュームを拡張するのに十分な物理デバイスがない場合でも、その拡張部分がストライプ化されなくても問題がないならば、ボリュームの拡張は可能です。ただし、これによりパフォーマンスが一定ではなくなる可能性があります。論理ボリュームに領域を追加する場合、デフォルトの動作では、既存の論理ボリュームの最後のセグメントと同じストライピングパラメーターを使用するようになっていますが、このパラメーターはオーバーライドできます。以下の例では、初回の lvextend コマンドが失敗した後に、既存のストライプ化論理ボリュームを拡張して残りの空き領域を使用するようにしています。

# lvextend vg/stripe1 -L 406G
  Using stripesize of last segment 64.00 KB
  Extending logical volume stripe1 to 406.00 GB
  Insufficient suitable allocatable extents for logical volume stripe1: 34480
more required
# lvextend -i1 -l+100%FREE vg/stripe1