我可以在 lvextend 之后进行 lvreduce 而不会丢失其中的 ext4 分区吗?

DrS*_*SAR 1 ext4 lvm

在一次拙劣的尝试将我的根分区从一个磁盘移动到另一个磁盘时,我执行了以下操作:

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

    $ pvcreate /dev/sdb3
    Physical volume "/dev/sdb3" successfully created
    
    Run Code Online (Sandbox Code Playgroud)
  • 扩展卷组以包含这个新的物理磁盘

    $ vgextend myvg /dev/sdb3
    Volume group "myvg" successfully extended
    
    Run Code Online (Sandbox Code Playgroud)
  • 扩展了逻辑卷(我认为这就是我总结的地方:我认为我应该将 pvmove 的东西转移到该组中的新 pv - 有人可以确认吗?)

    $ lvextend /dev/mapper/myvg-root /dev/sdb3
    
    Run Code Online (Sandbox Code Playgroud)

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

$ lvreduce --by-exactly-the-amount-occupied-by-PV /ev/sdb3 /dev/mapper/myvg-root
Run Code Online (Sandbox Code Playgroud)

DrS*_*SAR 5

总而言之,当前逻辑卷 (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
Run Code Online (Sandbox Code Playgroud)

您可以简单地使用 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
Run Code Online (Sandbox Code Playgroud)

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

  --- Segments ---
  Logical extent 0 to 470980:
    Type                    linear
    Physical volume         /dev/sda3
    Physical extents        0 to 470980
Run Code Online (Sandbox Code Playgroud)

现在,一个缓慢而乏味的 pvmove 命令应该允许数据移动:

nohup pvmove -n /dev/myvg/root /dev/sda3 /dev/sdb3 &
Run Code Online (Sandbox Code Playgroud)