AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1094854
Accepted
tai271828
tai271828
Asked: 2018-11-22 07:48:33 +0800 CST2018-11-22 07:48:33 +0800 CST 2018-11-22 07:48:33 +0800 CST

如何修改Ubuntu 18.10 Cosmic Cuttlefish的initrd初始ramdisk

  • 772

我试图提取casper/initrdUbuntu 18.10 的 initrd,得到了意想不到的结果。我没有看到根文件系统和文件,而只是一个名为kernel.

我做了什么

首先,我想知道是否应该解压缩 initrd 或直接提取存档,所以我发出了以下命令:

$ file initrd
initrd: ASCII cpio archive (SVR4 with no CRC)

我得到了什么

根据输出,它应该是一个 cpio 存档,我曾经cpio提取过存档。

$ cpio -id < initrd 
56 blocks
$ ls
initrd  kernel

如果我去看看目录kernel,我得到了

kernel/
└── x86
    └── microcode
        └── AuthenticAMD.bin

2 directories, 1 file

我的期望

应该有文件和文件夹,如init、etc、usr等。例如:

bin  conf  cryptroot  etc  init  lib  lib64  run  sbin  scripts  usr  var
initrd 18.10
  • 1 1 个回答
  • 5431 Views

1 个回答

  • Voted
  1. Best Answer
    tai271828
    2018-11-22T07:48:33+08:002018-11-22T07:48:33+08:00

    我发现 Ubuntu 18.10 的 initrd 的存档方式与以前的版本不同。在以前的版本中,initrd 通常是一个 lzma(或者更早版本的 gzip)压缩的 cpio 存档。18.10 的 initrd 是由多个不同格式的二进制文件组成的存档。

    要深入了解存档,您可能需要binwalk(或其他类似工具。您可以binwalk通过sudo apt install binwalk)。一旦你得到binwalk,发出命令binwalk initrd:

    $ binwalk initrd
    
    DECIMAL       HEXADECIMAL     DESCRIPTION
    --------------------------------------------------------------------------------
    0             0x0             ASCII cpio archive (SVR4 with no CRC), file name: ".", file name length: "0x00000002", file size: "0x00000000"
    112           0x70            ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
    232           0xE8            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
    356           0x164           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
    488           0x1E8           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/AuthenticAMD.bin", file name length: "0x00000026", file size: "0x00006B2A"
    28072         0x6DA8          ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
    28672         0x7000          ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
    28792         0x7078          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
    28916         0x70F4          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
    29048         0x7178          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/.enuineIntel.align.0123456789abc", file name length: "0x00000036", file size: "0x00000000"
    29212         0x721C          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin", file name length: "0x00000026", file size: "0x00180C00"
    1605296       0x187EB0        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
    1605632       0x188000        LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: -1 bytes
    

    您可以看到有两个微码二进制文件和一个 LZMA 压缩数据文件。后者是我们想要的:lzma 压缩的 initrd。

    让我们通过以下方式获得 lzma 压缩的 initrd

    dd if=initrd bs=1605632 跳过=1 | unlzma -c | cpio -id

    您将获得问题中提到的预期文件。编辑要更改的文件。使用以下命令重新打包二进制文件:

    查找 | cpio -H newc -o | lzma -c > initrd.partial.lz

    最后通过以下方式连接微码文件和新的 initrd (initrd.partial.lz)

    dd if=initrd of=initrd.microcode bs=512 count=3136
    cat initrd.microcode initrd.partial.lz > initrd.new
    

    现在重命名initrd.new为 beinitrd并将其放回casper/initrd. 您可以使用新的 initrd 引导您的实时系统。

    我的回答受到这篇文章的启发https://unix.stackexchange.com/questions/163346/why-is-it-that-my-initrd-only-has-one-directory-namely-kernel

    • 9

相关问题

  • 如何为 Ubuntu 获取 gvedit(GVEdit 图形文件编辑器)?

  • 如何使用 Human-Clearlooks 主题在窗口标题栏中获得正常的 Ubuntu 橙色?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve