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

时间:2015-03-02 22:31:42

标签: linux chef partitioning mount

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

  1. 清除新磁盘上的分区表(/ dev / sdb)
  2. 添加新分区,然后使用parted设置为raid(sdb1为/ boot,sdb2为LVM为/)
  3. 使用mdadm --create ... missing
  4. 使用/ dev / sdb创建降级RAID
  5. pvcreate / dev / md1&& vgextend VolGroup / dev / md1
  6. pvmove / dev / sda2 / dev / md1
  7. vgreduce VolGroup / dev / sda2&& pvremove / dev / sda2
  8. ...
  9. ...
  10. 我坚持不。 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这样做,因为它无法处理重新启动到现场发行版并继续它停止的地方。我明白这显然不是幂等的。

    因此,我的要求是能够在不使用现场发行光盘的情况下(不知何故)在现场系统上播放。

    那里的任何人对如何实现这一点有任何想法?

    也许:

    • 以root身份挂载远程文件系统,并将当前root重新挂载到其他位置
    • 将根文件系统重新安装为只读(但我不知道如何做到这一点,因为您可以首先卸载实时系统)。
    • 或另一种解决方案,以某种方式重新启动到一个实时发行版,脚本调整大小并重新启动并继续Chef运行(不确定这是否甚至是popssible

    想法?

1 个答案:

答案 0 :(得分:1)

我很不确定厨师是不是正确的工具。

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

  1. 使用厨师和食谱创建一个实时系统
  2. 在此
  3. 上启动
  4. 以厨师为主厨执行工作(当物理磁盘首先卸载时应该可以正常工作)
  5. 最好的方法是编写cookbook,以便能够从头开始重做目标框,一旦完成,您可以在系统安装时通过正确的分区重新安装目标,然后让Chef重建您的应用程序堆栈。 / p>