在实时挂载系统上调整根分区大小的解决方案
Solutions to resize root partition on live mounted system
我正在编写一个 Chef 配方以在现有系统上自动设置软件 RAID 1。基本程序是:
- 清除新磁盘上的分区 table (/dev/sdb)
- 添加新分区,然后使用 parted 设置为 raid(sdb1 用于 /boot,sdb2 用于 LVM /)
- 使用 mdadm --create ... missing
创建降级的 RAID /dev/sdb
- 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
- 等等等等
- 重启
并继续第 1 步。 5 以上。
我不能用 Chef 做到这一点,因为它无法处理重新启动到实时发行版并从中断的地方继续。我知道这显然不是幂等的。
所以我的要求是能够在不使用实时发行版 CD 的情况下在实时系统上进行 lvreduce(以某种方式)。
有人对如何实现这一目标有任何想法吗?
也许吧?:
- 将远程文件系统挂载为 root 并在别处重新挂载当前 root
- 将根文件系统重新挂载为只读(但我不知道这怎么可能,因为您首先无法卸载实时系统)。
- 或者以某种方式重新启动到实时发行版的另一种解决方案,编写调整大小的脚本并重新启动并继续 Chef 运行(不确定这是否可行
想法?
我不确定 chef 是否是合适的工具。
不是确定的解决方案,但我会为这种情况做些什么:
- 用厨师和食谱创建实时系统
- 在此启动
- 运行 厨师作为厨师独奏,使用食谱进行工作(这应该可以工作,因为首先卸载了物理磁盘)
最好的方法是编写说明书,以便能够从头开始重做目标框,一旦完成,您可以在系统安装时使用正确的分区完全重新安装目标,然后让厨师重建您的应用程序堆栈.
我正在编写一个 Chef 配方以在现有系统上自动设置软件 RAID 1。基本程序是:
- 清除新磁盘上的分区 table (/dev/sdb)
- 添加新分区,然后使用 parted 设置为 raid(sdb1 用于 /boot,sdb2 用于 LVM /)
- 使用 mdadm --create ... missing 创建降级的 RAID /dev/sdb
- 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
- 等等等等
- 重启
并继续第 1 步。 5 以上。
我不能用 Chef 做到这一点,因为它无法处理重新启动到实时发行版并从中断的地方继续。我知道这显然不是幂等的。
所以我的要求是能够在不使用实时发行版 CD 的情况下在实时系统上进行 lvreduce(以某种方式)。
有人对如何实现这一目标有任何想法吗?
也许吧?:
- 将远程文件系统挂载为 root 并在别处重新挂载当前 root
- 将根文件系统重新挂载为只读(但我不知道这怎么可能,因为您首先无法卸载实时系统)。
- 或者以某种方式重新启动到实时发行版的另一种解决方案,编写调整大小的脚本并重新启动并继续 Chef 运行(不确定这是否可行
想法?
我不确定 chef 是否是合适的工具。
不是确定的解决方案,但我会为这种情况做些什么:
- 用厨师和食谱创建实时系统
- 在此启动
- 运行 厨师作为厨师独奏,使用食谱进行工作(这应该可以工作,因为首先卸载了物理磁盘)
最好的方法是编写说明书,以便能够从头开始重做目标框,一旦完成,您可以在系统安装时使用正确的分区完全重新安装目标,然后让厨师重建您的应用程序堆栈.