# problem mit selbst erstellter livecd

## abcdeef

hi, 

ich habe (ohne catalyst) eine livecd gebastelt; habe mich an die anleitung auf gentoo-wiki gehalten. nun habe ich folgendes problem: 

"kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)"

----------

## blice

du musst dem kernel nen korrekten Root angeben , ich habe mir zwar noch keine livecd gebastelt, aber hatte dieselbe meldung bei meinem kernel-umbau 

vmlinuz-xxxxx splash=silent vga=ask root=/dev/ram0 real_root=/....    mit initrd

vmlinuz-xxxxx splash=silent vga=ask root=...      ohne initrd

PS: Ein sehr weiser Mann hat mir mal gesagt  - 

 "Basteln ist , wenn man nicht weiß was man tut"

----------

## abcdeef

die bootparameter habe ich aus der howto von gentoo-wiki übernommen

http://de.gentoo-wiki.com/Eigene_LiveCD_bauen_ohne_catalyst

----------

## pablo_supertux

"Unable to mount root fs on unknown-block(1,0)" hast du im Kernel die Treiber des Dateisystem fest kompiliert oder als Modul?

----------

## abcdeef

fest

----------

## doedel

ich hatte das problem mit der initramfs. wie blice geschrieben hat, ohne initramfs mal angeben.

----------

## abcdeef

hier mal meine grub konfiguration:

```
default 0

timeout 5

title=Gentoo Linux

  root (cd)

  kernel (cd)/boot/vmlinuz video=vesafb:1024x768-32 root=/dev/ram0 rw init=/linuxrc cdroot

  #initrd (cd)/boot/initrd

```

der fehler tritt mit und ohne initrd-zeile auf.

----------

## pablo_supertux

wird das linuxrc Skript von der initrd Datei vollständig ausgeführt? Vielleicht hast du da einen Fehler (Tippfehler, etwa?)

----------

## abcdeef

 *pablo_supertux wrote:*   

> wird das linuxrc Skript von der initrd Datei vollständig ausgeführt?

 

wie finde ich das heraus;

wird das linuxrc script nicht nur ausgeführt wenn das initrd benutzt wird?

----------

## pablo_supertux

 *abcdeef wrote:*   

>  *pablo_supertux wrote:*   wird das linuxrc Skript von der initrd Datei vollständig ausgeführt? 
> 
> wie finde ich das heraus;
> 
> 

 

mit einem "echo debug blablabla" und vor dem pivot_root ein /bin/sh, damit du die Ausgaben sehen kannst und merken kannst, ob das Skript richtig läuft. Ich hab genauso getestet, als ich meine LiveDVD erstellt habe. Poste doch mal dein linuxrc

 *abcdeef wrote:*   

> 
> 
> wird das linuxrc script nicht nur ausgeführt wenn das initrd benutzt wird?

 

ja, benutze das initrd Image

edit: mir ist grad eingefallen, dass ich dasselbe Problem hatte, als ich zum ersten Mal meine LiveCD getestet habe. Das Problem war, dass ich vergessen hatte, squashfs fest im Kernel zu kompilieren.  :Mad: 

----------

## abcdeef

```
#!/bin/sh

export PATH=/bin

# Speichern der Kernel CMDLINE

mount -t proc none /proc

CMDLINE=`cat /proc/cmdline`

umount /proc

# CD Laufwerk mounten

CDROM=""

for x in hda hdb hdc hdd cdroms/cdrom0 cdroms/cdrom1 cdroms/cdrom2 cdroms/cdrom3

  do

  mount -t iso9660 -r /dev/${x} /cdrom > /dev/null 2>&1

  if [ "$?" = "0" ]

      then

      CDROM="${x}"

      break

  fi

done

                # CD-Laufwerk nicht gefunden

if [ "${CDROM}" == "" ]

    then

    exec /bin/sh

    exit

fi

echo 1

                    # Wurzelverzeichnis mounten und Verzeichnisse mit Lese- und Schreibzugriff erstellen

mount -t squashfs -o loop /cdrom/files/source.img /new > /dev/null 2>&1

mount -t tmpfs -o size=8m none /new/var > /dev/null 2>&1

mount -t tmpfs -o size=4m none /new/etc > /dev/null 2>&1

mount -t tmpfs -o size=32m none /new/tmp > /dev/null 2>&1

mount -t tmpfs -o size=32m none /new/root > /dev/null 2>&1

cd /new/var && tar xpf /cdrom/files/var.tar > /dev/null 2>&1

cd /new/etc && tar xpf /cdrom/files/etc.tar > /dev/null 2>&1

cd /new/root && tar xpf /cdrom/files/root.tar > /dev/null 2>&1

echo 2

            # Wurzelverzeichnis umsetzen und den eigentlichen init-Vorgang starten

cd /new

pivot_root . newroot

exec chroot . /bin/sh <<- EOF >dev/console 2>&1

exec /sbin/init ${CMDLINE}

echo 3

EOF

```

----------

## abcdeef

squashfs ist fest drin

----------

## pablo_supertux

also, die linuxrc sieht gut aus. Hast du wirklich alle "hda hdb hdc hdd cdroms/cdrom0 cdroms/cdrom1 cdroms/cdrom2 cdroms/cdrom3" devices da?

An welcher Stelle kommt denn die Meldung "kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)"? Vor, nach oder während des linuxrc Skriptes?

Das echo 3 würde ich da wegmachen, denn sonst kommt als Parameter in die chroot  :Smile: 

----------

## abcdeef

die "echo" sehe ich garnicht

----------

## pablo_supertux

dann wird wahrscheinlich das initrd image gar nicht geladen. Hast du initrd im Kernel fest drin? Wie groß ist dein Image und wie viel unterstützt deinen Kernel? Welches Dateisystem hat dein initrd Image? Dieses Dateisystem muss ebenfalls fest im Kernel sein.

----------

## abcdeef

 *pablo_supertux wrote:*   

> Hast du initrd im Kernel fest drin? Wie groß ist dein Image und wie viel unterstützt deinen Kernel? Welches Dateisystem hat dein initrd Image? Dieses Dateisystem muss ebenfalls fest im Kernel sein.

 

ja,8mb,viel,ext2,ist

.config

----------

## pablo_supertux

Kannst du vielleicht ein Bild posten, so dass ich sehen kann, wann sie genau auftritt?

----------

## abcdeef

screenshot

----------

## pablo_supertux

ok, das initrd Image scheint nicht, geladen zu werden. Ich tippe darauf, dass das DAteisystem der initrd ncht im Kernel festkompiliert ist. Auf dem Screenshot ist da auch eine XFS Meldungen. Wo benutzt du XFS?

Ich habe selbst nach diesem Wiki-Beitrag meine LiveCD gebaut, die Anleitung funktioniert.

----------

## abcdeef

 *pablo_supertux wrote:*   

> ok, das initrd Image scheint nicht, geladen zu werden. Ich tippe darauf, dass das DAteisystem der initrd ncht im Kernel festkompiliert ist. Auf dem Screenshot ist da auch eine XFS Meldungen. Wo benutzt du XFS?
> 
> Ich habe selbst nach diesem Wiki-Beitrag meine LiveCD gebaut, die Anleitung funktioniert.

 

mit diesen script erstelle ich das initrd:

```
#!/bin/sh

rm -rf /boot/initrd

touch /boot/initrd

dd if=/dev/zero of=/boot/initrd bs=1024k count=8

losetup /dev/loop0 /boot/initrd

mke2fs /dev/loop0

rm -rf /mnt/initrd

mkdir /mnt/initrd

mount /dev/loop0 /mnt/initrd

cd /mnt/initrd

mkdir etc dev lib bin proc new cdrom

touch linuxrc

chmod +x linuxrc

touch etc/mtab

touch etc/fstab

for x in sh ls cat mount umount mkdir chroot tar

  do

  cp -v /bin/${x} /mnt/initrd/bin

done

cp -v /sbin/pivot_root /mnt/initrd/bin

cd /lib

for x in sh ls cat mount umount mkdir chroot tar

  do

  cp -v `ldd /bin/${x}|egrep lib|cut -d "=" -f1| cut -d " " -f1` /mnt/initrd/lib

done

cp -v `ldd /sbin/pivot_root|egrep lib|cut -d "=" -f1| cut -d " " -f1` /mnt/initrd/lib

mknod /mnt/initrd/dev/console c 5 1

mknod /mnt/initrd/dev/null c 1 3

mknod /mnt/initrd/dev/hda b 3 0

mknod /mnt/initrd/dev/hdb b 3 64

mknod /mnt/initrd/dev/hdc b 22 0

mknod /mnt/initrd/dev/hdd b 22 64

mknod /mnt/initrd/dev/tty c 4 0

mknod /mnt/initrd/dev/loop0 b 7 0

umount /mnt/initrd

```

----------

## abcdeef

und die config vom kernel ist weiter oben zu sehen

----------

## pablo_supertux

das ist ganz seltsam... alles scheint im Ordnung zu sein. Dein initrd Image wird als ext2 formatiert und ext2 hast du fest im Kernel, das ist mir alles ein Rätsel, muss ich sagen.

----------

## abcdeef

@pablo_supertux kann ich deine kernel-config (der livecd) bekommen?

----------

## pablo_supertux

ja, aber ich habe SCSI Support im Kernel. DIe config hat keine Module (oder wenige), sondern fast alles im kernel fest.

config sys-kernel/gentoo-sources-2.6.16-r3

----------

## abcdeef

das initrd ist das problem; gibt es eine möglichkeit es es zu überspringen?

----------

## abcdeef

hab noch n problem: 

das linuxrc-script aus dem initrd wird ausgeführt; aber mit folgenden fehler: "SQUASHFS error: Major/Minos mismatch, filesystem is (3:0), I support (1 : x) or (2 : <= 1)"

----------

## pablo_supertux

Der Fehler sagt doch, dass die Versionen von squashfs nicht passen. 

Aber das Problem scheint die squashfs Datei mit dem System, die kannst du wahrscheinlich nicht mounten. Vergewissere dich, dass die Version im Kernel und die Version der Filesystems (das von mksquashfs erstellt wird) kompatibel ist. Vielleicht hilft dir "mksquashfs -2.0 ..."

Du kannst auch so testen, ob die squashfs Datei das Problem ist: Wenn Grub startet, dann drücke e und editiere die kernel Zeile. Am ende steht

init=/linuxrc cdroot. Ändere in init=/bin/sh, dann startet das /bin/sh vom initrd Image statt linuxrc. Teste ob du mit "mount -t squashfs -o loop /cdrom/files/source.img /new" die squashfs Datei mounten kannst.

----------

