问题标签 [initrd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - cpio 在重新打包 initrd.lz 时无法正常工作
如果我解压缩initrd.lz
然后重新打包而不进行任何更改,则将其替换为 Casper 目录中用于 live CD 的新 initrd.lz。它是结构化的。在打包 initrd 时,我收到如下警告消息:
cpio:./usr/share/plymouth/themes/text.plymouth:无法统计:没有这样的文件或目录。
最后我的问题是,打包和解包的实用程序是什么initrd.lz
?
谢谢。
linux-kernel - 在 Yocto 生成的 initramfs 映像中访问 initramfs-tools 功能
我想加载一些内核模块,并在 Plymouth 启动之前激活帧缓冲区访问。这通常使用/etc/initramfs-tools
随initramfs-tools
. 但是,当使用 Yocto 构建 initramfs 映像时,没有这样的目录可用。这意味着,据我所知,无论initramfs-tools
加载模块和初始化帧缓冲区,都必须在图像中手动完成。initramfs
notro 在https://github.com/notro/fbtft/wiki/Bootsplash中非常细致地解释了我想要完成的任务 。我想做与下面所做的等效的事情:
- 访问
/etc/initramfs-tools/scripts/init-top/spi
和modprobe
一个模块。 - 访问
/etc/initramfs-tools/modules
并列出要由模块守护进程启动的更多模块 - 启用通过完成的帧缓冲区
echo "export FRAMEBUFFER=/dev/fb1" | sudo tee /etc/initramfs-tools/conf.d/fb1
通过我的研究,我可以找到initramfs-framework-base 包,其中包含一些 initramfs 引导使用的脚本。我认为这可能是一个很好的起点。但是,我不知道如何明确告诉 initramfs 做我想要完成的事情(上面的任务)。
注意:目前,我的 initramfs 映像由以下配方生成:
另请注意:我正在使用带有 U-boot 引导加载程序的基于 ARMv6 的机器。编译原始文件initramfs-tools
(最初是为 Debian 开发的)生成 0 字节图像。我猜这是它的兼容性问题。所以我不得不求助于使用 yocto 的内部工具生成 initramfs。
任何帮助表示赞赏。提前致谢。
docker - 来自 HUB 的 docker-save 没有运行 dockerd
作为 SystemImager 开发人员,我想使用 docker 管理图像(而不是使用图像服务器上的简单目录)。在映像服务器上,我将运行 docker,我可以启动容器来更新内容(yum 更新、更改配置,...)并跟踪更改并能够恢复更改。
在节点上部署物理映像时,我使用部署代码 PXE 引导特定的 initramfs。现在,它使用 rsync,或 scp 或 ssh 隧道与 rsync 或 nfs 与 rsync 从图像服务器检索和安装图像。
这种方法的问题是目录没有版本控制,如果图像更改错误,我无法恢复到以前的图像。
我想使用(使用 initramfs)相当于: docker --server imageserver --image mynodeimage:1.0 save | tar x -C /sysroot
问题是它需要安全的 tls cnx,但我无法重建 imager initramfs 以包含它,并且拥有不安全的 docker 守护进程也不是一个好的解决方案。(我成功地使用不安全的 dockerd 测试了该解决方案,但是设置起来很复杂并且与 prod 环境不兼容)
然后,有没有办法在我的图像服务器(dockerd 运行的地方)上设置一个公共 docker 集线器,可以从没有运行 dockerd 的 initramfs 动态下载图像(tarball 到 stdout)有两倍的空间来做 docker pull + docker save |tar x -C ...
我见过 curl 的方法,但我需要在本地存储 blob,然后重新组合结果。这是不可能的,因为它需要两倍的空间(一个用于存储 blob,另一个用于提取结果)。也许有一种解决方案可以按正确的顺序一个接一个地提取 blob?
或者:是否有任何替代 docker 的技术可以允许在图像服务器上的容器(带有版本控制)中维护图像,并在不使用暂存目录的情况下从 initramfs 极简环境中检索它们?
linux - 如何通过 grub2 以与发行版无关的方式从作为根设备加载的 cpio 存档中获取 initrd?
我正在虚拟机中构建 LFS(Linux From Scratch)系统,到目前为止,我已经设法获得了一个可行的桌面系统,从已知设备启动,在我的例子中是 /dev/sda1。我现在正在尝试制作一个从 ISO 映像引导的实时系统。而不是使用我已经建立的 /dev/sr0 作为根是可能的(而且,因为它更有可能从 USB 记忆棒中使用而不是实际的 CD-ROM,所以太不灵活了)我已经下定决心在将其引导到 initrd 根目录时。这个想法是使用它作为系统的根而不是用它作为临时根来加载“真正的”根,并且由于它已经在内存中,它省去了设置 tmpfs 根的麻烦,复制所有文件,并切换到它。
我之前一直在尝试使用 squashfs 图像,因为我看到 Ubuntu 似乎使用它并且具有我需要的东西:一个小型根,加载速度更快,使用更少的内存,并且速度很快(xz 是 SSLLOOWW 提取和gzip 加载缓慢)。起初我无法启动它,所以我切换到基于 cpio 的 initrd。由于存档中的文件丢失导致一些初始麻烦后,我确实设法启动了它。
我暂时(大约一个月前)将其放在一边,以便在系统上执行其他任务。我丢失了原始的 GRUB2 设置和内核配置,所以又重新做了一次,但我遇到了障碍。我希望这里的人可能知道我错过了什么。
当我启动时,我从来没有看到任何有关加载 initrd 文件的消息,它直接进入内核的加载、解压缩和启动。这最终导致内核恐慌并显示消息
没有显示分区,然后是“内核恐慌”消息,只是重复第一行。如果我使用“rootfstype=ramfs”,我会得到:
本质上,它将 EMPTY ramfs 文件系统挂载为 root,因此挂载 devtmpfs 失败,因为 /dev 条目不存在。但可以肯定的是,我以前使用过该引导选项。
这是我的 GRUB 2 配置:
是的,/boot/kernel/initrd/目录项存在,linux是内核(编译内核产生的bzimage文件),root.cpio.gz是我压缩的initrd根cpio归档。
这是我内核的 .config 文件(抱歉不能粘贴到这里)。
如果需要更多信息,请随时询问。那个你。
linux-kernel - initramfs 没有模块
我有 proxmox 容器。在容器Debian 8中托管Debian 9。我制作了要迁移到 VMWare 的图像。
现在我需要构建我的 initranfs。但是如果我运行 update-initranfs -u -v -k 4.9.0-0.bpo.8-amd64
它处理但不复制模块。尝试在日志中复制“复制模块目录内核/驱动程序/ata”,没有错误,但没有复制模块。
并且没有我需要的模块
我的配置
我试过MODULES=list
了lsmod | awk '{print $1}' > /etc/initramfs-tools/modules
为什么 initramfs 没有模块?
debian - 使用其他配置文件生成自定义 initramfs 映像
我想为 Debian Stretch 创建一个 initramfs 映像,其中包括其他配置文件(比如/etc/a.conf
)。
mkinitramfs -o initrd.img
为了使图像包含此类文件,我必须在运行之前做什么?
embedded-linux - QEMU 网络和 getty 问题
我正在尝试使用 qemu 为基于 ARM 的虚拟机创建一个极简设置。我正在按照以下指南进行操作。
我正在使用以下命令运行 QEMU
我是,由于某种原因无法看到登录提示。这些是引导消息
在 buildroot 中,我尝试了 getty 波特率的各种配置,但无济于事。请给我一些关于到底出了什么问题的指示。目前我已经尝试使用 vt100、内核选择的波特率以及 vt100、115200,但都失败了
更新:到目前为止,在对命令行参数稍作修改后,我已经能够看到登录提示,如下所示:
此外,我无法使用 ssh 从我的 debian 主机登录 VM(从以下日志消息中可以看到,已在 buildroot 中选择了 ssh(在我的最新修改后出现)
我通过修改 VM 上的 sshd_config 文件启用了 root 登录。我也试过ssh root@localhost:2222
了,ssh root@192.168.160.9
但它就消失了(没有说连接是否被拒绝或任何东西)。我有点迷失在这里。
linux-kernel - 有没有办法将 kexec 功能添加到busybox initrd?
我的板上有 3 MB 的 SPI 闪存,我可以将 bzImage、busybox initrd 和 coreboot ROM 打包到这个 SPI 闪存中。我还能够启动到 shell,全部使用 ROM kernel-as-bootloader。
我在 USB 设备上有更大的内核。我还能够检测到 USB 并安装它。但问题是busybox 似乎没有kexec 实用程序。我不能使用任何其他 initrd 包,因为由于内存限制,我的 cpio(未压缩)大小不应超过 1.4 MB。U-root具有 kexec 支持,但最小图像大小很容易达到 3MB,或者至少,我找不到构建小于该大小的方法。
因此,有没有办法将 kexec 支持添加到busybox(编译静态二进制文件并复制到 initrd?)或任何其他可以满足 1.4MB 大小需求的 initrd 包?
编辑
这篇文章表明busybox中可能有kexec支持,但我找不到它的任何痕迹。事实上,将 kexec-tools 添加到busybox 的请求是在十多年前完成的。但是当我在busybox中执行grep时,我没有看到它的痕迹。
virtual-machine - 有没有办法使用 virt-manager 从内核和 initrd 创建 VM?
到目前为止,我使用 QEMU\KVM 并且能够从内核映像和 initrd 文件启动 VM(跳过引导加载程序)。我想开始使用 virt-manager 来管理我的虚拟机,但看起来没有选项可以再使用这种方法,只能从 ISO 映像等创建虚拟机。
有什么办法让它工作还是我误解了什么?