调整 GPT 驱动器上的 LVM 分区大小

调整 GPT 驱动器上的 LVM 分区大小

我们有一个 Centos 服务器作为虚拟机,其中 / 路径已满。因此我们要将分区大小从 50GB 调整为 70GB。

我遵循了这个指南 https://www.thomas-krenn.com/de/wiki/LVM_vergr%C3%B6%C3%9Fern

因此,第一步是增加虚拟机首选项的大小。

之后我使用 cfdisk 创建一个新分区。

前:

sda1                        NC                          Primary                GPT                                                                      53687.10                *
                                                        Pri/Log                Free Space                                                               21474.84                *

写完后:

 sda1                        NC                          Primary                GPT                                                                      53687.10                *
 sda2                                                    Primary                Linux                                                                    21474.84                *

正如指南所说,我首先没有重新启动并使用命令partprobe。

partprobe
Error: The backup GPT table is not at the end of the disk, as it should be.
This might mean that another operating system believes the disk is smaller.   
Fix, by moving the backup to the end (and removing the old backup)?
Warning: Not all of the space available to /dev/sda appears to be used, you  
can fix the GPT to use all of the space (an extra 41943040 blocks) or  
continue with the current setting?
Warning: WARNING: the kernel failed to re-read the partition table on    
/dev/sda (Device or resource busy).  As a result, it may not reflect all of   
your changes until after reboot.

收到此消息后,我不确定并最终重新启动。

然后我尝试将新分区初始化为PV

[root]# pvs
PV         VG            Fmt  Attr PSize  PFree
/dev/sda3  vg_atcrushftp lvm2 a--  49.31g 10.00g

并收到此错误消息:

[root]# pvcreate /dev/sda2
Can't open /dev/sda2 exclusively.  Mounted filesystem?

现在我不确定并做了 df 来寻找它

[root]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_atcrushftp-lv_root
                   35G  8.4G   25G  26% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/sda2             477M  121M  331M  27% /boot
/dev/sda1             200M  260K  200M   1% /boot/efi
//192.168.0.53/pictures

[root]# df -T
Filesystem           Type   1K-blocks       Used  Available Use% Mounted on
/dev/mapper/vg_atcrushftp-lv_root
                 ext4    36380264    8720856   25804740  26% /
tmpfs                tmpfs    1962068          0    1962068   0% /dev/shm
/dev/sda2            ext4      487652     123566     338486  27% /boot
/dev/sda1            vfat      204580        260     204320   1% /boot/efi

mount 命令显示了这一点

[root]# mount
/dev/mapper/vg_atcrushftp-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda2 on /boot type ext4 (rw)
/dev/sda1 on /boot/efi type vfat (rw,umask=0077,shortname=winnt)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

看起来我无法使用创建的分区,因为它是/boot。这是否意味着我破坏了 /boot 上的信息?在开始之前,我创建了一个快照。这样我就可以恢复旧的状态。

接下来我应该做什么?我想调整分区大小而不丢失数据。

答案1

调整 GPT 驱动器上的 LVM 分区大小

命令:

pvs         Shows physical volume
lvs         Shows logical volume
vgs         Shows volume groups
vgdisplay   Shows volume groups including mount points
lsblk       Shows block hierarchy (plate, partition, LVM)

必要步骤的基本流程本质上是:

  1. 调整 LVM 分区大小以使用新空间。
  2. 调整 LVM 分区中物理卷的大小以使用新调整大小的空间。
  3. 将卷组内的逻辑卷大小调整为新大小。
  4. 调整每个逻辑卷中的文件系统的大小以匹配其大小。

警告:之前进行备份


重新启动进入恢复模式

或重新启动至 Live CD/USB 环境,因为在线时无法调整分区大小。

(由于这是一个 GPT 分区的磁盘,因此我们必须使用 Parted 工具而不是 FDisk。)

在恢复模式或实时环境中,如果您还没有终端,请打开一个终端,然后启动 Parted 以通过键入以下命令来检查您的阵列:

$ sudo parted /dev/sda

GNU Parted 2.3
Using /dev/sda Welcome to GNU Parted!
Type 'help' to view a list of commands.

现在我们有一个“(parted)”提示。首先,我们需要将我们使用的计量单位切换为扇区。通过发出以下命令来执行此操作:

(parted) u s

现在使用“print”命令列出现有分区。您将看到类似于以下内容的内容:

(parted) print 
Model: INTEL SRCSATAWB (scsi)
Disk /dev/sda: 19521474560s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
 1 2048s 1953791s 1951744s ext4 Boot boot
 2 (red)1953792s(/red) 19521474526s 19519520735s MYSERVER_HDD lvm

注意:您可能会看到一条警告消息,提示 GPT 表不在磁盘的末尾,表示磁盘大小小于系统预期的大小(因为您调整了阵列大小,还记得吗?)。它会询问您是否想修复此问题。输入“F”并按 Enter 键。然后您可能会收到警告,内核尚未意识到正在进行的更改。通过输入“I”并按 Enter 键来响应“忽略”。使用 Parted 时,系统可能会多次提示您显示后一条消息。每次都回复“忽略”。在这种环境中,当前内核不需要知道这些更改,因为无论如何我们都会在其结束时重新启动。

