我可以在 lvextend 之后执行 lvreduce 而不会丢失里面的 ext4 分区吗?

我可以在 lvextend 之后执行 lvreduce 而不会丢失里面的 ext4 分区吗?

在尝试将根分区从一个磁盘移动到另一个磁盘时,我做了以下操作:

  • 添加新磁盘
  • 使用 parted 对磁盘进行分区(第 3 部分现在几乎完全填满了磁盘)
  • 初始化物理卷

    $ pvcreate /dev/sdb3
    Physical volume "/dev/sdb3" successfully created
    
  • 扩展卷组以包含这个新的物理磁盘

    $ vgextend myvg /dev/sdb3
    Volume group "myvg" successfully extended
    
  • 扩展了逻辑卷(我想这就是我搞砸的地方:我想我应该将东西移动到该组中的新 pv - 有人可以确认吗?)

    $ lvextend /dev/mapper/myvg-root /dev/sdb3
    

我现在想撤消 lvextend,然后继续执行将旧物理卷的内容移至新物理卷的原始计划。我可以缩小逻辑卷吗(我还没有使用类似 resizefs 的命令触碰位于 /dev/mapper/myvg-root 中的 ext4 分区)而不用担心损坏 ext4 文件系统?如果可以,我该如何告诉它缩小到正确的量?

$ lvreduce --by-exactly-the-amount-occupied-by-PV /ev/sdb3 /dev/mapper/myvg-root

答案1

总而言之,当前在逻辑卷(myvg-root)内有一个 ext4 文件系统(root),该逻辑卷位于由两个物理卷(其中一个是新添加的 sdb3)组成的卷组(myvg)中。

您可以使用 lvdisplay 检查逻辑范围到物理范围的映射

$ lvdisplay -m
  --- Logical volume ---
LV Name                /dev/myvg/root
VG Name                pfeifer
LV UUID                2LeFq8-zz3y-Y62m-931D-mD3m-XmK1-6Zp3Ir
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                3.62 TiB
Current LE             947851
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           251:0

--- Segments ---
Logical extent 0 to 470980:
  Type              linear
  Physical volume   /dev/sda3
  Physical extents  0 to 470980

Logical extent 470981 to 947850:
  Type              linear
  Physical volume   /dev/sdb3
  Physical extents  0 to 476869

你可以使用 lvreduce 简单地减少这个逻辑卷的大小

$ lvreduce -l -476870 /dev/myvg/root
  WARNING: Reducing active and open logical volume to 1.80 TiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce root? [y/n]: y
  Reducing logical volume root to 1.80 TiB
  Logical volume root successfully resized

请注意,sdb3 上要减少的逻辑区数是 476869+1(从 0 开始计数!)。就是这样。现在快速检查似乎可以确认原始的世界顺序:

  --- Segments ---
  Logical extent 0 to 470980:
    Type                    linear
    Physical volume         /dev/sda3
    Physical extents        0 to 470980

现在,缓慢而繁琐的 pvmove 命令应该允许移动数据:

nohup pvmove -n /dev/myvg/root /dev/sda3 /dev/sdb3 &

相关内容