Kylin ext3/4 xfs手动扩容根分区

2023-11-01

1. 环境:

云平台:兼容OpenStack Queens的发行版
HOST OS:Kylin-Server-10-SP1-Release-Build20-20210518-arm64
虚拟机镜像ISO: Kylin-Server-V10-GFB-Release-2204-Build03-ARM64.iso、 Kylin-4.0.2-server-sp2-2000-19080414.J1-arm64.iso
需求:原有遗留镜像由于各种原因未加入cloud-init,未能实现自动扩容,但很多应用程序却对根分区独爱,导致需要将根分区进行扩容,分区又分是否采用逻辑卷管理(LVM)方式,根文件系统亦可分为采用了ext3/4或者xfs文件系统情况

注意:分区调整前,建议提前做好数据备份,以免失败丢失数据!!!

2.概述

MBR(Master Boot Record):即硬盘的主引导记录分区列表,在主引导扇区,位于硬盘的cylinder 0, head 0, sector 1 (Sector是从1开始的)。
GPT(GUID Partition Table):即全局唯一标识分区列表,是一个物理硬盘的分区结构。它用来替代BIOS中的主引导记录分区表(MBR)。

对于传统的MBR分区方式,有很多的限制:

  • 最多4个主分区(3个主分区+1个扩展分区(扩展分区里面可以放多个逻辑分区)),无法创建大于2TB的分区,使用fdisk分区工具,而GPT分区方式不受这样的限制。

  • GPT分区方式将不会有这种限制,使用的工具是parted;

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

  • PV(Physical Volume)- 物理卷
    物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。

  • VG(Volumne Group)-卷组
    卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

  • LV(Logical Volume)- 逻辑卷
    逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组

  • PE(Physical Extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

  • LE(Logical Extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。


3. 基于LVM分区的系统

3.1 创建所需磁盘大小的虚拟机

这里可以采用多种方式:
1、通过云平台直接创建相应大小的磁盘的虚拟机,或者挂载云硬盘等
2、通过云平台调整配置,调整到所需的磁盘大小
3、若是通过virt-manager或者vmware等工具调整磁盘大小
4、通过qemu-img resize kylin.qcow2 +80G

3.2 查看磁盘大小

通过命令fdisk -l,如下:
在这里插入图片描述从上图获取到磁盘大小已按需求分配出来了,如上图所示/dev/vda大小为100GB,分区格式为GPT

3.3 查看现有分区情况

通过命令df -hTl和lsblk -fp查看现有分区情况,如下:

在这里插入图片描述在这里插入图片描述从上图可以判断根分区采用了LVM管理模式,且根文件系统为xfs文件系统,根分区大小仅为17GB,目前总磁盘大小100GB,还有磁盘空间未分配

3.4 创建分区

这里依然采用fdisk /dev/vda进行磁盘分区,把剩余的所有空间均分配到一个分区,如下:
在这里插入图片描述

3.5 分区生效

partprobe /dev/vda
在这里插入图片描述

3.6 VG扩容

3.6.1 查看(vgdisplay)卷组名称,以及卷组使用情况

vgdisplay

在这里插入图片描述

3.6.2 创建(pvcreate)物理卷

pvcreate /dev/vda4

在这里插入图片描述

3.6.3 将物理卷扩展(vgextend)到卷组

vgextend klas /dev/vda4

在这里插入图片描述

再次查看扩容后的卷组使用情况
在这里插入图片描述

3.7 LV扩容

3.7.1 查看当前逻辑卷的空间状态

在这里插入图片描述

3.7.2 将卷组中的空闲空间扩展到根分区逻辑卷

通过lvextend -L xxGB来扩充lv分区的容量 。还可以使用+xxGB,或者+unit 表示增加多个单位(扇区)。

lvextend -l +100%FREE /dev/klas/root

在这里插入图片描述
再次查看扩容后的逻辑卷的空间状态
在这里插入图片描述

3.8 文件系统扩容

通过lsblk -fp或者df -hTl指令可以查询到系统根文件系统采用的是xfs文件系统,因此此处使用xfs_growfs指令调整其大小即可。
xfs_growfs是xfs文件专用的扩容工具。

xfs_growfs /dev/klas/root

新版的xfs_growfs命令后面的参数需要为文件系统挂载点,而非文件系统本身。执行如下命令:

xfs_growfs /

在这里插入图片描述再次查看根文件系统容量,已经扩大,如下:
在这里插入图片描述
若文件系统为ext2,ext3,ext4,则采用resize2fs,如下:

resize2fs /dev/mapper/klas-root

4.基于标准分区的系统

根据3.1已经创建了所需磁盘大小的虚拟机

4.1 根分区在最后一个分区情况

4.1.1 查看磁盘大小

通过fdisk -l查看磁盘大小和分区,如下
在这里插入图片描述

从上图获取到磁盘大小已按需求分配出来了,如上图所示/dev/vda大小为100GB,分区格式为GPT

4.1.2 查看现有分区情况

通过命令df -hTl和lsblk -fp查看现有分区情况,如下:
在这里插入图片描述在这里插入图片描述从上图可以判断根分区采用了LVM管理模式,且根文件系统为xfs文件系统,根分区大小仅为17GB,目前总磁盘大小100GB,还有磁盘空间未分配

4.1.3 分区扩展

通过fdisk删除并新建分区,新建分区号与删除的分区号保持一致,新建分区的第一个扇区与删除的分区第一个扇区保持一致
在这里插入图片描述新建分区如下: 在这里插入图片描述

4.1.4 分区生效及重启

partprobe /dev/vda

在这里插入图片描述

4.1.5 文件系统扩容

xfs_growfs /dev/vda4

在这里插入图片描述

根分区在最后一个分区的,可以通过growpart(cloud-guest-utils)工具进行扩容,若在扩展分区下面,先对扩展分区进行扩容,然后再对根分区进行扩容

4.2. 根分区不在最后一个分区情况(重点)

重新分区并分配根、swap、扩展分区,注意不要更改分区顺序,与之前保持一致。

4.2.1 查看分区情况

通过命令fdisk -l、df -hTl和lsblk -fp查看现有分区情况,简直是最辣眼睛的分区了,如下:
在这里插入图片描述

4.2.2 备份/boot/efi及卸载

mkdir -p /opt/boot_efi/
cp -ra /boot/efi/* /opt/boot_efi/
umount /boot/efi/

4.2.3 停止SWAP

swapoff -a
swapon -s

在这里插入图片描述

4.2.4 删除、创建分区及时使能分区

删除分区,记住分区分区扇区起始和结束位置
在这里插入图片描述新建分区
在这里插入图片描述
查看新建的分区在这里插入图片描述>注意,如果更改顺序将会改变分区扇区值,会导致开机无法启动

4.2.5 分区生效

partprobe /dev/vda
fdisk -l

在这里插入图片描述

4.2.6 重建SWAP

mkswap /dev/vda5

后续fstab中更新启用

4.2.7 恢复/boot/efi

mkfs.vfat /dev/vda6
mount /dev/vda6 /boot/efi/
cp -ra /opt/boot_efi/* /boot/efi/

后续fstab中更新启用

在这里插入图片描述

4.2.8 更新fstab

通过blkid查看分区的UUID,用于更新fstab
在这里插入图片描述
vim /etc/fstab在这里插入图片描述更新/etc/fstab后重启操作系统

4.2.7 文件系统扩容

根据前面的数据,根文件系统为ext4,故通过resize2fs进行文件系统扩容

resize2fs /dev/vda2

在这里插入图片描述


5. 问题记录:


6. 参考文献:

https://www.cnblogs.com/cloudos/p/9348315.html
https://blog.51cto.com/u_890909/2528584
https://cloud.tencent.com/developer/article/1839925

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kylin ext3/4 xfs手动扩容根分区 的相关文章

  • 远程 ssh 命令:第一个回显输出丢失

    我试图通过 ssh 1 liner 调用在远程机器上运行多个命令 方法是将它们指定为传递给 bash c 的分号分隔字符串 它适用于某些情况 但不适用于其他情况 看一下这个 Note the echo 1 output is lost ba
  • bash 别名中允许使用哪些字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近添加了 alias cd alias cd alias cd 到我的 bash aliases 文件 玩弄这个 我注意到在别名时 被
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 除了 iptables 之外还有数据包管理实用程序吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Linux 实用程序 它可以根据一组规则更改网络数据包的有效负载 理想情况下 我会使用
  • 如何让 PHP、符号链接和 __FILE__ 很好地协同工作?

    在本地主机上 我有以下目录结构 share www trunk wp content plugins otherfolders share www portfolio wp content symlink Where symlink是一个符
  • 编译器 libstdc++ 版本与系统版本

    我试图了解 g 如何选择它链接的 libstdc 版本 以及当库的 系统 版本不同时它意味着什么 我正在使用 gcc g 4 1 2 根据ABI 指南 http gcc gnu org onlinedocs libstdc manual a
  • 命令行参数中的“-”(破折号)有什么魔力?

    例子 创建 ISO 映像并将其直接刻录到 CD mkisofs V Photos r home vivek photos cdrecord v dev dev dvdrw 更改到上一个目录 cd 侦听端口 12345 并解压发送到该端口的数
  • 干净地销毁System V共享内存段

    我在用shmget shmat and shmctl分别获取和创建共享内存段 将其附加到进程地址空间中并删除它 我想知道进程是否仍然可以使用共享内存段 即使它已被分离并要求使用删除 shmctl id IPC RMID 在一个过程中 我无法
  • 使用 gatttool 或 bluepy BLE 订阅通知

    我正在使用 bluepy 编写一个程序 用于监听蓝牙设备发送的特征 我还可以使用任何库或语言 唯一的限制是在 Linux 上运行 而不是在移动环境中运行 似乎仅在移动设备中广泛使用 没有人在桌面上使用 BLE 使用 bluepy 我注册了委
  • 从 gitlab docker runner 启动声纳扫描仪

    我有一个 CI 工作流程 集成了 linting 作业和代码质量作业 我的 Linting 工作是一个 docker runner 从应用程序代码启动我的 eslint 脚本 然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例 检查我的代码并
  • 使用 linux perf 工具测量应用程序的 FLOP

    我想使用 perf Linux 性能计数器子系统的新命令行接口命令 来测量某些应用程序执行的浮点和算术运算的数量 出于测试目的 我使用了我创建的一个简单的虚拟应用程序 请参见下文 因为我找不到任何为测量 FP 和整数运算而定义的 perf
  • 如何真正释放 Linux 中的大页面以供新进程使用?

    真的找不到太多关于此的信息 希望有人可以提供帮助 我正在假脱机使用 100GB java 堆作为大数据缓存 为了避免与文件系统缓存等内容发生冲突 并且因为它通常性能更好 我将其分配在大页面中 我保留了 51 200 x 2MB 大页面 一切
  • 在Linux伪终端中执行从一个终端发送到另一个终端的字符串

    假设我有一个终端 其中 tty 的输出是 dev pts 2 我想从另一个终端向第一个终端发送命令并执行它 使用 echo ls gt dev pts 2 仅在第一个终端中打印 ls 有没有办法执行字符串 不 终端不执行命令 它们只是数据的
  • 如何“grep”连续流?

    可以用吗grep在连续的流中 我的意思是有点tail f
  • 在单个命令中使用前缀重命名文件夹中的所有文件

    重命名带有前缀的文件夹中的所有文件 Unix 假设一个文件夹有两个文件 a txt b pdf 那么它们都应该从一个命令重命名为 Unix a txt Unix b pdf 如果您的文件名包含没有空格并且你没有任何子目录 你可以使用一个简单
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • 从 Linux 命令行发送 SNMP 陷阱消息

    Folks 我需要从 Linux 命令行使用此命令 snmptrap 将自定义消息发送到陷阱侦听器 我需要根据用户设置在 v1 和 v2c 中发送相同的消息 这是我发现的 For v1 snmptrap v 1 c Tas hostname
  • 有关 Linux 内存类型的问题

    关于Linux内存我有以下问题 我知道活动内存是最常访问的内存部分 但是有人可以解释一下 linux 如何考虑将内存位置用于活动内存或非活动内存 主动存储器由哪些部分组成 磁盘 文件缓存是否被视为活动内存的一部分 有什么区别Buffers
  • /proc/PID 文件格式

    我想从中检索一些流程信息 proc目录 我的问题如下 中的文件是否有标准格式 proc PID 例如 有这个proc PID status文件与Name t ProcName在第一行 我可以在其他地方用空格代替这个文件吗 t或者类似的东西
  • gnome-terminal 新选项卡,使用别名作为要执行的命令

    我已经创建了一个别名 bashrc文件如下 alias myproject cd Desktop myproject 当我重新启动终端时保存文件后 输入myproject带我到项目目录 但是当我尝试使用别名作为新的命令参数时gnome te

随机推荐