我正在尝试从 Grub 启动 Knoppix ISO,如下所示:
loopback loop /boot/iso/knoppix.iso
linux (loop)/boot/isolinux/linux lang=en bootfrom=/mnt-iso//boot/iso/knoppix.iso
initrd (loop)/boot/isolinux/minirt.gz
Run Code Online (Sandbox Code Playgroud)
我的问题是bootfrom
参数。如果我不包括双斜线系统将永远不会启动。它会抱怨KNOPPIX
在驱动器上找不到文件夹(因为它在 ISO 内)。
它将搜索驱动器以尝试找到此文件夹 - 最终出现在/dev/
from sda1
to 中的驱动器sdz15
。
如果我包括在双斜线bootfrom
参数它将搜索驱动器几次,然后(在安装后可能/mnt-iso
)会得意洋洋状态“耶!我发现它在/dev/sdd5/boot/iso/knoppix.iso
”
当然,这时候sda1
通过sdh15
已经生成/dev/
所以这可以不是什么好事。
如果我使用bootfrom=/dev/sdd5/boot/iso/knoppix.iso
它可以立即工作,但我不能保证它在所有系统上都是这个设备。我可以使用 UUID 吗?
我读到在 Fedora 15 中你可以使用,root=live:UUID={uuid}:{isofile}
但情况似乎不再如此
如果我只有一个斜线,为什么它的行为会有所不同?
这是非常令人困惑的。
编辑:进步!
使用以下菜单项,我设法让 knoppix 声称打开并检查 ISO 文件,却声称它在其中找不到 KNOPPIX 文件夹。
在 iso 映像中找不到 KNOPPIX 目录:
loopback loop /boot/iso/knoppix.iso
linux (loop)/boot/isolinux/linux lang=en bootfrom=UUID=<uuid>/boot/iso/knoppix.iso
initrd (loop)/boot/isolinux/minirt.gz
Run Code Online (Sandbox Code Playgroud)
很难说发生了什么,因为 TTY 很小,而且文本没有换行。
编辑:还有更多进展。在仔细浏览了 knoppix 存储库的一半之后,grep
我决定看看问题是否出在内核中,因为显然系统的其余部分并没有被加载。
strings linux | grep "Cannot find"
- 没有结果
那么 initrd.gz 呢?(请注意,我不知道这里有什么,我在某处听说这是一块实际的内存)
哦,那里有另一个档案......哦,有一个文件系统!这个名为 init 的大文件中有什么?...
if [ ! -r "$BOOTSYS/$knoppix_dir/KNOPPIX" ]; then
message "${CRE}${RED}Cannot find $knoppix_dir dir in ISO image ${MAGENTA}${BOOTDEV}${YELLOW}/${BOOTFILE}${NORMAL} "
Run Code Online (Sandbox Code Playgroud)
真的吗?谁让错误消息使用与条件明确分开的变量?
好吧,至少我知道问题的确切行(591),但我从中看出的唯一方法是尝试弄乱这个 bash 并对其进行硬编码以让我通过......或者设置我的分区对 sda 有问题。当然,我也不知道该怎么做。好极了!所以。我该如何进行编辑init
?
原来 knoppix 的 initramfs 中的 init 脚本是意大利面条代码。
特别是它被硬编码为仅真正接受该格式的设备,/dev/sdxy
从而导致较长路径名和 UUID 等问题。
我刚刚创建了一个新的 initrd,删除了整个部分并将我的 UUID 硬编码到其中。当然,这并不容易。knoppix initrd 非常小,它没有诸如 之类的东西blkid
,也没有通过 挂载的能力UUID=
。
我最终用 fdisk 和 grep 找到了设备文件:
message "${CRE}${RED}This minitrt has been hacked by Jonathan Vollebregt due to the horrific state of the knoppix init. You are about to see a very dirty hack.${NORMAL} "
echo "Hardcoded identifier awaits: Using fdisk and partition details to match device"
echo "grepping '/dev/sd.5.+4096.+57935871.+28965888.+83.+Linux'"
BOOTDEV=`fdisk -lu`
BOOTDEV=`echo "$BOOTDEV" | grep -E "^/dev/sd.5.+4096.+57935871.+28965888.+83.+Linux$"`
BOOTDEV=`echo "$BOOTDEV" | grep -o "^/dev/sd.5"`
if [ -z "$BOOTDEV" ]; then
echo "Well shit..."
sleep 1m
fi
echo "Device file: $BOOTDEV"
echo "mkdir -p /mnt-hack"
mkdir -p "/mnt-hack"
echo "mount -t ext4 -o ro $BOOTDEV /mnt-hack"
mount -t ext4 -o ro "$BOOTDEV" "/mnt-hack"
BOOTFILE="/${BOOTFROM#*/}"
echo "Stripping also reveals: /$BOOTFILE"
echo "mount -t iso9660 -o ro /mnt-hack/$BOOTFILE $BOOTSYS"
mount -t iso9660 -o ro "/mnt-hack/$BOOTFILE" "$BOOTSYS"
echo "knoppix_dir=$knoppix_dir"
echo "BOOTSYS=$BOOTSYS"
Run Code Online (Sandbox Code Playgroud)
所讨论的分区的大小相当独特,所以我怀疑很快就会发生碰撞。
归档时间: |
|
查看次数: |
3872 次 |
最近记录: |