GrubでKnoppix ISOブート - デバイス/uriが奇妙になる

GrubでKnoppix ISOブート - デバイス/uriが奇妙になる

次のように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」と意気良く宣言します。
    もちろん、この時点ではsda1すでに作成されています。だからこれは良いことではない。sdh15/dev/

  • 使用するとbootfrom=/dev/sdd5/boot/iso/knoppix.isoすぐに動作しますが、このデバイスを使用するすべてのシステムで動作することを保証することはできません。 UUIDを使用できますか?
    Fedora 15では使えると読んroot=live:UUID={uuid}:{isofile}だが、これはもうそうではないようです。

  • スラッシュが1つしかないと、なぜ異なる動作をしますか?

これはとても混乱しています。

編集する:進展!

次のメニュー項目を使用して、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が小さく、テキストが改行されないので、何が起こっているのかを言うのは難しいです。

編集する:今後さらに進展があります。 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} "

本当に?一体誰がエラーメッセージに条件と明確に区​​別された変数を使用するようにしましたか?

まあ、少なくとも私は問題の正確な行591を知っていますが、私が見た唯一の方法は、このbashを混乱させ、ハードコーディングして私を通過させようとする非常にハッキーな試みです...または私のパーティションで問題が発生するように設定するです。 sdaへ。もちろん何をすべきかわかりません。うん!だから。どうやって編集しますかinit

答え1

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"

問題のパーティションサイズがかなりユニークで、遅かれ早かれクラッシュが起こるかどうか疑問です。

関連情報