从Grub引导Knoppix ISO - 设备/ uri madness

Modified on: Sat, 30 Jun 2018 06:28:30 +0800

我正试图从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

我的问题是bootfrom参数。如果我不包含双斜杠,系统将永远不会启动。它会抱怨它在驱动器上找不到KNOPPIX文件夹(因为它在ISO内部)。

它将搜索驱动器以尝试找到此文件夹 - 在/dev/中从sda1sdz15

  • 如果我在bootfrom参数中包含双斜杠,它将搜索驱动器几次,然后(可能是在挂载/mnt-iso之后)它将胜利地说“是的!我在/dev/sdd5/boot/iso/knoppix.iso”中找到了它
    当然,到目前为止sda1sdh15已经在/dev/中生成,所以这不是一件好事。

  • 如果我使用bootfrom=/dev/sdd5/boot/iso/knoppix.iso,它可以立即使用,但我无法保证它将成为所有系统上的此设备。我可以使用UUID吗?
    我在fedora 15中读到你可以使用root=live:UUID={uuid}:{isofile}但是这个似乎不再是这种情况

  • 如果我只有一个斜杠,为什么它的行为会有所不同?

这非常令人困惑。

修改:进度!

通过以下menuentry,我设法让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

很难分辨出发生了什么,因为TTY很小而且文字没有包裹。

编辑:还有更多进步。在用一根细齿grep完成knoppix repo的一半之后,我决定看看问题是否在内核中,因为很明显系统的其余部分都没有加载。

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} "

真的?谁在地球上使错误信息使用与条件明确分开的变量?

好吧,至少我知道问题的确切线(591),但我看到的唯一方法是一个非常黑客的尝试搞乱这个bash并硬编码让我通过......或者将我的分区设置为sda。当然,我还不知道该怎么做。好极了!所以。如何编辑init

作者:hildred,J V

最佳答案

知道knoppix的initramfs中的init脚本是意大利面条代码。

特别是硬编码只是真正接受/dev/sdxy格式的设备,导致更长的路径名和UUID等问题。

我刚刚创建了一个新的initrd,删除了整个部分并将我的UUID硬编码到其中。当然,这并不容易。 knoppix initrd非常小,不具备blkidUUID=挂载的能力。

我最终找到了带有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"

有问题的分区大小相当独特,所以我怀疑我很快就会发生碰撞。

作者:J V

相关问答

添加新评论