  Loop Root Device mini-HOWTO
  Andrew M. Bishop (amb@gedanken.demon.co.uk) und Hans-Jrgen
  Gei (hans-juergen.geiss@kl.maus.de)
  v1.1-2, 25. Oktober 1999

  Dieses HOWTO erklrt, wie man unter Linux ein Loop-Device verwendet,
  um ein Linux-System zu installieren, das auf einer DOS-Partition
  betrieben werden kann, ohne diese neu zu partitionieren. Andere Anwen
  dungen die auf dieser Technik basieren werden ebenfalls beschrieben.


  1.  Copyright


  Dieses Dokument ist urheberrechtlich geschtzt. Das Copyright fr die
  englische  Loopback Root Filesystem mini-HOWTO, auf der dieses
  Dokument basiert, liegt bei Andrew M. Bishop. Das Copyright fr die
  deutsche Version liegt bei Hans-Jrgen Gei.

  Das Dokument darf gem der GNU General Public License verbreitet
  werden.  Insbesondere bedeutet dieses, dass der Text sowohl ber
  elektronische als auch physikalische Medien ohne die Zahlung von
  Lizenzgebhren verbreitet werden darf, solange dieser Copyright-
  Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt
  und ausdrcklich erwnscht. Bei einer Publikation in Papierform ist
  das Deutsche Linux HOWTO Projekt hierber zu informieren.

  2.  Grundstzliches ber Loop-Devices und RAM-Disks

  Zuerst will ich einige grundlegende Prinzipien erlutern, die beim
  Erstellen eines Dateisystems auf einem Loop-Device verwendet werden.



  2.1.  Loop-Devices

  Ein Loop-Device ist ein virtuelles Laufwerk, das wie alle anderen
  Laufwerke unter Linux verwendet werden kann.


  Beispiele fr gewhnliche Laufwerke sind: einzelne
  Festplattenpartitionen wie /dev/hda1, /dev/hda2, /dev/sda1 oder
  komplette Laufwerke wie die Diskettenlaufwerke /dev/fd0 usw.. Sie alle
  knnen verwendet werden, um Dateien oder Verzeichnisse zu speichern.
  Sie knnen mit dem bentigten Dateisystem formatiert (Ext2, MSDOS,
  NTFS usw.) und dann in die Verzeichnisstruktur von Linux eingefgt
  werden (mount).


  Das Loop-Device verwendet eine Datei in einem anderen Dateisystem als
  ein virtuelles Laufwerk, welches dann genauso angesprochen werden kann
  wie die bereits oben aufgelisteten Medien. Hierfr wird die
  Gertedatei /dev/loop0 oder /dev/loop1 usw. mit der Datei verbunden
  und dann dieses neue virtuelle Laufwerk gemountet.



  2.2.  RAM-Disks

  Unter Linux ist es auch mglich, ein anderes virtuelles Laufwerk als
  Dateisystem zu mounten, die sog. RAM-Disk.


  In diesem Fall verweist das Gert nur auf einen Teil des RAM-
  Speichers, der hierfr zur Verfgung gestellt wurde. Der zugewiesene
  Speicher wird nicht auf die Festplatte (Swap Device) ausgelagert. Das
  Laufwerk wird aber im Cache-Speicher gepuffert.


  Eine RAM-Disk kann jederzeit erstellt werden, indem auf die
  Gertedatei /dev/ram0 oder /dev/ram1 geschrieben wird. Sie kann genau
  wie ein Loop-Devivce formatiert und gemountet werden.


  Wenn eine RAM-Disk verwendet wird, um davon zu booten, wie es oft bei
  Installations- oder Rescue-Disketten von Linux getan wird, kann das
  Disk-Image (der komplette Inhalt der Diskette in einer einzelnen
  Datei) komprimiert auf der Boot-Diskette gespeichert werden. Beim
  Booten wird dies automatisch vom Kernel erkannt und die Datei auf eine
  RAM-Disk entpackt, bevor diese dann gemountet wird.



  2.3.  Die Initial-RAM-Disk

  Die Initial-RAM-Disk unter Linux ist ein weiterer wichtiger
  Mechanismus, den wir bentigen, um ein Loop-Device als Root-
  Dateisystem zu verwenden.


  Bei Verwendung einer Initial-RAM-Disk wird zunchst das Disk-Image in
  den Speicher geladen und dann gemountet, damit die Dateien darauf
  ausgefhrt werden knnen. Ein Programm, genauer gesagt die Skript-
  Datei /linuxrc, auf der RAM-Disk wird ausgefhrt und wenn es fertig
  ist, wird ein anderes Speichermedium in das Root-Dateisystem
  gemountet.  Die alte RAM-Disk ist aber noch verfgbar und im
  Verzeichnis /initrd gemountet, sofern es vorhanden ist, oder sie ist
  ber die Gerte-Datei /dev/initrd erreichbar.


  Das ist ein ungewhnliches Verhalten, weil normalerweise der Boot-
  Vorgang nur von der vorbestimmten Root-Partition gestartet und weiter
  ausgefhrt wird. Mit der Initial-RAM-Disk kann man die Root-Partition
  aber ndern, bevor die eigentliche Boot-Sequenz startet.



  2.4.  Das Root-Dateisystem

  Das Root-Dateisystem wird als erstes gemountet, damit es als das
  Verzeichnis / nach dem Booten erscheint.


  Es gibt eine Reihe von Komplikationen beim Root-Dateisystem, die auf
  die Tatsache zurck zu fhren sind, da es alle Dateien beinhaltet.
  Beim Booten werden die rc-Skripte gestartet. Das sind die Dateien
  /etc/rc.d oder /etc/rc?.d, je nach Version des Init-Programmes
  /etc/init.


  Wenn das System gebootet hat, ist es nicht mehr mglich, die Root-
  Partition zu entfernen oder zu wechseln, da alle Programme sie zu
  einem gewissem Grad verwenden. Darum ist die Initial-RAM-Disk so
  ntzlich, denn sie kann bentzt werden, um am Ende des Bootens eine
  andere Root-Partition zu haben als am Anfang.



  2.5.  Der Boot-Vorgang bei Linux

  Um zu zeigen, wie die Initial-RAM-Disk arbeitet, sind die einzelnen
  Vorgnge beim Booten unten aufgelistet.



  1. Der Kernel wird in den Speicher geladen, was von LILO oder LOADLIN
     bewerkstelligt wird. Wenn das geschieht, knnen Sie die Meldung
     Loading... sehen.

  2. Das RAM-Disk-Image wird in den Speicher geladen, wiederum durch
     LILO oder LOADLIN und Sie knnen erneut die Meldung Loading...
     sehen.

  3. Der Kernel wird intitialisiert, die Optionen der Kommandozeile
     werden ausgewertet und die RAM-Disk als Root-Partition aktiviert.

  4. Das Programm /linuxrc auf der Initial-RAM-Disk wird ausgefhrt.

  5. Die Root-Partition wird gewechselt auf die mit den Kernel-
     Parametern angegebene Partition.

  6. Das Init-Programm /etc/init wird gestartet, welches die durch den
     Benutzer konfigurierbare Boot-Sequenz durchfhrt.

  Das ist nur eine vereinfachte Darstellung, aber sie reicht aus, um zu
  erlutern, wie der Kernel gestartet und wo die Initial-RAM-Disk
  verwendet wird.


  3.  Wie ein Loop-Root-Device erzeugt wird

  Nun, wo die grundlegenden Prinzipien erlutert sind, kann die
  Erstellung eines Loop-Devices erklrt werden.



  3.1.  Voraussetzungen

  Um ein Loop-Device zu erstellen, werden mehrere Dinge bentigt.



    Ein funktionierendes Linux-System

    Eine Mglichkeit groe Dateien auf die Ziel-Partition (DOS-
     Festplatte) zu schreiben.

  Am wichtigsten ist der Zugriff auf ein installiertes Linux-System,
  denn das Loop-Device kann nur unter Linux erstellt werden. Das heit,
  da es nicht mglich ist, ein funktionierendes System aus dem Nichts
  zu erstellen (Boot Strapping). Mit dem Linux-System, das Sie
  verwenden, mssen Sie einen neuen Kernel kompilieren knnen.


  Wenn das Loop-Device erst einmal erzeugt ist, wird es eine sehr groe
  Datei sein. Ich habe Dateien mit einer Gre von 80 MB verwendet. Aber
  obwohl das ausreichte, um ein X-Terminal zu betreiben, knnte es zu
  klein sein, wenn Sie es fr etwas anderes verwenden mchten. Diese
  Datei mu auf die DOS-Partition kopiert werden; also mssen entweder
  ein Netzwerk oder eine groe Anzahl von Disketten verwendet werden.


  Die bentigten Programme sind:


    LOADLIN Version 1.6 oder hher

    Eine Version von mount die Loop-Devices untersttzt

    Eine Version des Kernels die die erforderlichen Optionen
     untersttzt

  Das sollte aber bei den jngeren Linux-Distributionen Standard sein.



  3.2.  Den Linux-Kernel erzeugen

  Ich erzeugte das Loop-Device unter Verwendung des Linux-Kernels
  2.0.31.  Andere Versionen sollten ebenfalls funktionieren. Sie mssen
  aber zumindest die unten aufgelisteten Optionen haben.


  Folgende Kernel-Optionen werden verwendet:


    RAM disk support (CONFIG_BLK_DEV_RAM).

    Initial RAM disk (initrd) support (CONFIG_BLK_DEV_INITRD).

    Loop device support (CONFIG_BLK_DEV_LOOP).

    fat fs support (CONFIG_FAT_FS).


    msdos fs support (CONFIG_MSDOS_FS).

  Die ersten beiden sind fr die RAM-Disk und die Intitial-RAM-Disk. Die
  nchste ist fr das Loop-Device. Die letzten beiden sind fr
  Untersttzung des DOS-Dateisystems, das gebraucht wird, um die DOS-
  Partition zu mounten.


  Die einfachste Mglichkeit ist es, einen Kernel ohne nachladbare
  Module zu erzeugen. Mit Modulen sollte es auch funktionieren, obgleich
  ich es nicht ausprobiert habe. Wenn Module verwendet werden, sollten
  Sie sich vergewissern, da zumindest die o.g. Optionen fest in den
  Kernel eingebunden und nicht als Module erzeugt werden, damit sie
  gleich zu Beginn zur Verfgung stehen.



  Je nachdem welche Kernel-Version verwendet wird, knnte es sein, da
  Sie einen Kernel-Patch anwenden mssen. Es ist eine sehr einfache
  Anpassung, die es erlaubt, ein Loop-Device als Root-Partition zu
  verwenden.


     Kernel-Versionen lter als 2.0.0
        Es liegen mir keine weiteren Informationen darber vor.


     Kernel-Versionen 2.0.0 bis 2.0.34
        Sie mssen den Kernel-Patch fr die 2.0.x Kernels anwenden, wie
        unten beschrieben.


     Kernel-Versionen 2.0.35 bis 2.0.x
        Ein Kernel-Patch ist nicht erforderlich.


     Kernel version 2.1.x
        Sie mssen den Kernel-Patch fr die 2.0.x-Kernels oder 2.2.x-
        Kernels anwenden, je nach genauer Version des 2.1.x-Kernels, wie
        unten beschrieben.


     Kernel-Versionen 2.2.0 bis 2.2.10
        Sie mssen den Kernel-Patch fr die 2.2.x-Kernels anwenden, wie
        unten beschrieben.


     Kernel-Version 2.3.x
        Sie mssen den Kernel-Patch fr die 2.2.x-Kernels anwenden, wie
        unten beschrieben.


  Fr die 2.0.x-Kernels mu eine einzelne Zeile in die Datei init/main.c
  eingefgt werden. Die einzufgende Zeile lautet:


       { "loop",    0x0700 }


  Das sollte dann so aussehen:






  static void parse_root_dev(char * line)
  {
          int base = 0;
          static struct dev_name_struct {
                  const char *name;
                  const int num;
          } devices[] = {
                  { "nfs",     0x00ff },
                  { "loop",    0x0700 },
                  { "hda",     0x0300 },

  ...

                  { "sonycd",  0x1800 },
                  { NULL, 0 }
          };

  ...

  }





  Fr die 2.2.x-Kernels mssen drei Zeilen in die Datei init/main.c
  eingefgt werden. Die eingefgten Zeilen sind

       { "loop",    0x0700 }

  und die Zeilen die davor und dahinter stehen:




       static struct dev_name_struct {
               const char *name;
               const int num;
       } root_dev_names[] __initdata = {
       #ifdef CONFIG_ROOT_NFS
               { "nfs",     0x00ff },
       #endif
       #ifdef CONFIG_BLK_DEV_LOOP
               { "loop",    0x0700 },
       #endif
       #ifdef CONFIG_BLK_DEV_IDE
               { "hda",     0x0300 },

       ...

               { "ddv", DDV_MAJOR << 8},
       #endif
               { NULL, 0 }
       };




  Wenn der Kernel konfiguriert ist, sollte er bersetzt werden, um eine
  zImage-Datei zu erhalten (make zImage). Nach dem bersetzen wird die
  entstandene Datei arch/i386/boot/zImage heien.





  3.3.  Die Initial-RAM-Disk erstellen

  Die Initial-RAM-Disk wird fr den Startvorgang meistens als ein Loop-
  Device angelegt. Sie mssen das als Systemverwalterin (Super-User)
  tun, weil es Root-Rechte erfordert. Die Programme, die dazu ausgefhrt
  werden mssen, sind unten aufgelistet. Es wird hier davon ausgegangen,
  da Sie vom Heimatverzeichnis der Systemverwalterin gestartet werden
  (/root).




       mkdir /root/initrd
       dd if=/dev/zero of=initrd.img bs=1k count=1024
       mke2fs -i 1024 -b 1024 -m 5 -F -v initrd.img
       mount initrd.img /root/initrd -t ext2 -o loop
       cd initrd
       [Erzeuge die Dateien]
       cd ..
       umount /root/initrd
       gzip -c -9 initrd.img > initrdgz.img




  Es sind eine Reihe von Schritten erforderlich, die wie folgt
  beschrieben werden knnen.


  1. Erzeugen Sie einen Mount-Point, ein leeres Verzeichnis, fr die
     Initial-RAM-Disk.

  2. Erzeugen Sie eine leere Datei in der bentigten Gre. Hier habe
     ich 1024 kB verwendet. Sie werden mehr oder weniger bentigen, je
     nach Verwendungszweck; die Gre ist der letzte Parameter.

  3. Erzeugen Sie in der leeren Datei das Ext2-Format.

  4. Mounten Sie die Datei auf den Mount-Point; dadurch wird das Loop-
     Device verwendet.

  5. Wechseln Sie auf das gemountete Loop-Device.

  6. Erstellen Sie die bentigten Dateien (siehe unten).

  7. Wechseln Sie in ein anderes Verzeichnis auerhalb des Loop-Devices.

  8. Entfernen Sie das Loop-Device aus der Verzeichnisstruktur (umount).

  9. Erzeugen Sie eine komprimierte Version fr die sptere Verwendung.

  Inhalt der Initial-RAM-Disk

  Die Dateien, die Sie auf der RAM-Disk bentigen, sind die minimalen
  Voraussetzungen, um irgendwelche Kommandos auszufhren zu knnen.


     /linuxrc
        Das Programm (Skript-Datei), das gestartet wird, um die DOS-
        Partition zu mounten (siehe unten).


     /lib/*
        Die Link-Programme und die Laufzeit-Bibliotheken, die von den
        Programmen verwendet werden.

     /etc/*
        Die Umgebung, die von den Link-Programmen verwendet wird (fr
        alle Flle).


     /bin/*
        Eine Shell (am besten ash weil sie kleiner ist als bash).  Die
        Programme mount und losetup fr den Zugriff auf die DOS-
        Partition und zum Erstellen des Loop-Devices.


     /dev/*
        Die Gerte-Dateien der verwendeten Gerte. Sie bentigen
        /dev/zero fr ld-linux.so, /dev/hda* um die DOS-Partition zu
        mounten und /dev/loop* fr das Loop-Device.


     /mnt
        Ein leeres Verzeichnis, um die DOS-Partition darauf zu mounten.

  Die Initial-RAM-Disk die ich verwendete, ist unten aufgelistet. Der
  Inhalt betrgt etwa 800 kB, wenn man den zustzlichen Platz
  mitbercksichtigt, der beim Abspeichern im Dateisystem bentigt wird.











































  total 18
  drwxr-xr-x   2 root     root         1024 Jun  2 13:57 bin
  drwxr-xr-x   2 root     root         1024 Jun  2 13:47 dev
  drwxr-xr-x   2 root     root         1024 May 20 07:43 etc
  drwxr-xr-x   2 root     root         1024 May 27 07:57 lib
  -rwxr-xr-x   1 root     root          964 Jun  3 08:47 linuxrc
  drwxr-xr-x   2 root     root        12288 May 27 08:08 lost+found
  drwxr-xr-x   2 root     root         1024 Jun  2 14:16 mnt

  ./bin:
  total 168
  -rwxr-xr-x   1 root     root        60880 May 27 07:56 ash
  -rwxr-xr-x   1 root     root         5484 May 27 07:56 losetup
  -rwsr-xr-x   1 root     root        28216 May 27 07:56 mount
  lrwxrwxrwx   1 root     root            3 May 27 08:08 sh -> ash

  ./dev:
  total 0
  brw-r--r--   1 root     root       3,   0 May 20 07:43 hda
  brw-r--r--   1 root     root       3,   1 May 20 07:43 hda1
  brw-r--r--   1 root     root       3,   2 Jun  2 13:46 hda2
  brw-r--r--   1 root     root       3,   3 Jun  2 13:46 hda3
  brw-r--r--   1 root     root       7,   0 May 20 07:43 loop0
  brw-r--r--   1 root     root       7,   1 Jun  2 13:47 loop1
  crw-r--r--   1 root     root       1,   3 May 20 07:42 null
  crw-r--r--   1 root     root       5,   0 May 20 07:43 tty
  crw-r--r--   1 root     root       4,   1 May 20 07:43 tty1
  crw-r--r--   1 root     root       1,   5 May 20 07:42 zero

  ./etc:
  total 3
  -rw-r--r--   1 root     root         2539 May 20 07:43 ld.so.cache

  ./lib:
  total 649
  lrwxrwxrwx   1 root     root           18 May 27 08:08 ld-linux.so.1 -> ld-linux.so.1.7.14
  -rwxr-xr-x   1 root     root        21367 May 20 07:44 ld-linux.so.1.7.14
  lrwxrwxrwx   1 root     root           14 May 27 08:08 libc.so.5 -> libc.so.5.3.12
  -rwxr-xr-x   1 root     root       583795 May 20 07:44 libc.so.5.3.12

  ./lost+found:
  total 0

  ./mnt:
  total 0




  Die einzig schwierigen Schritte betreffen die Gerte in /dev.
  Verwenden Sie das Programm mknod, um sie zu erstellen und gebrauchen
  Sie dabei die bestehenden Gertedateien als Vorlagen, um die
  bentigten Parameter zu erhalten.

  Die Skript-Datei /linuxrc

  Die Datei /linuxrc auf der Initial-RAM-Disk wird bentigt, um alle
  Vorbereitungen zu treffen, damit das Loop-Device als Root-Partition
  verwendet werden kann.


  Im untenstehenden Beispiel wird versucht, /dev/hda1 als DOS-Laufwerk
  zu mounten und wenn das geklappt hat, die Dateien /linux/linuxdsk.img
  als /dev/loop0 und /linux/linuxswp.img als /dev/loop1 einzurichten.


       #!/bin/sh

       echo INITRD: Versuche /dev/hda1 als msdos zu mounten

       if /bin/mount -n -t msdos /dev/hda1 /mnt; then

          echo INITRD: Mounted OK
          /bin/losetup /dev/loop0 /mnt/linux/linuxdsk.img
          /bin/losetup /dev/loop1 /mnt/linux/linuxswp.img
          exit 0

       else

          echo INITRD: Mounten fehlgeschlagen
          exit 1

       fi




  Das erste Loop-Device /dev/loop0 wird die Root-Partition und das
  zweite /dev/loop1 wird der Auslagerungsbereich (Swap-Partition).


  Wenn Sie hinterher als gewhnlicher User ohne Root-Rechte auf die DOS-
  Partition schreiben mchten, dann sollten Sie stattdessen das folgende
  Kommando verwenden:



       mount -n -t msdos /dev/hda1 /mnt -o uid=0,gid=0,umask=000,quiet




  Es leitet alle Zugriffe auf die DOS-Partition um und setzt die
  passenden Zugriffsrechte fr die Dateien und Verzeichnisse.



  3.4.  Die Root-Partition erstellen

  Die Root-Partition, die Sie verwenden werden, ist die Datei
  linuxdsk.img.  Sie mssen sie genauso erzeugen wie die Initial-RAM-
  Disk. Sie mu aber grer sein. Sie knnen jede beliebige Linux-
  Distribution darauf installieren.


  Der einfachste Weg wird sein, einfach eine existierende Linux-
  Installation dorthin zu kopieren. Die Alternative ist, ein neues Linux
  darauf zu installieren.


  Angenommen Sie haben das getan, dann gibt es da noch ein paar kleine
  nderungen, die Sie vornehmen mssen.


  Die Datei /etc/fstab mu die Verweise auf die Root-Partition und die
  Swap-Partition unter Verwendung der beiden Loop-Devices enthalten, die
  mit der Initial-RAM-Disk eingerichtet wurden.





  /dev/loop0     /      ext2   defaults 1 1
  /dev/loop1     swap   swap   defaults 1 1




  Das wird dafr sorgen, da, sobald die richtige Root-Partition
  verwendet werden soll, diese auch vom Kernel gefunden werden kann.
  Auerdem kann so auch der Auslagerungsbereich auf die gleiche Weise
  hinzugefgt werden, wie eine Swap-Partition normalerweise verwendet
  wird. Sie sollten alle anderen Verweise auf eine Root- oder Swap-
  Partition entfernen.


  Wenn Sie nach dem Start von Linux auch auf die DOS-Partition zugreifen
  mchten, mssen Sie noch ein paar kleine nderungen vornehmen.


  Erzeugen Sie ein Verzeichnis mit dem Namen /initrd. Dorthin wird die
  Initial-RAM-Disk gemountet werden, wenn das Loop-Root-Device gemountet
  ist.


  Erstellen Sie einen symbolischen Link mit dem Namen /DOS, der auf
  /initrd/mnt zeigt, wohin die echte DOS-Partition gemountet wird.


  Fgen Sie eine Zeile in die rc-Datei ein, die die Laufwerke mountet.
  Sie sollte folgendes Kommando ausfhren:


       mount -f -t msdos /dev/hda1 /initrd/mnt


  So wird ein falsches Mount-Kommando auf die DOS-Partition
  angewendet, damit alle Programme wie z.B. df wissen, da die DOS-
  Partition gemountet wurde und wo sie zu finden ist. Wenn Sie in der
  Datei /linuxrc andere Optionen verwendet haben, sollten Sie sie
  selbstverstndlich auch hier verwenden.


  Es ist nicht notwendig, einen Linux-Kernel auf dieser Root-Partition
  zu haben, weil er bereits vorher geladen wurde. Sofern Sie Kernel-
  Module verwenden, kopieren Sie diese wie gewohnt auf das Laufwerk.



  3.5.  Die Swap-Partition erstellen

  Das Laufwerk, das Sie verwenden werden, ist die Datei linuxswp.img.
  Die Swap-Partition ist sehr einfach zu erstellen. Erzeugen Sie eine
  leere Datei, wie beim Erstellen der Initial-RAM-Disk und starten Sie

       mkswap linuxswp.img

  um sie zu initialisieren.


  Die Gre des Auslagerungsbereiches ist davon abhngig, was Sie mit
  dem installierten System machen mchten. Ich empfehle zwischen 8 MB
  und der Gre des RAM-Speichers, den Sie in ihrem Rechner haben.





  3.6.  Das DOS-Verzeichnis erstellen

  Die Dateien, die Sie verwenden wollen, mssen auf die DOS-Partition
  verschoben werden.


  Die Dateien, die im DOS-Verzeichnis mit dem Namen C:\LINUX gebraucht
  werden, sind die folgenden:


     LINUXDSK.IMG
        Die Image-Datei die zur Root-Partition wird.


     LINUXSWP.IMG
        Der Auslagerungsbereich (Swap-Partition).



  3.7.  Eine Boot-Diskette erstellen

  Die verwendete Diskette ist eine normale bootfhige DOS-Diskette


  Unter DOS wird sie mit dem Befehl

       format a: /s

  erstellt.


  Auf dieser Diskette mssen Sie eine Datei mit dem Namen AUTOEXEC.BAT
  erstellen. Auerdem mssen Sie den Kernel, eine gepackte Initial-RAM-
  Disk und LOADLIN.EXE auf die Diskette kopieren.


     AUTOEXEC.BAT
        Die bei DOS automatisch gestartete Batch-Datei.


     LOADLIN.EXE
        Das Programm LOADLIN.EXE


     ZIMAGE
        Der Linux-Kernel


     INITRDGZ.IMG
        Das Image der gepackten Intitial-RAM-Disk.

  Die Datei AUTOEXEC.BAT sollte nur eine einzelne Zeile enthalten:



       \loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro




  Darin wird der zu ladende Kernel angeben, die Intitial-RAM-Disk und
  die Root-Partition, nachdem die Initial-RAM-Disk ihre Arbeit beendet
  hat.  Auerdem wird festgelegt, da die Root-Partition nur fr
  lesenden Zugriff gemountet wird.


  4.  Das System Booten

  Um von diesem neuen Laufwerk zu booten, ist es lediglich erforderlich,
  da die Boot-Diskette, wie oben beschrieben vorbereitet wurde und sich
  in dem Computer befindet, der gestartet werden soll.


  Die folgenden Vorgnge werden ablaufen:

  1. DOS wird gebootet.

  2. Die AUTOEXEC.BAT wird abgearbeitet.

  3. LOADLIN wird gestartet.

  4. Der Linux-Kernel wird in den Speicher geladen.

  5. Die Initial-RAM-Disk wird in den Speicher kopiert.

  6. Der Linux-Kernel wird gestartet.

  7. Die Skript-Datei /linuxrc auf der Initial-RAM-Disk wird ausgefhrt.

  8. Die DOS-Partition wird gemountet und die Root- und Swap-Partition
     werden eingerichtet.

  9. Die Boot-Sequenz wird auf dem Loop-Device fortgesetzt.

  Wenn das abgeschlossen ist, knnen Sie die Boot-Diskette entfernen und
  das Linux-System verwenden.



  4.1.  Mgliche Probleme und Erklrungen dazu

  Es gibt einige Phasen, bei denen der Startvorgang abbrechen kann. Ich
  will versuchen, zu erklren, welche das sind und worauf zu achten ist.


  Der DOS-Boot-Vorgang ist leicht an der Startmeldung zu erkennen, die
  von DOS auf dem Bildschirm angezeigt wird. Wenn sie nicht erscheint,
  dann ist entweder die Diskette nicht bootfhig oder der PC kann nicht
  von dem Diskettenlaufwerk booten.


  Wenn die Datei AUTOEXEC.BAT abgearbeitet wird, sollten die darin
  befindlichen Kommandos standardmig am Bildschirm angezeigt werden.
  Im vorliegenden Fall ist es lediglich die eine Zeile, die LOADLIN
  startet.


  Wenn das Programm LOADLIN abluft, macht es zwei leicht zu erkennende
  Dinge. Erstens ldt es den Kernel in den Speicher, zweitens kopiert es
  die RAM-Disk in den Speicher. Beides wird kommentiert durch die
  Meldung Loading...


  Der Kernel beginnt sich selbst zu entpacken, dabei kann es zu CRC-
  Fehlern kommen, wenn das Kernel-Image fehlerhaft ist. Danach wird die
  Initialisierung begonnen, die viele Diagnose-Meldungen erzeugt. Das
  Laden der Initial-RAM-Disk ist whrend dieser Phase ebenfalls
  sichtbar.


  Wenn die Skript-Datei /linuxrc abluft, gibt es keine Diagnose-
  Meldungen, aber Sie knnen diese selber als Hilfe bei der Fehlersuche
  hinzufgen. Wenn der Schritt, das Loop-Device als Root-Partition
  einzurichten, fehlschlgt, dann knnen Sie eine Nachricht sehen, da
  keine Root-Partition vorhanden ist und der Kernel bricht seine Arbeit
  ab.


  Die normale Boot-Sequenz wird nun von der neuen Root-Partition
  fortgesetzt; das passiert ziemlich kommentarlos. Es knnten Probleme
  auftauchen, wenn die Root-Partition fr schreibenden Zugriff gemountet
  wurde; die Option ro der Kommandozeile von LOADLIN sollte das
  verhindern.  Weitere Probleme, die auftauchen knnen, sind, da beim
  Boot-Vorgang die Root-Partition nicht gefunden wird. Dies wird
  mglicherweise durch ein Problem mit der Datei /etc/fstab verursacht.


  Wenn der Boot-Vorgang abgeschlossen ist, bleibt das Problem, da die
  Programme nicht wissen, ob eine DOS-Partition gemountet ist oder
  nicht. Darum ist es eine gute Idee, das falsche Mount-Kommando zu
  verwenden, das zuvor beschrieben wurde. Es macht das Leben viel
  einfacher, wenn Sie auf Dateien zugreifen wollen, die sich auf der
  DOS-Partition befinden.



  4.2.  Verwendete Hilfstexte, Quellenangabe

  Die Texte, die ich verwendet habe, um mein erstes Loop-Root-Device zu
  erstellen, waren:



    Der Quell-Code des Linux-Kernels, speziell init/main.c.

    Die Dokumentation zum Linux-Kernel, speziell
     Documentation/initrd.txt und Documentation/ramdisk.txt.

    Die Dokumentation zu LILO.

    Die Dokumentation zu LOADLIN.



  5.  Andere Mglichkeiten des Loop-Root-Devices

  Wenn einmal die prinzipiellen technischen Voraussetzungen bestehen, um
  ein Dateisystem zu booten, das sich in einer Datei auf einer DOS-
  Partition befindet, knnen Sie damit noch viele andere Dinge machen.



  5.1.  Installation zur Verwendung der DOS-Partition (ohne Boot-
  Diskette)

  Wenn es bei Verwendung einer Start-Diskette mglich ist, Linux von
  einer Datei booten, die sich auf einer DOS-Festplatte befindet, dann
  liegt es auf der Hand, da es auch mglich ist, dies ausschlielich
  unter Verwendung der Festplatte zu tun.


  Es kann ein Boot-Men verwendet werden, um LOADLIN aus der
  AUTOEXEC.BAT heraus zu starten. Das ergibt einen viel schnelleren
  Boot-Vorgang, ist ansonsten aber gleich.




  5.2.  Installation zum Booten mittels LILO

  LOADLIN zu verwenden, ist nur eine Mglichkeit, um einen Linux-Kernel
  zu booten. Es gibt auch noch LILO, der so ziemlich das gleiche tut,
  ohne DOS zu bentigen.


  In diesem Fall kann die DOS-formatierte Diskette durch eine Diskette
  im Ext2-Format ersetzt werden. Die sonstigen Details, mit dem Kernel
  und der RAM-Disk als Dateien auf der Diskette, sind sehr hnlich.


  Der Grund, warum ich die Methode mit LOADLIN gewhlt habe, ist, da
  die Argumente, die an LILO bergeben werden mssen, ein bichen
  komplizierter sind. Auerdem ist es fr einen flchtigen Beobachter
  einfacher zu erkennen, welche Diskette es ist, da sie auch unter DOS
  gelesen werden kann.



  5.3.  VFAT- und NTFS-Installation

  Ich habe die NTFS-Methode versucht und habe damit keine Probleme
  gehabt.  Der Treiber fr das NTFS-Dateisystem ist keine Standard-
  Kerneloption in der Version 2.0.x; Sie mssen den Patch von Martin von
  Lwis verwenden, der auf seiner Web-Seite zu finden ist:


       http://www.informatik.hu-berlin.de/~loewis/ntfs/


  In der Version 2.2.x ist der NTFS-Treiber standardmig im Kernel
  integriert.


  Die einzigen nderungen fr die VFAT- oder NTFS-Versionen sind in der
  Initial-RAM-Disk. Die Skript-Datei /linuxrc mu ein Dateisystem des
  Typs VFAT oder NTFS mounten, anstatt MSDOS.


  Ich wsste keinen Grund, warum das nicht auch auf einer VFAT-Partition
  funktionieren sollte.



  5.4.  Linux installieren ohne neues Partitionieren

  Das Installieren einer Standard-Distribution von Linux auf einen PC,
  erfordet es, von einer Diskette zu booten und die Festplatte neu zu
  partitionieren. Das gleiche Ziel knnte stattdessen mit einer Boot-
  Diskette erreicht werden, die ein leeres Loop-Device und eine Swap-
  Datei erzeugt.  Dies wrde es ermglichen, die Installation normal
  fortzusetzen, aber es wrde dann in ein Loop-Device installiert,
  anstatt auf eine eigene Partition.


  Man knnte dies als Alternative zu einer Installation mittels UMSDOS
  gebrauchen. Es wrde bei der Verwaltung des Festplattenplatzes
  effizienter sein, weil der minimale Zuordnungsbereich im
  Ext2-Dateisystem ein Kilobyte betrgt, anstatt bis zu 32 kB auf einer
  DOS-Partition. Auerdem knnen VFAT- oder NTFS-formatierte Laufwerke
  verwendet werden, die andernfalls ein Problem sind.




  5.5.  Booten von einem Laufwerk, das nicht bootfhig ist

  Die Methode kann auch verwendet werden, um ein Linux-System von einem
  Laufwerk zu booten, das normalerweise nicht bootfhig ist:



    CD-ROMs

    Zip-Medien

    Parallelport-Laufwerke

  Offensichtlich gibt es viele andere Laufwerke, die verwendet werden
  knnten.  NFS-Root-Systeme sind ja bereits im Kernel als eine Option
  enthalten, aber die hier beschriebene Methode kann stattdessen
  ebenfalls verwendet werden.

















































