如何在 CentOs 启动后编辑 initramfs 以添加新分区

Posted

技术标签:

【中文标题】如何在 CentOs 启动后编辑 initramfs 以添加新分区【英文标题】:how to edit initramfs to add a new partition after boot in CentOs 【发布时间】:2013-07-24 03:23:03 【问题描述】:

我想通过编辑现有脚本或在已安装 CentO 的引导文件夹中的 initramfs 中添加新脚本来添加新的 ext3 分区。然后通过将新的 initramfs 映像替换为其他已安装的 centos 并重新启动,新的 CentO 中就会出现一个新的分区(及其文件系统)。

我的问题是,我不知道应该更改 initramfs 中的哪个脚本,或者我应该在那里编写哪个新的 shell 脚本?使用哪个命令以及如何使用?例如我应该使用 fdisk 命令吗?我尝试但没有成功..

任何帮助将不胜感激。

【问题讨论】:

hmm,initramfs 与分区没有太大关系,syslinux/grub 驻留在引导扇区中,被加载,它们获取引导条目列表,例如。 linux kernel 3.11、win 7 等。每一行都加载一个内核文件,对于 linux,它的 initramfs 文件(如果有的话)。当您说分区时,您的意思是引导选项吗?分区将是您保存引导文件或系统文件等的硬盘驱动器的范围。但据我所知,这些与 initramfs 无关,需要使用 fdisk 等创建。或者你在谈论initramfs 内的分区? 【参考方案1】:

我要在这里猜测一下。

如果我理解你想要做的正确,你想要做的是让另一个 ext3 分区在 CentOS 中可见。

如果是这样,您要确保分区存在。也许您有一个名为 /dev/sda 的磁盘,它可能有 2 个分区:

     sda1 ext3 mounted at /boot
and  sda2 ext3 mounted at /

要查看此内容,请使用 sudo blkidfdisk-l 或类似名称。这些分区在启动时从/etc/fstab 中的列表加载。

假设磁盘上还有剩余空间。使用 fdisk/gparted 创建一个新的 ext3 分区 sda3。在 /etc/fstab 中为该磁盘添加一行。

现在它应该可以在重新启动或sudo mount -a 之后访问。

我可能完全误解了你的问题。

编辑#1

我想我明白你现在想要做什么,你可能想编辑 /etc/fstab initramfs 中。我从来没有尝试过这样做,我不知道它是否会起作用,但它应该。无论如何,除非你真的需要在 initramfs 中挂载分区,否则请使用上述方法将其挂载到 fstab 中。

提取和重新打包已编辑的 initramfs 的内容相当复杂,但这里有一些解释如何提取和重新打包的链接,它们适用于 gentoo,但应该没有区别:

http://forums.gentoo.org/viewtopic-t-429263-highlight-initramfs.html http://forums.gentoo.org/viewtopic-t-383198-highlight-cpio.html http://forums.gentoo.org/viewtopic-t-388539-highlight-.html

如果您阅读了这些线程,您应该能够使用脚本或 C 程序来提取 initramfs 的内容,在 initrams 中更改 /etc/fstab 的内容,然后将其重新提取出来。如果您需要为不同的计算机执行此操作,则它们需要 initramfs 中的相同内容,或者您​​需要为每台计算机设置执行此操作。

【讨论】:

首先非常感谢您的好回答。在您回答的已编辑部分中,您很好地理解了我的问题,事实上,我想要一个 initramfs 映像文件来执行所有必要的活动以在系统启动时添加新分区。正如你提到的 fstab 应该被编辑,fdisk 或 cfdisk 或.. 应该使用分区磁盘,等等.. 最后我们应该将新分区挂载到系统文件并重新启动。我的问题是我不知道如何执行此操作并在 initramfs 中运行这些脚本。例如,我应该将脚本放在哪个 initramfs 文件夹中?再次感谢您。 嗯,我不确定将脚本放在哪里,但我不明白您为什么特别想从 initramfs 中执行此操作?你到底想做什么(或松散地也很好)是什么?除非你每次都想这样做,我不明白为什么你会从 initramfs 中获得一些东西。你想要一个只驻留在 initramfs 中的“安装程序”吗?我的意思是,每次使用 initramfs 引导时都会发生同样的事情,并可能导致一些令人讨厌的问题.. 我也不确定 fdisk 等是否可以在常规 initrams 中使用,您可能需要在 initramfs 中添加很多东西才能使其正常工作。 在“initramfs”中这样做的必要性是我们应该在内核,用户,程序使用磁盘之前完成所有分区的更改并挂载它们..(如果磁盘的分区在使用过,由于丢失了一些数据,我们不允许更改它们)并且在所有主要更改之后但在“initramfs”内,并且因为它在系统启动时以及任何程序或用户的功能获取磁盘之前应用更改,因此也需要重新启动发生更改,系统从新分区开始,无需重新启动。我是对的吗我的朋友?! 您需要对多台计算机执行此操作吗?您想在多个系统上一次重新启动部署一个新的 linux 系统吗?您仍然必须将新的 initramfs 放在所有机器上.. 或者您是否希望将其用于自动化未来的系统更改?我觉得应该有一种更直接的方式来以更常规的方式做任何你想做的事情。你可以有另一个 linux 系统,它只在另一个分区等上执行此操作。无论如何,即使你不需要如果您按照您的描述制作一个专门的安装程序,如果您要设置系统,则重新启动,启动会很慢..

以上是关于如何在 CentOs 启动后编辑 initramfs 以添加新分区的主要内容,如果未能解决你的问题,请参考以下文章

u盘启动Ubuntu8.10出现 initramfs然后就没动静了

centos 启动流程及grubinitramfs修复

ubuntu系统启动后停在(initramfs)

修复initramfs文件及忘记root密码的解决之道

centos安装报错Generating: “/run/initramfs/rdsosreport

误将Ubuntu系统文件移动到其他文件夹,现在开机后停留在initramfs界面