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를 더 큰 크기로 "확장"하려는 세 번째 시도가 이루어졌습니다. 운 좋게도 내 추측은 파일 시스템의 크기보다 컸습니다. 하지만 이것은 단지 추측일 뿐입니다. 파일 시스템을 수용할 수 있을 만큼 큰 대상 크기를 어떻게 찾을 수 있습니까?

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

이 두 단계를 별도로 수행해야 한다면 범위와 블록 수를 계산하는 대신 크기를 사용하는 것이 좋습니다.

먼저 대상 크기를 지정하여 파일 시스템의 크기를 조정합니다.

[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.

관련 정보