我已经构建了一个本土的 Linux 发行版,我可以以非 root 用户的身份制作完整的磁盘映像文件,但有一个例外——安装引导加载程序。我正在使用 syslinux(实际上是 extlinux),要安装它,我必须环回挂载引导分区,这需要 root/sudo 权限。这些命令是从一个 makefile 运行的,变量名应该清楚地表明用什么来替换它们。
sudo losetup -o $(BOOT_FS_PARTITION_OFFSET) $(LOOP_DEVICE) $(IMAGE_FILE_NAME)
sudo mount $(LOOP_DEVICE) $(LOOP_MOUNT_POINT)
sudo $(EXTLINUX) -S $(DISK_SECTORS) -H $(DISK_HEADS) -i $(LOOP_MOUNT_POINT)
sudo umount $(LOOP_MOUNT_POINT)
sudo losetup -d $(LOOP_DEVICE)
Run Code Online (Sandbox Code Playgroud)
有没有办法在不需要root权限的情况下将syslinux或extlinux写入磁盘映像文件?
我正在调整一个 Debian 实时系统(使用实时构建构建),我希望它从 syslinux 直接引导到系统中——没有菜单,没有超时。根据syslinux 文档,超时值为 0 表示禁用超时,即。如果没有用户干预,它根本不会启动,这与我想要的相反。
在我确实需要调整内核行的极少数情况下,能够按住一个键可能会很好,但这不是必需的。真的,我只想立即启动。我如何得到它?
当前的 syslinux 配置是这样的:
syslinux.cfg :
include menu.cfg
default vesamenu.c32
prompt 0
timeout 0
Run Code Online (Sandbox Code Playgroud)
菜单.cfg :
menu hshift 0
menu width 82
menu title Boot menu
include stdmenu.cfg
include live.cfg
include install.cfg
menu end
Run Code Online (Sandbox Code Playgroud)
标准菜单.cfg:
menu background splash.png
menu color title * #FFFFFFFF *
menu color border * #00000000 #00000000 none
menu color sel * #ffffffff #76a1d0ff *
menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *
menu color …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Clonezilla live USB 磁盘来重新映像系统。根据http://clonezilla.org/fine-print-live-doc.php?path=clonezilla-live/doc/99_Misc/00_live-boot-parameters.doc 中的解释,我的磁盘提示我包含菜单在syslinux.cfg
除了将在UEFI机器的最新之外的所有系统(以及已在BIOS配置为从UEFI设备第一次开机),在那里我提示的grub.cfg
菜单。
鉴于我对syslinux.cfg
菜单进行了大量自定义,我想修改grub.cfg
文件以仅自动链加载到 syslinux,以便syslinux.cfg
在所有情况下都显示菜单。
这可能吗?如何?
磁盘上有 GRUB2,我的理解(从 Internet 上环顾四周)是可能的,但我还不明白如何。任何帮助表示赞赏。
编辑:
我想澄清一下,系统使用 grub 启动,没有问题选择grub.cfg
默认情况下由 Conezilla 下载提供的菜单中的任何选项,但我想做的是显示 syslinux 的菜单(在syslinux.cfg
)而不是grub.cfg
第二次编辑中的默认菜单,我是如何做到的:
最后,建议的解决方案对我不起作用,所以我只是让“EFI\boot”文件夹“不可用”(重命名);这样 UEFI 启动失败,系统从 syslinux 启动,就像在旧系统上一样:没有修改 BIOS,没有新菜单,没有链加载......
很长一段时间以来,我一直试图在Minimal Linux Live的 64 位版本中添加 UEFI 支持,但不幸的是没有取得太大成功。如下图所示,每次尝试通过 UEFI 启动时都会出现严重错误。
这是我为了达到这一点所做的:
efi64/efi/syslinux.efi
到\EFI\BOOT\BOOTX64.EFI
.efi64/com32/elflink/ldlinux/ldlinux.e64
到\EFI\BOOT\LDLINUX.E64
.\EFI\BOOT\BOOTX64.EFI
为\EFI\BOOT\BOOTX641.EFI
以“中断”引导过程并回退到 UEFI shell。edit
,然后导航到该\EFI\BOOT
文件夹。BOOTX641.EFI
,最终得到了您可以看到的相同错误。所以,我可以得出结论,我的 EFI 存根正在执行,但在执行过程中出现了一些问题,此时我不知道出了什么问题。
我检查了System Rescue CD的 ISO 映像结构,我知道它支持 UEFI,我注意到以下几点:
\efi\boot\bootx64.efi
.\efi\boot\bootx64.efi
是724KB,而Syslinux 6.03中对应的文件efi64/efi/syslinux.efi
是~200KB,所以这绝对不是同一个文件。“--”在正常的 syslinux 配置中有什么作用?在那之后我曾经看到“安静”,但不知道为什么。
这是来自 Ubuntu 12.04 的示例:
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append vga=788 initrd=ubuntu-installer/amd64/initrd.gz -- quiet
Run Code Online (Sandbox Code Playgroud) 由于我的设置的当前状态,我想让 Syslinux 作为我的主要引导加载程序来链式加载 GRUB2。谷歌提供了大量关于如何从 GRUB2 链式加载 Syslinux 的信息,但对于我正在寻找的反向场景没有什么真正有用的信息。
我有一个托管 FreeBSD、CentOS 和 Scientific Linux 镜像的服务器。它包括 .iso 文件。
是否可以使用 pxelinux 通过网络启动此 ISO?我必须改用 gPXE 或 iPXE 吗?
我已经看到一些迹象表明这是可能的,但我不确定我是否信任该论坛帖子,因为我还没有让它起作用。
我有以下配置:
LABEL freebsd-install-net
MENU LABEL Netboot FreeBSD-8.2-RELEASE-amd64-disc1.iso
KERNEL memdisk
APPEND iso raw initrd=http://192.168.1.100/freebsd82-disc1.iso
Run Code Online (Sandbox Code Playgroud)
但是 pxelinux 告诉我以下内容:
Loading memdisk....
Could not find ramdisk image: http://192.168.1.100/freebsd82-disc1.iso
Run Code Online (Sandbox Code Playgroud) 我正在使用 Syslinux 作为引导程序运行 Archlinux。现在内核映像和 initramfs 都在/boot
,所有 Syslinux 的东西(配置文件和模块)都在/boot/syslinux
.
我打算将 Syslinux 目录移动到不同的分区,但我不知道如何修改配置以便从不同的分区加载内核。
这是我提到的 Arch 的配置部分,我怎么能告诉它在不同的分区中查找所有内容?
LABEL arch
MENU LABEL Arch Linux
LINUX /boot/vmlinuz-linux
APPEND initrd=/boot/initramfs-linux.img root=/dev/disk/by-label/RootFS rootflags=,relatime,user_xattr,barrier=1,data=ordered rootfstype=ext4 ro
Run Code Online (Sandbox Code Playgroud) 完全从 RAM 运行已在各种发行版上完成,例如Slax、DamnSmallLinux和较新的 Ubuntu 版本,并且由于我有 8GB,因此我可以完全从 RAM 运行许多发行版似乎是合理的(只要我选择一个有能力的发行版)。
我想用OpenELEC
(或任何发行版)来做这件事,但更复杂的是:我是一名.NET
开发人员,工作并且主要使用 Windows,这意味着 NTFS 和 FAT32 是我的首选文件系统。直到有一天 Windows 可以本地读取/写入 ext 分区,这不会改变。Ext2fck 甚至不会安装在 Windows 8 中,因此无法让我相信在日常操作中使用不可读格式的驱动器和分区的“优点”。
还有之类的东西syslinux
,vmlinuz
,extlinux
等,它们可以加载.iso
文件到RAM,有效引导加载它们。为了锦上添花,Windows 的引导加载程序将允许我将这些作为选项添加到本机 Windows 引导菜单中,我为 UBCD 5.11 所做的,甚至可以用于虚拟文件系统,例如.vhd
,等。
我想将这三者合二为一。我想安装一个已安装的 ext2/ext3/ext4 分区,在这种情况下是安装 OpenELEC,将其压缩为 .iso,并在我的启动菜单中创建一个条目,该条目将直接执行此操作,或将其传递给 syslinux 或像那样将执行以下操作:
将 .iso 作为 ext2/3/4 分区完全提取到 RAM 中,并在 RAM 中启动到该操作系统。然后,我将使用 ntfs-3g 为 OpenELEC 安装的 /STORAGE 部分挂载我的 NTFS 硬盘驱动器。
然后,作为奖励,在退出时,我会让系统将自身重新压缩为 .iso,如果成功,则替换初始的 .iso,从而在启动时保留我的更改(前提是关闭成功)。它也不必从内存中复制自己:它可以将它想要跟踪的任何文件/更改(如果有些不可用)复制回它启动的驱动器(如果存在),然后将其压缩回 .iso .
我正在尝试按照以下步骤使用Netboot Live System安装 Arch :
在最后一步中,我使用了以下内容:
LABEL archnetboot
MENU LABEL Arch Linux Netboot Environment
KERNEL /ipxe.lkrn
Run Code Online (Sandbox Code Playgroud)
但是当笔记本启动时,它说:
SYSLINUX 6.02 EDD Copyright (C) 1994-2013 H. Peter Anvin et al
Loading /ipxe.lkrn... ok
Booting kernel failed: Invalid argument
boot:
Run Code Online (Sandbox Code Playgroud)
所以看起来我需要传递一些网络内核参数或类似的东西,因为我用 Qemu 尝试了图像并且它工作正常。
笔记本电脑通过其以太网端口连接到网络,我在 BIOS 中启用了网络启动,尽管据我所知,当您尝试从 iPXE 启动时它无关紧要。
有任何想法吗?
我有一个原始的 Windows 7 Professional x86 iso 文件,直接来自 Microsoft。我想从这个 ISO 制作一个可启动的 USB。一些消息来源表明我只是将 iso 添加到 USB 中,但我不知道这应该如何工作。ISO 的前 32768 个字节(在 ISO 9660 媒体上保留为系统区域,用于 MBR 的 fx)都是零,因此没有 MBR 或任何可供 BIOS 读取的内容。
所以据我所知,一种方法是在这个系统区域中添加一个 MBR,这样 ISO 就可以被添加到 USB 或写入光学媒体,并且可以从两者启动。
我认为工具 isohybrid 应该可以做到这一点。我不知道它是如何工作的,所以我不知道它是否应该只适用于所有可启动(即如果写入光学媒体可启动)ISO 9660 文件。或者它只适用于某些特定/熟悉的 iso 文件?
至少我不能让它与我的 Windows 7 iso 一起工作。我收到以下错误:
$ isohybrid win7.iso
isohybrid: win7.iso: unexpected boot catalogue parameters
Run Code Online (Sandbox Code Playgroud) 文件系统可以配置为跨越整个磁盘,省略任何分区表。请注意,执行此操作的命令故意不使用/dev/sda1
原始的、未分区的设备。
mkfs.btrfs /dev/sda
Run Code Online (Sandbox Code Playgroud)
Arch Linux Wiki 中关于 btrfs 的文章中提到了这个想法。我在使用 btrfs 文件系统作为唯一存储的虚拟机中尝试了这一点。它甚至可以按照wiki 中的说明使用 grub 启动。ext3、ext4 和 jfs 也以这种方式工作。我只测试了这些,但大多数文件系统都会将第一个块放置一个偏移量,从而为引导记录留出足够的空间。
现在我想使用 syslinux 而不是 grub。前面提到的 wiki已经指出,这需要专门放置ldlinux.sys
,但不包括解决此问题的说明。我高度怀疑通常的mbr.bin
文件也不合适,因为它通常负责读取分区表并找到活动的可引导分区。现在,找不到分区。
有人有在无分区磁盘上使用 syslinux 的经验吗?无分区磁盘可以使用 syslinux 启动吗?
我正在尝试将目前通过 BIOS 启动的现有自定义 USB ISO 安装程序映像转换为通过 UEFI 启动的映像。我使用mkisofs
和isohybrid
制作 ISO,它通过 ISOLINUX 启动。我知道我应该使用这些-eltorito-alt-boot -eltorito-platform 0xEF -eltorito-boot isolinux/efiboot.img
选项来启用 UEFI 启动,但是在我的一生中,我在 Google 上找不到任何页面告诉我从哪里获取难以捉摸的efiboot.img
源文件。每个人都提到它,但每个人都假设你已经拥有它。这是如何构建或获得的?该man
页面mkisofs
没有帮助。我必须使用xorriso
吗?
仅供参考,我试图通过 libvirt/kvm/qemu/virt-manager 启动它,但最终它必须在真正的硬件上启动。开发环境是 openSUSE Leap 42.1。无需支持 BIOS 或多平台。我宁愿不修改太多现有的构建代码,但至少有一条评论(@mikeserv)表明 ISO 是完全错误的机制(意味着这是一个粗暴的黑客,完全没有必要)。但这将涉及完全改造构建,这将花费很多时间。
将不胜感激地收到有关此主题的教程或其他编写良好的页面的链接。我已经查看了 Syslinux 网站和 Rod Smith 的页面,并且在查看其他所有内容时完全筋疲力尽。
syslinux ×13
boot ×3
boot-loader ×3
iso ×3
arch-linux ×2
grub2 ×2
linux ×2
netboot ×2
pxe ×2
uefi ×2
btrfs ×1
clonezilla ×1
debian ×1
disk-image ×1
freebsd ×1
linux-kernel ×1
live-usb ×1
mbr ×1
mkisofs ×1
opensuse ×1
partition ×1
ram ×1
windows ×1