次のように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/
に存在します。sda1
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}
だが、これはもうそうではないようです。スラッシュが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"
問題のパーティションサイズがかなりユニークで、遅かれ早かれクラッシュが起こるかどうか疑問です。