• 【转载】关于initrd.image的处理


    initrd (boot loader initialized RAM disk)

       Linux2.6 内核支持两种格式的 initrd,一种是 linux2.4 内核那种传统格式的文件系统镜像-image-initrd,它的制作方法同 Linux2.4 内核的 initrd 一样,其核心文件就是 /linuxrc.另外一种格式的 initrd 是 cpio 格式的,这种格式的 initrd 从 linux2.5 起开始引入,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init,本文将这种 initrd 称为 cpio-initrd.尽管 linux2.6 内核对 cpio-initrd和 image-initrd 这两种格式的 initrd 均支持,但对其处理流程有着显著的区别。

    第一种:gzip处理initrd.img

       如果initrd.img是经过用gzip -9进行压缩过的ramdisk文件。直接用#mount initrd.img /mnt -o loop会失败,并报告你指定一个文件类型。 要先将其进行解压缩,然后再mount。具体操作如下:

    cd /boot
    mv initrd.img   initrd.gz
    gunzip initrd.gz /tmp/initrd
    mv /tmp/initrd /tmp/initrd.img
    mount /tmp/initrd.img /mnt/ -o loop

     反过来生成initrd.img过程如下:

    mkcramfs /tmp/ /boot/newinitrd
    gzip -9 /boot/newinitrd
    mv /tmp/newinitrd.gz /tmp/initrd.img

    第二种:cpio处理initrd.img

       2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用cpio解包

    cp /boot/initrd-2.6.15-prep.img initrd.img.gz #必须先将initrd重名为initrd.gz,否则gunzip工具无法识别该文件
    gunzip initrd.img.gz
    mkdir initrd
    mv initrd.img initrd
    cd initrd
    cpio -ivmd < initrd.img  # -v: List the files processed.
                  # -i: Run in copy-in mode, cpio copies files out of an archive or list the archive contents.
                  # -m: Retain previous file modification times when creating files.
                  # -d: Create leading directories where needed.

      通过以上命令就将initrd.img解压了,现在就可以对其进行编辑,完成后使用以下命令重新压制

    find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd-2.6.15-prep.img  # -o: Create the archive.
                                               # -H newc: Use archive format "newc", the "newc" format is The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes.

    (注:-H newc 是必须的,否则内核会认为是ramdisk,而不是initramfs)

    gzip ../initrd.new.img

     

    参考文献:

    [1] http://blog.csdn.net/jiazhen/article/details/4022800

  • 相关阅读:
    LeetCode 382. Linked List Random Node
    LeetCode 398. Random Pick Index
    LeetCode 1002. Find Common Characters
    LeetCode 498. Diagonal Traverse
    LeetCode 825. Friends Of Appropriate Ages
    LeetCode 824. Goat Latin
    LeetCode 896. Monotonic Array
    LeetCode 987. Vertical Order Traversal of a Binary Tree
    LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays
    LeetCode 636. Exclusive Time of Functions
  • 原文地址:https://www.cnblogs.com/cnpirate/p/3461156.html
Copyright © 2020-2023  润新知