Changeset 46b900a

02/12/2005 06:05:09 AM (18 years ago)
Bruce Dubbs <bdubbs@…>
10.0, 10.1, 11.0, 11.1, 11.2, 11.3, 6.0, 6.1, 6.2, 6.2.0, 6.2.0-rc1, 6.2.0-rc2, 6.3, 6.3-rc1, 6.3-rc2, 6.3-rc3, 7.10, 7.4, 7.5, 7.6, 7.6-blfs, 7.6-systemd, 7.7, 7.8, 7.9, 8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1, basic, bdubbs/svn, elogind, gnome, kde5-13430, kde5-14269, kde5-14686, ken/inkscape-core-mods, krejzi/svn, lazarus, nosym, perl-modules, plabs/python-mods, qt5new, systemd-11177, systemd-13485, trunk, upgradedb, xry111/intltool, xry111/soup3, xry111/test-20220226

Rewrote rescue bootdisk page

git-svn-id: svn:// af4574ff-66df-0310-9fd7-8a98e5e911e0

4 edited


  • general/prog/prog.xml

    r310960e4 r46b900a  
    2828<xi:include xmlns:xi="" href="dejagnu.xml"/>
    2929<xi:include xmlns:xi="" href="gcc.xml"/>
    30 <xi:include xmlns:xi="" href="gcc2.xml"/>
     30<!-- <xi:include xmlns:xi="" href="gcc2.xml"/> -->
    3131<xi:include xmlns:xi="" href="gcc3.xml"/>
    3232<xi:include xmlns:xi="" href="nasm.xml"/>
  • introduction/welcome/changelog.xml

    r310960e4 r46b900a  
     25<listitem><para>February 11th, 2005 [bdubbs]: Rewrote bootdisk page.</para>
    2528<listitem><para>February 11th, 2005 [randy]: Added md5sums to Chapter 18,
  • postlfs/config/bootdisk.xml

    r310960e4 r46b900a  
    8 <sect1 id="postlfs-config-bootdisk" xreflabel="Creating a Custom Book Disk">
     8<sect1 id="postlfs-config-bootdisk" xreflabel="Creating a Custom Boot Device">
    1313<?dbhtml filename="bootdisk.html"?>
    14 <title>Creating a Custom Boot Disk</title>
     14<title>Creating a Custom Boot Device</title>
    17 <title>Decent Rescue Boot Disk Needs</title>
     17<title>Decent Rescue Boot Device Needs</title>
    1818<para>This section is really about creating a <emphasis>rescue</emphasis>
    19 diskette.  As the name <emphasis>rescue</emphasis> implies, the host
     19device.  As the name <emphasis>rescue</emphasis> implies, the host
    2020system has a problem, often lost partition information or corrupted file
    21 systems, that prevents it from booting and/or operating normally.  For
     21systems, that prevent it from booting and/or operating normally.  For
    2222this reason, you <emphasis>must not</emphasis> depend on resources from
    2323the host being "rescued".  To presume that any given partition or hard
    2424drive <emphasis>will</emphasis> be available is a risky presumption.</para>
    26 <para>Heeding the warning, the rescue disk created here has no
    27 dependency on the host system's resources, other than basic bootability
    28 and hardware soundness.  At a minimum, the most common sorts of failures
    29 requiring a rescue boot disk should be addressed by the contents of the
    30 boot disk.  This would include the common loss of partitioning (master
    31 boot record is lost or corrupted), file system corruption, and the need
    32 to allow creation and editing of files that may have been lost or
    33 corrupted, possibly as an effect of the other two problems.</para>
     26<para>In a modern system, there are many devices that can be
     27used as a rescue device: floppy, cdrom, usb drive, or even a network card. 
     28Which one you use depends on your hardware and your BIOS.  In the past,
     29we usually thought of rescue device as a floppy disk.  Today, many
     30systems do not even have a floppy drive.</para>
    35 <para>Additional utilities should be available to search for text or
    36 files, copy, move and remove files, and many other normal operations
    37 that might be expected to be needed when reconstructing.</para>
     32<para>Building a complete rescue device is a challenging task.  In many
     33ways, it is equivalent to building an entire <acronym>LFS</acronym> system.
     34In addition, it would be a repitition of information already available.
     35For these reasons, the procedures for a rescue device image are not
     36presented here.</para>
    41 <title>This Minimal Decent Rescue Disk</title>
     40<title>Creating a Rescue Floppy</title>
    43 <para>The intent here is to create a "rescue boot disk" that will support
    44 the common operations listed above.  These functions are provided by
    45 including selected executables from <application><ulink
    46 url="">busybox
    47 </ulink></application> and <application><ulink
    48 url="">e2fsprogs</ulink></application>.
    49 A basic editor and rudimentary disk partitioning utility may also be
    50 optionally included.</para>
     42<para>The software of today's systems has grown large.  Linux 2.6 no longer
     43supports booting directly from a floppy.  In spite of this, there are solutions
     44available using older version of Linux.  One of the best is Tom's Root/Boot
     45Disk available at <ulink url=''/>.  This will provide a
     46minimal Linux system on a single floppy disk and provides the ability to
     47customize the contents of your disk if necessary.</para>
    52 <para>This, however, is not the limit.  A minimal disk is described
    53 here, but you can add anything you can fit on the floppy.  Furthermore,
    54 if one floppy is not enough to meet your needs, you can make a
    55 multi-diskette rescue set that means, essentially, the sky is the limit.
    56 This is discussed below.  The number of other possible variations are
    57 just too numerous to mention here.</para>
    61 <title>Build the Rescue Boot Disk</title>
    62 <sect3>
    63 <title>Prerequisites</title>
     52<title>Creating a Bootable CD-ROM</title>
    65 <para>You should have known-good floppy diskettes available.  Some
    66 people prefer to use the <command>fdformat</command> command to prepare
    67 these because it also does a verification. See the man page for more
    68 details.  Another good idea is to always prepare duplicates of the
    69 rescue diskette.  Media does deteriorate.</para>
     54<para>There are several sources that can be used for a rescue CD-ROM.
     55Just about any commercial distribution's installation CD-ROMs or
     56DVDs will work.  These include RedHat, Mandrake, and SuSE.  One
     57very popular option is Knoppix.</para>
    71 <para>These instructions presume a base <acronym>LFS</acronym> install
    72 using ext2/ext3 file systems.</para>
     59<para>In addition, the LFS Community has developed its own Boot
     60CD-ROM available at <ulink url=''/>.
     61A copy of this CD-ROM is available with the printed version of the Linux
     62From Scratch book.  If you download the ISO image, use <xref linkend='cdrecord'/> to
     63copy the image to a CD-ROM.</para>
    74 <para>You need to have loopback device support enabled in your host's
    75 kernel to use this procedure.</para>
    77 <para>You should make a custom kernel that includes only those features
    78 needed to rescue your system, so it will have the least size.  No
    79 sense in building in support for things like <application>XFree86</application>,
    80 <application>DRI</application>, etc, as most rescues are performed from the
    81 command prompt.  Along the same lines, if you have <xref linkend="gcc2"/>, it
    82 is known to produce smaller kernels.  So you might want to use that
    83 compiler for this kernel.  If you do so, don't overlook any loadable
    84 modules (which are not addressed here) you might need - they need to be
    85 compiled with the same compiler used to make the kernel.</para>
    87 <para>The rescue image must include support for the file system of your
    88 choice (we presume ext2/3 here), ramdisk and initial ramdisk (initrd).
    89 Disable everything that you can in the kernel configuration. You should
    90 keep support for the proc file system and tempfs file system enabled
    91 because of their general utility. The proc file system is needed for
    92 the <command>mount</command> to report properly.</para>
    94 <para>If you install <emphasis>only</emphasis> the minimal set of
    95 components shown in this document, you will need a kernel that is 643 or
    96 fewer blocks in size.  If you want the optional programs - a very basic
    97 editor, like <command>ed</command>, and rudimentary disk partitioning, like
    98 <command>sfdisk</command> - the kernel will need to be 595 or fewer blocks in
    99 size.  This should not be a major problem unless your needs are fairly
    100 esoteric.  On the system used to develop this version of the procedures, using
    101 only ext2 file systems and not using networking or <acronym>CD</acronym>s for
    102 recovery, the kernel image is only 481 blocks.  And there may be more to gain - it has not been closely examined for additional gains.</para>
    104 <para>This kernel image will be called "rescueimage" hereinafter. You
    105 can actually name your image anything you like and just use its name
    106 instead in any commands that include "rescueimage".</para>
    108 <para>If you can not get your rescueimage down to the size needed to allow
    109 all you need on the ramdisk image, don't fret.  You can always build a
    110 two diskette set, one boot and one root diskette.  The kernel will prompt
    111 you to insert the root file system diskette.  This will allow room for a
    112 compressed ramdisk image of 1440 blocks and a rescueimage of the same
    113 size.</para>
    115 <para>The rescueimage size limits given above are likely to vary as
    116 local system-specific configurations change.  Use them only as a
    117 guideline and not as gospel.  The size of rescueimage as shown by
    118 <command>ls -sk</command> is only an approximation because of some
    119 "overhead".  On the system used to develop this version of these
    120 procedures, that command shows 488 blocks but the actual number of
    121 blocks written is only 480 and a fraction, which means that 481 blocks
    122 are actually used.</para>
    123 </sect3>
    125 <sect3>
    126 <title>Rescue Disk Build Process</title>
    128 <para>The basic process will be:</para>
    129 <itemizedlist>
    130 <listitem><para>make a mount point for a file system</para></listitem>
    131 <listitem><para>make an empty file to hold the file system</para></listitem>
    132 <listitem><para>bind the empty file to a loopback device</para></listitem>
    133 <listitem><para>make a 4MB file system</para></listitem>
    134 <listitem><para>mount the file system</para></listitem>
    135 <listitem><para>add components to the file system</para></listitem>
    136 <listitem><para>make the compressed initrd</para></listitem>
    137 <listitem><para>join rescueimage and initrd onto a diskette</para></listitem>
    138 </itemizedlist>
    140 <para>The initial ramdisk will be automatically loaded at boot time if
    141 setup is done correctly.</para>
    143 <para><emphasis>Make a mount point and an empty file to hold a file
    144 system</emphasis></para>
    146 <screen><userinput><command>mkdir -p /mnt/loop1
    147 dd if=/dev/zero of=/tmp/rfloppy bs=1k count=4096</command></userinput></screen>
    149 <para><emphasis>Command explanations</emphasis></para>
    151 <para><command>dd</command>: This is a generalized input-to-output copy
    152 utility that also has many transformation capabilities.</para>
    154 <para><parameter>if=/dev/zero</parameter>: This parameter assigns
    155 <command>dd</command>'s input file to a device that returns an infinite
    156 stream of zeroes.</para>
    158 <para><parameter>of=/tmp/rfloppy</parameter>: This parameter directs
    159 <command>dd</command>'s output to <filename>/tmp/rfloppy</filename>.</para>
    161 <para><parameter>bs=1k count=4096</parameter>: These parameters tell
    162 <command>dd</command> to read and write in "chunks" of 1024 bytes and
    163 process 4096 "chunks".</para>
    165 <para><emphasis>Bind the file to a loopback device, make a file system and mount it.</emphasis></para>
    167 <para>The reason these commands are used is that they work regardless of
    168 the version of <command>mount</command> (older ones don't have the
    169 <userinput>-o loop</userinput> option) or if <filename>/etc/mtab</filename>
    170 is symlinked to <filename class="directory">/proc</filename> (which causes mount to be
    171 unable to properly "unbind" a loop device, due to "lost" information).
    172 An alternate set of commands is provided, after these three commands,
    173 that you can use if you don't have either of these situations.</para>
    175 <screen><userinput><command>losetup /dev/loop1 /tmp/rfloppy
    176 mke2fs -m 0 -N 504 /dev/loop1
    177 mount -t ext2 /dev/loop1 /mnt/loop1</command></userinput></screen>
    179 <para><emphasis>Command explanations</emphasis></para>
    181 <para><command>losetup /dev/loop1 /tmp/rfloppy</command>: This
    182 command "binds" a loopback device to the empty file.</para>
    184 <para><command>mke2fs -m 0 -N 504 /dev/loop1</command>: This
    185 command makes an ext2 file system on the loopback device (which really
    186 means it is created in the file to which the loopback device is bound)
    187 and reserves no blocks.  The <userinput>-N 504</userinput> parameter causes
    188 only 504 inodes to be allocated, leaving more space for other things needed
    189 in the file system.</para>
    191 <para><command>mount -t ext2 /dev/loop1 /mnt/loop1</command>: This
    192 mounts the file system just created, just as if it were a real device,
    193 like a hard drive or diskette.  This allows all the normal system I/O
    194 commands to operate as if a real device were present.</para>
    196 <para>If your <command>mount</command> supports the
    197 <option>-o loop</option> option <emphasis>and</emphasis> your
    198 <filename>/etc/mtab</filename> is a real file, rather than a symlink to
    199 <filename class="directory">/proc</filename>, the three above commands can be replaced
    200 by these next two commands.</para>
    202 <screen><userinput><command>mke2fs -F -m 0 -N 504 /tmp/rfloppy
    203 mount -o loop /tmp/rfloppy /mnt/loop1</command></userinput></screen>
    205 <para><emphasis>Command explanations</emphasis></para>
    207 <para><command>mke2fs -F -m 0 -N 504 /tmp/rfloppy</command>: As before,
    208 a file system is made, with only 504 inodes and no reserved blocks, that
    209 will be bound to a loopback device.  The <userinput>-F</userinput> parameter
    210 just suppresses an irritating question issued when
    211 <command>mke2fs</command> realizes that you are not accessing a
    212 device.</para>
    214 <para><command>mount -o loop /tmp/rfloppy /mnt/loop1</command>: This
    215 command tells <command>mount</command> to bind the named file to a
    216 loopback device it automatically selects (the first available) and mount
    217 the device on <filename class="directory">/mnt/loop1</filename>.</para>
    219 <para><emphasis>Add components to the file system</emphasis></para>
    221 <para><emphasis>A cautionary note:</emphasis> if you are not running in a
    222 <command>chroot</command> environment, be sure that you do not accidentally
    223 omit the <filename class="directory">/mnt/loop1</filename> reference in the commands. If
    224 you do so, you might replace the equivalent components on your host with
    225 the components that are installed by these procedures.  Even if you are
    226 in a chroot environment, you may need to be careful if the environment
    227 is your freshly built <acronym>LFS</acronym> system which you intend to
    228 use as a host in the future.</para>
    230 <para>First, to have as much free space as possible, remove the
    231 <filename>lost+found</filename> directory, which is not needed because
    232 it is only used by <command>fsck</command>.  Since <command>fsck</command>
    233 will never be run on this file system, it is unneeded.</para>
    235 <screen><userinput><command>rmdir /mnt/loop1/lost+found/</command></userinput></screen>
    237 <para>Now make a minimal set of directories.</para>
    239 <screen><userinput><command>mkdir /mnt/loop1/{dev,proc,etc,sbin,bin,lib,mnt,usr,var}</command></userinput></screen>
    241 <para>Add needed device files to the initrd image.  If you use devfs,
    242 the following command works well, as you only have the devices you use
    243 anyway.</para>
    245 <screen><userinput><command>cp -dpR /dev/* /mnt/loop1/dev</command></userinput></screen>
    247 <para>If you used <command>MAKEDEV</command> to create your devices on
    248 your host, you'll want to use something similar to this longer command,
    249 to minimize wasting space with unneeded inodes.</para>
    251 <para><emphasis>You must modify this to suit your rescueimage configuration and
    252 other needs.</emphasis>  For example, you may need
    253 <acronym>SCSI</acronym> devices and may not need
    254 frame buffer devices or the pseudo-terminal directory.  Also, the number
    255 of hard drives and partitions that you include should be the minimal
    256 that you need.  Extensive analysis has not been done on the list below,
    257 so there are more inodes and space to be gained by "fine tuning" this
    258 set.</para>
    260 <screen><userinput><command>mkdir /mnt/loop1/dev/pts
    261 cp -a \
    262     /dev/null /dev/console \
    263     /dev/fb[0-7] /dev/fd /dev/fd0 /dev/fd0h1440 /dev/full \
    264     /dev/hda* /dev/hdb* /dev/hdc* /dev/hdd* /dev/initctl /dev/kmem \
    265     /dev/loop[0-3] /dev/lp0 /dev/mem /dev/port \
    266     /dev/psaux /dev/ram \
    267     /dev/ram0 /dev/ram1 /dev/ram2 /dev/ram3 /dev/random /dev/rtc \
    268     /dev/shm /dev/stderr /dev/stdin /dev/stdout /dev/tty \
    269     /dev/tty[0-9] /dev/ttyS0 /dev/ttyS1 /dev/urandom /dev/zero \
    270   /mnt/loop1/dev</command></userinput></screen>
    272 <para><emphasis>What is needed in the <filename class="directory">/etc</filename>
    273 directory</emphasis></para>
    275 <para>If you choose, you can copy all or selected parts of your
    276 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
    277 files.  But even if each is less than 1024 bytes, you will lose two
    278 inodes and two blocks of space on the initial ramdisk.  This only really
    279 matters because of trying to squeeze everything onto a 1.44MB
    280 diskette.  Every little bit helps.  The strategy taken here is to create
    281 these two files as part of the rescue boot and initialization process.
    282 The commands that make the two files will be embedded inside the
    283 <filename>rcS</filename> script that <filename>linuxrc</filename>
    284 (really <application><ulink
    285 url="">busybox
    286 </ulink></application>) invokes after the initrd is
    287 loaded.  This way no more inodes or blocks are used on the
    288 diskette to carry these files.</para>
    290 <para>Some might like to copy their <filename class="directory">/etc/rc*</filename>
    291 directory into the ramdisk image, but this may have no value, other
    292 than archival use, in a worst-case recovery scenario.  If you want
    293 automatic initialization of the system after repair, they may have some
    294 value. But few people need or want this to happen. If the file system
    295 on the hard drives are corrupted, what good will mount scripts do? Some
    296 scripts may be useful, like access to a network to copy over backup data
    297 when the hard drive's file systems are usable again.  The point is that
    298 you should copy only the parts that you can use because space is at a
    299 premium on the diskette.</para>
    301 <para>Here, only the <filename>fstab</filename> will be included.  This
    302 is handy because it eases mounting of partitions that may be useful and
    303 also can be examined and used as a guide as to what is available and
    304 what may need reconstruction.  Because it may be larger than needed, you
    305 should edit it to remove any useless entries and minimize commentary.
    306 No other editing is needed because the boot scripts are not included and
    307 no automatic mounting will be done using the <filename>fstab</filename>.
    308 If you decide to include some boot scripts that might try to mount
    309 things, change the <filename>fstab</filename>'s entries to
    310 <command>noauto</command> in the options field so they don't cause an
    311 attempt to mount a potentially corrupt partition.  Copy it to
    312 <filename class="directory">/tmp</filename>, edit it as desired and then:</para>
    314 <screen><userinput><command>cp -a /tmp/fstab /mnt/loop1/etc</command></userinput></screen>
    316 <para>Now the initialization script will be added.  As mentioned above,
    317 <command>linuxrc</command> is symlinked to <application><ulink
    318 url="">busybox
    319 </ulink></application>.
    320 After the kernel and initial ramdisk have been loaded, the kernel gives
    321 control to <command>linuxrc</command> (<application><ulink
    322 url="">busybox
    323 </ulink></application>).  It wants to run an <filename class="directory">/etc/init.d/rcS</filename>
    324 script to do any initial setup.</para>
    326 <para>If you use devfsd, you will need to set up the
    327 <filename>rcS</filename> script to handle the devfsd startup.  Put the
    328 following commands in <filename class="directory">/mnt/loop1/etc/init.d/rcS</filename>.
    329 You may also want to add some of the processes shown in the non-devfs
    330 version that follows.</para>
    332 <screen><userinput>#!/bin/sh
    333 mount -t devfs devfs /dev
    334 /sbin/devfsd /dev</userinput></screen>
    336 <para>If you don't use devfsd, but created a static <filename
    337 class="directory">/dev</filename>
    338 directory using <command>MAKEDEV</command>, or any similar process, the
    339 <filename>rcS</filename> script will do slightly different things.
    340 Also, don't forget that it is creating the
    341 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
    342 files, thus saving space on the diskette.</para>
    344 <para>The script made next will mount <filename class="directory">/proc</filename>, turn
    345 on swap (no harm is done if it fails), make the
    346 <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
    347 files, create a log directory and turn on swapping.  Create the script
    348 with:</para>
    350 <screen><userinput><command>mkdir -p /mnt/loop1/etc/init.d
    351 cat &gt;/mnt/loop1/etc/init.d/rcS &lt;&lt; EOD</command>
    352 #!/bin/sh
    353 mount -t proc proc /proc
    354 swapon -a
    356 echo "root:x:0:0:root:/root:/bin/bash" &gt; /etc/passwd
    358 <command>cat &gt; /etc/group &lt;&lt;EOF</command>
    359 root:x:0:
    360 bin:x:1:
    361 sys:x:2:
    362 kmem:x:3:
    363 tty:x:4:
    364 tape:x:5:
    365 daemon:x:6:
    366 floppy:x:7:
    367 disk:x:8:
    368 lp:x:9:
    369 dialout:x:10:
    370 audio:x:11:
    371 <command>EOF
    372 chmod 644 /etc/passwd /etc/group</command>
    374 mkdir /var/log
    376 <command>EOD
    377 chmod u+x /mnt/loop1/etc/init.d/rcS</command></userinput></screen>
    379 <para>Unless you add a lot to this script, which <emphasis>is</emphasis>
    380 encouraged, the above should be reasonably close to what you need.</para>
    382 <para><emphasis>Install packages</emphasis></para>
    384 <para>There are two packages that must be installed.  The <application><ulink
    385 url="">busybox</ulink></application>
    386 package incorporates the core functions that provide a shell and many
    387 basic utilities.  A file system package, like <application><ulink
    388 url="">e2fsprogs</ulink></application>, or
    389 a package for the file system you are using, will provide a minimal
    390 set of utilities for file system checking and reconstruction.  The whole
    391 package will not be installed, but only certain needed components.</para>
    393 <para>If you use devfsd, you will also need to install that software.</para>
    395 <para>Install <application><ulink
    396 url="">busybox</ulink></application>
    397 into the initial ramdisk image.  Busybox incorporates many Unix utility
    398 program functions into a single small executable file.</para>
    400 <screen><userinput><command>make &amp;&amp;
    401 make PREFIX=/mnt/loop1 install &amp;&amp;
    402 &gt; /mnt/loop1/var/utmp</command></userinput></screen>
    404 <para>A <filename>var/utmp</filename> is made because <application><ulink
    405 url="">busybox</ulink></application>
    406 needs it for the reboot command to work properly. If this file doesn't
    407 exist when <application><ulink
    408 url="">busybox</ulink></application>
    409 is started, the reboot command will not work. This would be a bad thing
    410 for people that have no reset button available to them.</para>
    412 <para>If you use devfs to create devices on the fly and free up precious
    413 inodes on the floppy, you'll also install devfsd to facilitate the
    414 devices that <application><ulink
    415 url="">busybox</ulink></application>
    416 expects to find. Use the following commands to do the install.</para>
    418 <screen><userinput><command>mv GNUmakefile Makefile &amp;&amp;
    419 make &amp;&amp;
    420 make PREFIX=/mnt/loop1 install</command></userinput></screen>
    422 <para><emphasis>Install part of <application>e2fsprogs</application></emphasis></para>
    424 <para>If you use the ext2 or ext3 (journaling) file system, you can use
    425 the commands below to install the minimal functionality that should
    426 allow you to get your hard drives usable again.  If you use ext3, keep in
    427 mind that it is a part of the <application>e2fsprogs</application>
    428 package and you can get the components, which are mostly hard links,
    429 from the same places shown below.  If you use some other file system,
    430 such as reiserfs, you should apply the <emphasis>principals</emphasis>
    431 you see here to install parts of that package instead.</para>
    433 <screen><userinput><command>LDFLAGS='-s'
    434 mkdir build &amp;&amp;
    435 cd build &amp;&amp;
    436 ../configure --prefix=/mnt/loop1/usr --with-root-prefix="" \
    437     --disable-swapfs --disable-debugfs \
    438     --enable-dynamic-e2fsck --disable-nls --disable-evms \
    439     --disable-rpath &amp;&amp;
    440 make LDFLAGS="$LDFLAGS" &amp;&amp;
    441 strip -p --strip-unneeded --remove-section=.comment \
    442     -o /mnt/loop1/sbin/mke2fs misc/mke2fs &amp;&amp;
    443 strip -p --strip-unneeded --remove-section=.comment \
    444     -o /mnt/loop1/sbin/e2fsck e2fsck/e2fsck &amp;&amp;
    445 chmod 555 /mnt/loop1/sbin/{mke2fs,e2fsck}
    446 </command></userinput></screen>
    448 <para><emphasis>Two useful utilities</emphasis></para>
    450 <para>There are two very useful utilities that any rescue disk should
    451 have, to help in faster and more accurate recovery.  The first is a
    452 partitioning utility.  The <command>sfdisk</command> program is
    453 used here because of its small size and great power.  Be warned though -
    454 it is not what is considered to be "user friendly".  But the
    455 <command>fdisk</command> and <command>cfdisk</command> programs are
    456 substantially larger or require more shared objects, like <application>ncurses
    457 </application>.</para>
    459 <para>The second utility is an editor.  Most graphical editors are
    460 inherently too large and also require additional shared objects.  For
    461 this reason, <command>ed</command> is used here.  It is small, requires
    462 no additional shared objects and is a regex-based editor that is the
    463 ancestor to almost all subsequent editors that support regex-based
    464 editing, whether graphical or not.  It is a "context editor" and offers
    465 powerful, but non-graphical, editing features. There are many other
    466 editors that may be suitable - feel free to use one of them instead.</para>
    468 <para>Read the <application>busybox</application>
    469 <filename>INSTALL</filename> and <filename>README</filename> files to
    470 see how to include a <command>vi</command> editor. It has not been
    471 investigated here yet, so it may or may not easily fit onto a single
    472 diskette image such as is made here.</para>
    474 <para>You can install these or not, but it is important for you to have
    475 some capability such as these offer.  Exactly how you would install the
    476 utilities you choose will have to be determined by you.</para>
    478 <para><command>Sfdisk</command> and <command>ed</command> are installed
    479 by, essentially, copying them from your host.  Strip is used, just to
    480 assure that they carry no "excess baggage", even though the base
    481 <acronym>LFS</acronym> install should have stripped them already.  Use
    482 the following commands:</para>
    484 <screen><userinput><command>strip -p --strip-unneeded --remove-section=.comment \
    485     -o /mnt/loop1/sbin/sfdisk /sbin/sfdisk
    486 strip -p --strip-unneeded --remove-section=.comment \
    487     -o /mnt/loop1/bin/ed /bin/ed
    488 chmod 555 /mnt/loop1/sbin/sfdisk /mnt/loop1/bin/ed</command></userinput></screen>
    490 <para>Also, keeping in mind your space limitations, copy any other
    491 binaries and libraries you need to the image.  Use the
    492 <command>ldd</command> command to see which libraries you will need to
    493 copy over for any executables.  Don't forget to also strip them
    494 <emphasis>before</emphasis> copying them to the ramdisk image or use the
    495 <command>strip</command>, as above, to "copy" them.</para>
    497 <para><emphasis>Set up the lib directory</emphasis></para>
    499 <para>Once you have installed all the utilities from above and any
    500 additional ones you want, use the <command>ldd</command> command, as
    501 mentioned above, on those that were not listed in this document.  If
    502 any additional libraries are needed, add them into the setup commands
    503 shown next.</para>
    505 <para>If you installed only those things shown above, the shared objects
    506 needed will be minimal.  You can add them to the ramdisk image with:</para>
    508 <screen><userinput><command>strip -p --strip-unneeded --remove-section=.comment \
    509     -o /mnt/loop1/lib/ /lib/ &amp;&amp;
    510 strip -p --strip-unneeded --remove-section=.comment \
    511     -o /mnt/loop1/lib/ /lib/ &amp;&amp;
    512 strip -p --strip-unneeded --remove-section=.comment \
    513     -o /mnt/loop1/lib/ /lib/ &amp;&amp;
    514 chmod 555 /mnt/loop1/lib/{,,}</command></userinput></screen> 
    516 <para>Note that the above commands change the names of the libraries,
    517 eliminating the need for the usual symlinks. If you add any additional
    518 shared objects, be alert for similar opportunities and also the pitfalls
    519 that may be present.</para>
    521 <para><emphasis>Make the compressed initrd</emphasis></para>
    523 <para>Unmount the loopback file.  If you used <command>mount</command>'s
    524 <option>-o loop</option> option, the "bond" between the loop device
    525 and the file will be removed when the unmount is done.  Just omit the
    526 <command>losetup -d /dev/loop1</command> from the following
    527 sequence.  The <userinput>-9</userinput> parameter is used with
    528 <command>gzip</command> to make the smallest possible compressed image.  To
    529 make sure it will fit on the diskette, list the file's size.</para>
    531 <screen><userinput><command>umount /mnt/loop1 &amp;&amp;
    532 losetup -d /dev/loop1 &amp;&amp;  # Omit if mount's -o loop was used
    533 gzip -9 &lt; /tmp/rfloppy &gt; /tmp/rootfs.gz
    534 ls -l /tmp/rootfs.gz</command></userinput></screen> 
    536 <para><emphasis>Join rescueimage and initrd onto a diskette</emphasis></para>
    538 <para>Now the rescueimage and initial ramdisk image will be written to
    539 the boot diskette.  Before doing this, calculate the number of blocks
    540 needed for rescueimage and for <filename>/tmp/rootfs.gz</filename>
    541 (the initial ramdisk), individually, by dividing each
    542 size by 1024 and adding one if there is any remainder.  Add these two
    543 results together.  They must total 1,440 or fewer blocks.  If they total
    544 more than this, don't worry too much.  Changes to make a two-diskette
    545 set are presented later.  Of course, you could reexamine your choices and
    546 try to shrink either the rescueimage or the initial ramdisk image.</para>
    548 <para>To make a single-floppy rescue, using devfs, use the following
    549 commands. If you use the static <filename class="directory">/dev</filename> setup, use
    550 <filename>/dev/fd0</filename> instead of the /dev/floppy/0.</para>
    552 <screen><userinput><command>dd if=rescueimage of=/dev/floppy/0 bs=1k
    553 rdev /dev/floppy/0 0,0
    554 rdev -R /dev/floppy/0 0</command></userinput></screen>
    556 <para><emphasis>Command explanations</emphasis></para>
    558 <para><command>rdev /dev/floppy/0 0,0</command>: sets the root file system
    559 the kernel will use when it boots. Because it loads an initrd, it will
    560 automatically set that as the root device, initially. So, the
    561 <option>0,0</option> gives it "no value", telling the kernel to not
    562 mount any other device. Some folks give <filename>/dev/fd0</filename> or
    563 something similar. But this has effect <emphasis>only</emphasis> when
    564 <command>linuxrc</command> (really <application><ulink
    565 url="">busybox
    566 </ulink></application>) exits and the normal <command>init</command>
    567 processes get invoked. Since this is not being done here, and the floppy
    568 is <emphasis>not</emphasis> a valid file system, it would be useless
    569 here. A hard drive would be a better choice if you are looking to
    570 automatically bring the system up after repair. Since <application><ulink
    571 url="">busybox
    572 </ulink></application> provides the <command>reboot</command> command,
    573 automatic initialization is not needed.</para>
    575 <para>The <command>rdev -R /dev/floppy/0 0</command> will set the
    576 "root flags" to zero. They have no use in this application.</para>
    578 <para>The <command>dd</command> from above showed some results, like</para>
    580 <screen>        480+1 records in
    581         480+1 records out</screen>
    583 <para>In this example the rescueimage (kernel) was 480+1 blocks in size.
    584 Make sure that this number, which may be different for you, matches your
    585 calculations from above.  You need to calculate a "magic number" now
    586 that will be inserted into rescueimage.  The value consists of three
    587 significant parts.  Two are discussed here.  The third is touched upon
    588 later.</para>
    590 <para>Bits 0 - 10 will contain the size of rescueimage, in blocks,
    591 that you calculated above, and which should match the results from the
    592 dd above. Bit 14 (the 15th bit, which is 2 to the 14th power, or 16,384)
    593 is a flag that, when set to 1, tells the kernel an initial ramdisk is to
    594 be loaded. So for the single-floppy rescue diskette, the two numbers
    595 16,384 and 481 (or whatever number is right for your rescueimage size) are
    596 added together to produce a decimal value, like 16865. This value is
    597 inserted into the proper place in rescueimage by the
    598 <command>rdev</command> command done next.</para>
    600 <para>Insert the "magic number" into rescueimage and then write the
    601 root file system right after rescueimage on the floppy by executing the
    602 following commands, with the proper numbers inserted. Notice that the
    603 <command>seek</command> parameter's number must be the size, in blocks,
    604 of your rescueimage. If you use the static <filename class="directory">/dev</filename>
    605 setup, use <filename>/dev/fd0</filename> in the commands below, instead
    606 of <filename>/dev/floppy/0</filename>.</para>
    608 <screen><userinput><command>rdev -r /dev/floppy/0 <replaceable>16865</replaceable>
    609 dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k seek=<replaceable>481</replaceable></command></userinput></screen>
    611 <para>In this command, <command>seek</command> was used to position to
    612 the block following the end of the rescueimage (480+1) and begin writing the
    613 root file system to the floppy.</para>
    614 </sect3>
     65<para>In the future, the build instructions for this CD-ROM will be presented,
     66but they are not available at this writing.</para>
    618 <title>A Two-diskette Rescue Setup</title>
     70<title>Creating a Bootable USB Drive</title>
    620 <para>If you just can't live with a single-diskette rescue system, here
    621 is what to do to make a simple two-diskette system. Note that the
    622 endless possibilities presented by the availability of
    623 <command>linuxrc</command> and other components are not addressed
    624 here. Here you will just use the kernel's ability to prompt for a second
    625 diskette that contains the initrd image and load it.</para>
    627 <para>Modify the above instructions as follows. First a different magic
    628 number is needed. The 15th bit (bit 14) still needs to be set, but the
    629 size of the rescueimage, in blocks, is replaced with a zero.  The third
    630 component, which was not discussed above, is now used. This is the 16th
    631 bit (bit 15) of the "magic number". When set, it tells the kernel to ask
    632 the user to insert the "root" floppy. It then loads the initrd image
    633 from that diskette.  Because the size of the rescueimage was replaced
    634 by zero, the kernel starts loading from the "zero'th" block (the first
    635 one) on the second diskette.</para>
    637 <para>The 16th bit (bit 15) represents 2 raised to the 15th power, or
    638 32,768. So the new magic number is 32,768 + 16384, which is 49,152. This
    639 value tells the kernel to prompt for, and then load, an initial ramdisk
    640 image from the first block on the inserted floppy.  So your first
    641 modification is to the command to write the "magic number" to the rescueimage
    642 image on the diskette.</para>
    644 <screen><userinput><command>rdev -r /dev/floppy/0 <replaceable>49152</replaceable></command></userinput></screen>
    646 <para>Note that the initrd image is <emphasis>not</emphasis> copied to
    647 the diskette yet. Remove the boot diskette and insert another diskette
    648 that will hold your root file system. Run this modified command (don't
    649 forget to use <filename>/dev/fd0</filename> if you don't use devfs).
    650 Note that no <command>seek</command> parameter is used.</para>
    652 <screen><userinput><command>dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k</command></userinput></screen>
    654 <para>That's all there is to it. The possibilities from here are limited only
    655 by your imagination and tenacity in pursuing enhancements. And your
    656 willingness to research available documentation. A good starting point
    657 is the "Documentation" directory in your kernel source tree. More help
    658 may be gained at
    659 <ulink url=""><acronym>LFS </acronym> Hints</ulink>
    660 (please use a mirror site that is suitable) and
    661 <ulink url="">TLDP</ulink>.</para>
     72<para>A USB Pen drive, sometimes called a Thumb drive, is recognized by Linux as
     73a SCSI device.  Using one of these devices as a rescue device has the advantage
     74that it is usually large enough to hold more than a minimal boot image.  You
     75can save critical data to the drive as well as use it to diagnose and recover
     76a damaged system.  Booting such a drive requires BIOS support, but building the
     77system consists of formatting the drive, adding <application>grub</application>
     78as well as the kernel and supporting files.</para>
  • x/installing/x-setup.xml

    r310960e4 r46b900a  
    9898<indexterm zone="x-setup fonts">
    99   <primary sortas="e-etc-X11-xorg.conf">/etc/X11/xorg.conf</primary>
     99  <primary sortas="e-etc-X11-xorg-conf">/etc/X11/xorg.conf</primary>
Note: See TracChangeset for help on using the changeset viewer.