在实时挂载系统上调整根分区大小的解决方案

Posted

技术标签:

【中文标题】在实时挂载系统上调整根分区大小的解决方案【英文标题】:Solutions to resize root partition on live mounted system 【发布时间】:2015-05-03 10:46:48 【问题描述】:

我正在编写一个 Chef 配方,用于在现有系统上自动设置软件 RAID 1。基本流程是:

    清除新磁盘上的分区表 (/dev/sdb) 添加新分区,然后使用 parted 设置为 raid(sdb1 用于 /boot,sdb2 使用 LVM 用于 /) 使用 mdadm --create ... 缺失的 /dev/sdb 创建降级 RAID pvcreate /dev/md1 && vgextend VolGroup /dev/md1 pvmove /dev/sda2 /dev/md1 vgreduce VolGroup /dev/sda2 && pvremove /dev/sda2 ... ...

我坚持不。 5. 使用 2 个相同大小的磁盘,我总是会收到错误消息: Insufficient free space: 10114 extents needed, but only 10106 available Unable to allocate mirror extents for pvmove0. Failed to convert pvmove LV to mirrored

我认为这是因为当我执行 mdadm --create 时,它​​会向磁盘添加额外的信息,因此它的物理范围会稍微少一些。

要解决此问题,通常会从实时发行版中重新启动系统,然后:

e2fsck -f /dev/VolGroup/lv_root lvreduce -L -0.5G --resizefs ... pvresize --setphysicalvolumesize ...G /dev/sda2 等等等等 重启

然后继续步骤号。 5 以上。

我不能用 Chef 做到这一点,因为它无法处理重新启动到实时发行版并从中断处继续。我知道这显然不是幂等的。

所以我的要求是能够在不使用 live distro cd 的情况下(以某种方式)在 live 系统上进行 lvreduce。

有人对如何实现这一点有任何想法吗?

也许?:

以 root 身份挂载远程文件系统并将当前 root 重新挂载到别处 将根文件系统重新挂载为只读(但我不知道这怎么可能,因为您一开始就无法卸载活动系统)。 或其他解决方案以某种方式重新启动到实时发行版,编写调整大小脚本并重新启动并继续运行 Chef(不确定这是否可能

想法?

【问题讨论】:

【参考方案1】:

我不太确定 chef 是不是合适的工具。

不是一个确定的解决方案,但我会为这种情况做些什么:

    创建一个包含厨师和食谱的实时系统 在此启动 以 chef-solo 的身份运行 chef,使用 recipe 完成工作(这应该可以工作,因为首先卸载了物理磁盘)

最好的方法是编写说明书以便能够从头开始重做目标框,一旦完成,您可以在系统安装时使用正确的分区重新安装整个目标,然后让厨师重建您的应用程序堆栈。

【讨论】:

不是我正在寻找的解决方案,但这仍然是正确的答案。

以上是关于在实时挂载系统上调整根分区大小的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Linux分区方案

调整home分区和根分区的大小

centos系统怎么调整分区大小

如何调整根文件系统分区的大小 Debian Jessie BeagleBone Black

请问如何调整Linux根目录(/)的空间大小?急求解决办法!!!

如何修改CentOS分区大小