Diskless Booting - initrd zum rootfs ausbauen

  • Hallo openSUSE Community!


    Dies ist mein erster Beitrag hier und ich hoffe ihr könnt mir helfen.


    Zur Idee:
    Ich administriere einen Cluster und versuche diesen auf diskless umzustellen. Dafür habe ich einen Knoten rausgenommen und dort openSUSE 11.4 installiert. Die Knoten unterstützen alle die PXE. Auf dem Server habe ich einen tftpd und dhcpd, die beide korrekt laufen.
    Auf dem Knoten mit openSUSE will ich die initrd ausbauen, d.h. ich nehme die vorhandene initrd und packe den Inhalt in ein neues ext2-Image und fülle dieses Image mit dem rootfs auf, sodass ich ein komplettes Image habe, welches ich vom Server an die Knoten verteilen kann.


    Zur Umsetzung:
    Auf dem Knoten habe ich mein "Wunschsystem" installiert. Fuer den ersten Versuch stelle ich die Verzeichnisse /usr, /home und /opt über den nfsd auf dem Server zur Verfügung.
    Die initrd entpacke ich hiermit:

    Code
    cat «initrd-file» | gzip -d | cpio -i


    Dann wird ein neues ext2-Image (zunaechst 32000KB) erstellt:

    Code
    dd if=/dev/zero of=./initrd.img bs=1024 count=32000
    mke2fs -F -m 0 -b 1024 ./initrd.img


    Nun kopiere ich die gesamte initrd in die gemountete Image-Datei. Wenn ich nun die Imagedatei auf den Server kopiere und meinen Knoten ueber Netzwerk booten lasse, kommt folgende Fehlermeldung:



    wobei die originale initrd folgendes anzeigt:


    Code
    -------------snip----------------
    [0.000000] RAMDISK: 7f550000 - 7fffd000
    ----------------------------------
    
    
    -------------snip----------------
    [4.060522] Unpacking initramfs...
    [4.189943] Freeing initrd memory: 10932k freed
    ----------------------------------


    ... und dann wird natuerlich versucht auf die HDD zuzugreifen, die nicht vorhanden ist.


    In der pxeconfig steht folgendes:

    Code
    DEFAULT linux
    PROMPT 1
    TIMEOUT 10
    KERNEL vmlinuz-2.6.37.1-1.2-desktop
    APPEND vga=normal ip=dhcp console=tty0 console=ttyS1,115200n8 ramdisk=32000 initrd=./initrd root=/dev/ram rw



    Zunaechst muss das ext2-Problem geloest werden... aber ich habe z.Z. keinen Plan warum das ext2-Image nicht angenommen wird. Es schein so, als wuerde das ext2fs gar nicht erkannt werden...


    Normal sollte so etwas kommen (habe ich gegooglt):

    Code
    [    3.611823] Trying to unpack rootfs image as initramfs...
     [    3.676497] rootfs image is not initramfs (junk in compressed archive); looks like an initrd
     [    3.798428] Freeing initrd memory: 32768k freed
    
    
    [   12.953423] RAMDISK: ext2 filesystem found at block 0
     [   13.013927] RAMDISK: Loading 32768KiB [1 disk] into ram disk... done.
     [   17.768966] VFS: Mounted root (ext2 filesystem) on device 1:0.


    Im Kernel ist die ext2 (und ext3) Unterstuetzung integriert:

    Code
    CONFIG_EXT2_FS=y
    CONFIG_EXT3_FS=y


    Hat das etwas mit der initramfs zu tun? Wird dort nicht ext2 unterstuetzt?


    Der naechste Schritt wird sein, dass die initrd nicht die HDD als rootfs mounten soll. Hat da jmd eine Idee? In der initrd scheint alles ueber die run_all.sh (nachdem init es aufgerufen hat) zu laufen.


    Kann ich dann die initrd mit dem Inhalt des richtigen rootfs einfach "auffuellen"?


    Bitte helft mir! Danke schon mal im Voraus!