尝试创建可启动的Linux发行映像时,我缺少哪些步骤?

用户名

我正在尝试为dd将与硬盘驱动器和闪存介质一起使用的OS创建分发映像(通过Linux的命令)。我已经成功创建了映像,但是无法使其正确启动。我将在下面布置步骤:

  1. 这将创建一个空白文件来包含整个图像:

    dd if=/dev/zero of=/tmp/test.img bs=512 count=1250000
    
  2. 将回送设备文件与映像文件相关联:

    losetup /dev/loop0 /tmp/test.img
    
  3. 在进行操作之前,parted必须定义媒体标签类型:

    parted -s /dev/loop0 mklabel msdos
    
  4. 在映像文件中将第一个分区设为512MB:

    parted -s -a opt /dev/loop0 mkpart primary ext2 '0%' 512MB
    
  5. 将第一个分区设置为“可引导”:

    parted -s /dev/loop0 set 1 boot on
    
  6. 在第一个分区上创建一个Ext2文件系统:

    mkfs.ext2 -b 1024 /dev/loop0p1
    
  7. 在保留上面创建的分区表的同时,安装grub引导程序代码的stage1:

    dd if=/boot/grub/stage1 of=/dev/loop0 bs=446 count=1
    
  8. 在媒体的前512个字节之后安装grub引导程序代码的stage2(跳过stage1和分区表):

    dd if=/boot/grub/stage2 of=/dev/loop0 bs=512 seek=1
    
  9. 将映像文件的第一个分区挂载到挂载点:

    mount /dev/loop0p1 /mnt/image
    
  10. 将所有数据复制到分区并卸载。

  11. dd 图像文件到任何硬盘驱动器或闪存介质。

使用这些步骤,我可以dd将图像文件到硬盘驱动器或闪存驱动器并引导到grub的传统控制台,我可以启动,但仅通过指定的rootkernelinitrd值。如果我尝试通过rootsetup命令安装grub legacy ,则不会出现任何错误,但设备会启动为乱码。运行并fdisk -l产生:

Partition 1 has different physical/logical beginnings (non-Linux?):
phys(0,32,33) logical(0,37,14)
Partition 1 has different physical/logical endings:
phys(62,53,55) logical(336,27,19)

我认为映像文件的创建方式存在问题,因为它负责创建(混乱的)分区表。有人能够使用这些(修改的)步骤来产生可工作的可启动媒体吗?

锯末
  1. 使第一个分区在图像文件内为512MB

    parted -s -a opt /dev/loop0 mkpart primary ext2 '0%' 512MB

在第4步中,您将使用实用程序来修改分区表的第一个条目,该条目位于扇区/块的末尾,该扇区/块还包含MBR的引导程序。

  1. 在保留上面创建的分区表的同时,安装grub引导程序代码的stage1:

    dd if=/boot/grub/stage1 of=/dev/loop0 bs=446 count=1

在第7步中,您尝试将引导加载程序安装到第一个扇区/块中,该扇区/块已经包含一个有效的分区表。
但是dd是一个块传输实用程序,它从源中读取块,并将这些块写入目标。

在这种情况下,目标设备是HDD或SSD,它大概基于512字节(或4096字节)的扇区。对块设备的读或写操作必须针对整个扇区。
尝试仅446个字节的“短”写入时,磁盘控制器(或OS)将强制执行,但附加66(或3650)个零字节以将扇区填充到其适当/完整长度。
块写入根本不打算用于部分修改扇区和保留“未写入部分”。

因此,此写操作将覆盖以前安装的分区表。

一种简单的解决方案是在步骤#4之前执行步骤#7。这将用一个空的分区表写入整个MBR扇区,然后仅编辑一个条目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为我的BeagleBone创建可启动的备份磁盘映像

使用debootstrap创建可启动的Debian映像

我可以删除哪些版本的C ++可再发行组件?

我需要分发哪些版本的可再发行产品?

无法创建可启动的USB来挂载kali linux iso映像?

缺少创建新AS项目并在安装时在我的设备上填充lib文件夹的步骤

从我的启动盘创建映像文件

在做这个项目时我应该遵循哪些步骤?

如何创建其中包含多个ISO映像的可启动USB

如何在Debian中创建可启动的Windows 10映像?

如何使用预装的软件创建Windows 10的可启动映像?

dd - 尝试创建可启动 USB 时无法识别 =/dev/sdc 的操作数

当我想创建一个新的Linux时,是否应该先在可启动的实时USB上擦除以前的Linux?

尝试创建发行包时无法解析模块“ AccessibilityInfo”

如何从可启动的闪存驱动器创建可启动的iso映像?

Linux上启动时启动进程的方法有哪些?

我无法启动到 linux,每次我尝试时都会遇到这些错误并且卡住了

如何修复Dockerfile CMD错误?当我尝试在ubuntu映像上创建一个Apache服务器时

尝试创建Azure映像时无效的VHD路径错误

我的docker swarm创建了一个<none>映像,尝试更新时该映像一直在运行

我收到错误消息:缺少列索引。当我尝试在phpMyAdmin Designer工具中创建表之间的关系时

尝试启动时缺少Angular 2 domsanitizer

尝试在Docker中启动映像

创建可启动USB记忆棒时,版本字符串'GNU / Linux'无效

尝试创建可启动的 USB 记忆棒

帮助!我的笔记本无法启动。“未找到可启动映像”

尝试将其设置为Linux的可安装启动密钥后,无法格式化我的USB磁盘

我可以依靠/ etc / os-release在哪些Linux发行版上?

当我尝试创建可绘制资源文件时,Android Studio给我一个奇怪的错误