LVとファイルシステムを縮小するためのターゲットサイズをどのように計算できますか?

LVとファイルシステムを縮小するためのターゲットサイズをどのように計算できますか?

ext4ファイルシステムを備えたLVがあります。

lubuntu@lubuntu:~$ sudo parted -l
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/lubuntu--vg-root: 499GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End    Size   File system  Flags
 1      0.00B  499GB  499GB  ext4

LVをサイズの1/10に減らしたいです。以下のプロセスに示すように、ファイルシステムとLVのターゲットサイズを予測するのは非常にうまくいきません。将来的には、より良い仕事をするのに役立ついくつかのアドバイスを提供できるかどうか疑問に思います。

(1) ブロック数に基づいてLVの大きさを把握し、目標サイズを計算します。

lubuntu@lubuntu:~$ sudo e2fsck -f /dev/mapper/lubuntu--vg-root
/dev/mapper/lubuntu--vg-root: 169997/30433280 files (0.2% non-contiguous), 3088725/121713664 blocks

lubuntu@lubuntu:~$ echo "121713664/10"  | bc
12171366

(2) LVのファイルシステムサイズを縮小。

lubuntu@lubuntu:~$ sudo resize2fs /dev/mapper/lubuntu--vg-root 12171366
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/mapper/lubuntu--vg-root to 12171366 (4k) blocks.
The filesystem on /dev/mapper/lubuntu--vg-root is now 12171366 (4k) blocks long.

fsのサイズが変更されたことを確認

ubuntu@lubuntu:~$ mkdir /tmp/root
lubuntu@lubuntu:~$ sudo mount /dev/mapper/lubuntu--vg-root /tmp/root
lubuntu@lubuntu:~$ df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/lubuntu--vg-root   45G  3.5G   39G   9% /tmp/root
lubuntu@lubuntu:~$ sudo umount /tmp/root

(3) LVのサイズを小さくする。どのサイズに縮小すべきかわからないので、比率をdf -h

lubuntu@lubuntu:~$ sudo lvreduce -L46G /dev/mapper/lubuntu--vg-root
  WARNING: Reducing active logical volume to 46.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lubuntu-vg/root? [y/n]: y
  Size of logical volume lubuntu-vg/root changed from 464.30 GiB (118861 extents) to 46.00 GiB (11776 extents).
  Logical volume lubuntu-vg/root successfully resized.


lubuntu@lubuntu:~$ sudo fdisk -l

Disk /dev/mapper/lubuntu--vg-root: 46 GiB, 49392123904 bytes, 96468992 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

(4) fsをLVに「拡張」しようとしましたが、なぜできませんか?

lubuntu@lubuntu:~$ sudo resize2fs /dev/mapper/lubuntu--vg-root
resize2fs 1.44.1 (24-Mar-2018)
Please run 'e2fsck -f /dev/mapper/lubuntu--vg-root' first.

lubuntu@lubuntu:~$ sudo e2fsck -f /dev/mapper/lubuntu--vg-root
e2fsck 1.44.1 (24-Mar-2018)
The filesystem size (according to the superblock) is 12171366 blocks
The physical size of the device is 12058624 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>? yes

(5) LVをfsより大きく「拡張」しようとしたが、なぜできないのか?

lubuntu@lubuntu:~$ sudo lvextend -l 12171366 /dev/mapper/lubuntu--vg-root
  Insufficient free space: 12159590 extents needed, but only 107085 available

(6)LVをより大きなサイズに「拡張」しようとする第3の試みがなされた。幸いなことに、私の推測はファイルシステムのサイズより大きかった。しかし、これは単なる推測です。ファイルシステムを収容するのに十分な大きさのターゲットサイズを見つけるにはどうすればよいですか?

lubuntu@lubuntu:~$ sudo lvextend -L 48G /dev/mapper/lubuntu--vg-root
  Size of logical volume lubuntu-vg/root changed from 46.00 GiB (11776 extents) to 48.00 GiB (12288 extents).
  Logical volume lubuntu-vg/root successfully resized.

以下では、「Inode 30571スコープブロックがチェックに合格しましたが、チェックサムがスコープと一致しません」とはどういう意味ですか?

lubuntu@lubuntu:~$ sudo e2fsck -f /dev/mapper/lubuntu--vg-root
e2fsck 1.44.1 (24-Mar-2018)
Pass 1: Checking inodes, blocks, and sizes
Inode 30571 extent block passes checks, but checksum does not match extent
    (logical block 303, physical block 54575, len 1)
Fix<y>? yes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/lubuntu--vg-root: 169997/3047424 files (0.6% non-contiguous), 1364383/12171366 blocks

これでfsをLVに拡張できます。

lubuntu@lubuntu:~$ sudo resize2fs /dev/mapper/lubuntu--vg-root
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/mapper/lubuntu--vg-root to 12582912 (4k) blocks.
The filesystem on /dev/mapper/lubuntu--vg-root is now 12582912 (4k) blocks long.

ありがとうございます。

答え1

-r, --resizefs直感的な選択は提供されたオプションを使用することです。lvresize:

-r--resizefs

次のコマンドを使用して、基本ファイルシステムと論理ボリュームのサイズを変更します。FSADM(8)

以下に示すテスト出力は私のCentOS 7システムから得られますが、原則はUbuntuでも同じでなければなりません。

10GiB LVで始まります。

[root@testvm1 ~]# lvs testvg/testlv
  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- <10.00g

次に、ターゲットサイズを2GiBに指定し、-rファイルシステムのサイズを変更するフラグを指定してLVのサイズを変更します。

[root@testvm1 ~]# lvresize -r -L 2G /dev/mapper/testvg-testlv
fsck from util-linux 2.23.2
/dev/mapper/testvg-testlv: clean, 12/655360 files, 83130/2620416 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/testvg-testlv to 524288 (4k) blocks.
The filesystem on /dev/mapper/testvg-testlv is now 524288 blocks long.

  Size of logical volume testvg/testlv changed from <10.00 GiB (2559 extents) to 2.00 GiB (512 extents).
  Logical volume testvg/testlv successfully resized.

変換が期待どおりに機能していることを確認してください。

[root@testvm1 ~]# lvs testvg/testlv
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 2.00g

これら2つのステップを別々に実行する必要がある場合は、範囲とブロック数を計算する代わりにサイズを使用することをお勧めします。

まず、ターゲットサイズを指定してファイルシステムのサイズを変更します。

[root@testvm1 ~]# resize2fs /dev/mapper/testvg-testlv 2G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/testvg-testlv to 524288 (4k) blocks.
The filesystem on /dev/mapper/testvg-testlv is now 524288 blocks long.

次に、同じサイズを指定してLVのサイズを調整します。

[root@testvm1 ~]# lvresize -L 2G /dev/mapper/testvg-testlv
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testvg/testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from <10.00 GiB (2559 extents) to 2.00 GiB (512 extents).
  Logical volume testvg/testlv successfully resized.

これがファイルシステムとLVのサイズを一緒に調整する方法に関する質問の中心になることを願っています。


(4)のエラーは簡単です。サイズ変更操作により、パーティション(12058624ブロック)がファイルシステム(12171366ブロック)よりも小さくなりました。これは非論理的であるため、e2fsckファイルシステムまたはパーティションテーブルが破損していることを警告します。

(5)はあなたが指定したために発生します-l 12171366。ここではブロックと範囲を混同しています。ブロックはファイルシステムで使用される概念であり、範囲はLVMで使用される概念です。ファイルシステムブロックは、ファイルシステムの最小作業単位を表します。 LVMスコープは、LVMを使用するときに割り当てることができる最小のスペース単位です。

これをよりよく説明するために、以下は〜10GiBパーティションと〜10GiBファイルシステムの例です。

block count (2620416) * block size (4K) = size of filesystem (10236M)
number of extents (2559) * extent size (4M) = size of volume (10236M)

ext4ファイルシステムのブロック数とブロックサイズはを使用して検索できますtune2fs -l。範囲サイズと数を使用pvdisplayまたは再試行できますpvs

関連情報