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}지만 이것은더 이상 그렇지 않은 것 같습니다.

  • 슬래시가 하나만 있으면 왜 다르게 동작합니까?

이것은 매우 혼란스럽습니다.

편집하다:진전!

다음 메뉴 항목을 사용하여 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"

문제의 파티션 크기가 상당히 독특해서 조만간 충돌이 일어날지 의문입니다.

관련 정보