记下上面以红色突出显示的项目,即设备的总扇区(代表新扩展的阵列的总大小)和第二个分区的起始扇区。请仔细检查您的数字并确保它们正确。这里的任何错误都可能会破坏您的数据。

现在我们将调整第二个分区的大小以使用阵列中所有新创建的空间。不幸的是 GPT 无法调整大小。相反,您必须删除该分区并重新创建它。别担心,尽管听起来很可怕,但此过程不会更改驱动器上的任何数据。它只是删除与驱动器上分区的开头和结尾相关的几何数据。使用以下命令删除第二个分区:

(parted) rm 2

现在让我们创建一个新分区来替换它。输入以下内容:

(parted) mkpart

系统将要求您提供分区的名称。为其指定与之前相同的名称,或者根据需要指定一个新名称:

Partition name?  []? MYSERVER_HDD

然后系统会询问您文件系统类型。您不能在此处指定 LVM,因此只需按 Enter 接受“ext2” - 我们稍后会更改它:

File system type?  [ext2]?

然后系统会要求您提供起始扇区。指定您之前记录的第二个分区的开始值(不要在末尾写字母“s”):

Start? 1953792

然后系统会要求您提供结束扇区。指定您之前记录的驱动器总大小减一的值。如果您指定实际值,您将收到一条错误消息,指出该值“在设备之外”,这就是您指定一个恰好在该限制内的值的原因。

End? 19521474559

然后您会被告知系统实际上无法在该位置创建分区(因为磁盘上还有另一个分区占用空间),因此系统将提供下一个最接近的值,该值恰好是剩余的最大空间数组。只需回答“Y”即可。

Warning: You requested a partition from 1953792s to 19521474559s.  The
closest location we can manage is 1953792s to 19521165533s. Is this
still acceptable to you? Yes/No?

现在我们需要将分区类型更改为LVM,如下所示:

(parted) toggle
Partition number? 2
Flag to Invert? lvm

现在我们已经完成了分区,因此使用 quit 命令退出:

(parted) quit

重新启动您的服务器

并正常启动。如果您使用parted或fdisk检查驱动器,它现在应该显示总分区大小包括阵列中新添加的空间,但还没有任何东西使用它。现在是时候通过以下命令调整物理卷的大小来告诉 LVM 使用新空间了:

$ sudo pvresize /dev/sda2
  1. 完成后,您现在可以通过发出以下命令来检查 LVM 物理组中的新可用空间(显示为可用盘区):

    $ sudo pvdisplay

现在我们可以开始将新获得的可用空间分配给 LVM 逻辑卷。首先,让我们获取所有定义的逻辑卷的列表:

$ sudo lvdisplay

记下您要添加空间的每个逻辑卷的“LV 名称”。

现在让我们调整逻辑卷的大小。有两种方法可以做到这一点。一种方法是指定一个绝对值来定义该逻辑卷的新大小,或者指定一个将添加到其现有大小的值。在第一个示例中,我将把名为 /dev/myserver/mylogicvolume 的逻辑卷的大小更改为绝对大小 20 GB:

$ sudo lvextend -L20G /dev/myserver/mylogicalvolume

...这将使 /dev/myserver/myologicalvolume 逻辑卷的大小变为 20 GB,无论其先前的大小如何。它不会增加现有尺寸。或者使用以下命令向现有大小添加空间:

$ sudo lvextend -L+20G /dev/myserver/mylogicalvolume

(注意 -L 和 20G 之间的加号)...这将为 /dev/myserver/myologicalvolume 逻辑卷添加 20 GB 的空间。如果之前的大小是 10 GB,那么现在的大小将是 30 GB。或者,如果您希望将所有剩余可用空间分配给逻辑卷,请发出以下命令:

$ sudo lvextend -l +100%FREE /dev/myserver/mylogicalvolume

(请注意,该参数是小写 L 而不是大写 L)对您要扩展的所有逻辑卷重复此操作。还有其他方法来分配空间,但以上是最常用的方法。有关详细信息,请参阅 lvextend 命令的手册页。

您可以通过发出以下命令确认每个逻辑卷的新大小:

$ sudo lvdisplay

我们快到了!现在剩下要做的就是调整逻辑卷中包含的文件系统的大小以使用新分配的空间。再次,使用您之前记录的 LV 名称,为您修改的每个逻辑卷指定以下命令:

$ sudo resize2fs /dev/myserver/mylogicalvolume

扩展所有逻辑卷上的文件系统后,您可以通过发出以下命令来检查每个文件系统上的可用空间:

$ df -h

就是这样!您已成功在 GPT 分区阵列上扩展了 LVM 分区!拍拍自己的背。你完成了。


原帖:

经过长时间的搜索,本指南帮助了我: http://www.serenux.com/2013/11/howto-resize-an-lvm-partition-on-a-gpt-drive-after-expanding-the-underlying-array/

(我尽力将其格式化得尽可能好。)

相关内容