Changeset 46b900a for postlfs


Ignore:
Timestamp:
02/12/2005 06:05:09 AM (19 years ago)
Author:
Bruce Dubbs <bdubbs@…>
Branches:
10.0, 10.1, 11.0, 11.1, 11.2, 11.3, 12.0, 12.1, 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, kea, ken/TL2024, ken/inkscape-core-mods, ken/tuningfonts, krejzi/svn, lazarus, lxqt, nosym, perl-modules, plabs/newcss, plabs/python-mods, python3.11, qt5new, rahul/power-profiles-daemon, renodr/vulkan-addition, systemd-11177, systemd-13485, trunk, upgradedb, xry111/intltool, xry111/llvm18, xry111/soup3, xry111/test-20220226, xry111/xf86-video-removal
Children:
3616dc5
Parents:
310960e4
Message:

Rewrote rescue bootdisk page

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@3448 af4574ff-66df-0310-9fd7-8a98e5e911e0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • postlfs/config/bootdisk.xml

    r310960e4 r46b900a  
    66]>
    77
    8 <sect1 id="postlfs-config-bootdisk" xreflabel="Creating a Custom Book Disk">
     8<sect1 id="postlfs-config-bootdisk" xreflabel="Creating a Custom Boot Device">
    99<sect1info>
    1010<othername>$LastChangedBy$</othername>
     
    1212</sect1info>
    1313<?dbhtml filename="bootdisk.html"?>
    14 <title>Creating a Custom Boot Disk</title>
     14<title>Creating a Custom Boot Device</title>
    1515
    1616<sect2>
    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>
    2525
    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>
    3431
    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>
    3837</sect2>
    3938
    4039<sect2>
    41 <title>This Minimal Decent Rescue Disk</title>
     40<title>Creating a Rescue Floppy</title>
    4241
    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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
    47 </ulink></application> and <application><ulink
    48 url="http://freshmeat.net/projects/e2fsprogs/">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='http://www.toms.net/rb/'/>.  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>
    5148
    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>
    5849</sect2>
    5950
    6051<sect2>
    61 <title>Build the Rescue Boot Disk</title>
    62 <sect3>
    63 <title>Prerequisites</title>
     52<title>Creating a Bootable CD-ROM</title>
    6453
    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>
    7058
    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='ftp://ftp.linuxfromscratch.org/lfs-boot-cd'/>.
     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>
    7364
    74 <para>You need to have loopback device support enabled in your host's
    75 kernel to use this procedure.</para>
    76 
    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>
    86 
    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>
    93 
    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>
    103 
    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>
    107 
    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>
    114 
    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>
    124 
    125 <sect3>
    126 <title>Rescue Disk Build Process</title>
    127 
    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>
    139 
    140 <para>The initial ramdisk will be automatically loaded at boot time if
    141 setup is done correctly.</para>
    142 
    143 <para><emphasis>Make a mount point and an empty file to hold a file
    144 system</emphasis></para>
    145 
    146 <screen><userinput><command>mkdir -p /mnt/loop1
    147 dd if=/dev/zero of=/tmp/rfloppy bs=1k count=4096</command></userinput></screen>
    148 
    149 <para><emphasis>Command explanations</emphasis></para>
    150 
    151 <para><command>dd</command>: This is a generalized input-to-output copy
    152 utility that also has many transformation capabilities.</para>
    153 
    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>
    157 
    158 <para><parameter>of=/tmp/rfloppy</parameter>: This parameter directs
    159 <command>dd</command>'s output to <filename>/tmp/rfloppy</filename>.</para>
    160 
    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>
    164 
    165 <para><emphasis>Bind the file to a loopback device, make a file system and mount it.</emphasis></para>
    166 
    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>
    174 
    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>
    178 
    179 <para><emphasis>Command explanations</emphasis></para>
    180 
    181 <para><command>losetup /dev/loop1 /tmp/rfloppy</command>: This
    182 command "binds" a loopback device to the empty file.</para>
    183 
    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>
    190 
    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>
    195 
    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>
    201 
    202 <screen><userinput><command>mke2fs -F -m 0 -N 504 /tmp/rfloppy
    203 mount -o loop /tmp/rfloppy /mnt/loop1</command></userinput></screen>
    204 
    205 <para><emphasis>Command explanations</emphasis></para>
    206 
    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>
    213 
    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>
    218 
    219 <para><emphasis>Add components to the file system</emphasis></para>
    220 
    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>
    229 
    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>
    234 
    235 <screen><userinput><command>rmdir /mnt/loop1/lost+found/</command></userinput></screen>
    236 
    237 <para>Now make a minimal set of directories.</para>
    238 
    239 <screen><userinput><command>mkdir /mnt/loop1/{dev,proc,etc,sbin,bin,lib,mnt,usr,var}</command></userinput></screen>
    240 
    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>
    244 
    245 <screen><userinput><command>cp -dpR /dev/* /mnt/loop1/dev</command></userinput></screen>
    246 
    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>
    250 
    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>
    259 
    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>
    271 
    272 <para><emphasis>What is needed in the <filename class="directory">/etc</filename>
    273 directory</emphasis></para>
    274 
    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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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>
    289 
    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>
    300 
    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>
    313 
    314 <screen><userinput><command>cp -a /tmp/fstab /mnt/loop1/etc</command></userinput></screen>
    315 
    316 <para>Now the initialization script will be added.  As mentioned above,
    317 <command>linuxrc</command> is symlinked to <application><ulink
    318 url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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>
    325 
    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>
    331 
    332 <screen><userinput>#!/bin/sh
    333 mount -t devfs devfs /dev
    334 /sbin/devfsd /dev</userinput></screen>
    335 
    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>
    343 
    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>
    349 
    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
    355 
    356 echo "root:x:0:0:root:/root:/bin/bash" &gt; /etc/passwd
    357 
    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>
    373 
    374 mkdir /var/log
    375 
    376 <command>EOD
    377 chmod u+x /mnt/loop1/etc/init.d/rcS</command></userinput></screen>
    378 
    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>
    381 
    382 <para><emphasis>Install packages</emphasis></para>
    383 
    384 <para>There are two packages that must be installed.  The <application><ulink
    385 url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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="http://freshmeat.net/projects/e2fsprogs/">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>
    392 
    393 <para>If you use devfsd, you will also need to install that software.</para>
    394 
    395 <para>Install <application><ulink
    396 url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
    397 into the initial ramdisk image.  Busybox incorporates many Unix utility
    398 program functions into a single small executable file.</para>
    399 
    400 <screen><userinput><command>make &amp;&amp;
    401 make PREFIX=/mnt/loop1 install &amp;&amp;
    402 &gt; /mnt/loop1/var/utmp</command></userinput></screen>
    403 
    404 <para>A <filename>var/utmp</filename> is made because <application><ulink
    405 url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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>
    411 
    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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
    416 expects to find. Use the following commands to do the install.</para>
    417 
    418 <screen><userinput><command>mv GNUmakefile Makefile &amp;&amp;
    419 make &amp;&amp;
    420 make PREFIX=/mnt/loop1 install</command></userinput></screen>
    421 
    422 <para><emphasis>Install part of <application>e2fsprogs</application></emphasis></para>
    423 
    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>
    432 
    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>
    447 
    448 <para><emphasis>Two useful utilities</emphasis></para>
    449 
    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>
    458 
    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>
    467 
    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>
    473 
    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>
    477 
    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>
    483 
    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>
    489 
    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>
    496 
    497 <para><emphasis>Set up the lib directory</emphasis></para>
    498 
    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>
    504 
    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>
    507 
    508 <screen><userinput><command>strip -p --strip-unneeded --remove-section=.comment \
    509     -o /mnt/loop1/lib/libc.so.6 /lib/libc-2.3.3.so &amp;&amp;
    510 strip -p --strip-unneeded --remove-section=.comment \
    511     -o /mnt/loop1/lib/ld-linux.so.2 /lib/ld-2.3.3.so &amp;&amp;
    512 strip -p --strip-unneeded --remove-section=.comment \
    513     -o /mnt/loop1/lib/libdl.so.2 /lib/libdl-2.3.3.so &amp;&amp;
    514 chmod 555 /mnt/loop1/lib/{libc.so.6,ld-linux.so.2,libdl.so.2}</command></userinput></screen> 
    515 
    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>
    520 
    521 <para><emphasis>Make the compressed initrd</emphasis></para>
    522 
    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>
    530 
    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> 
    535 
    536 <para><emphasis>Join rescueimage and initrd onto a diskette</emphasis></para>
    537 
    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>
    547 
    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>
    551 
    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>
    555 
    556 <para><emphasis>Command explanations</emphasis></para>
    557 
    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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">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="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
    572 </ulink></application> provides the <command>reboot</command> command,
    573 automatic initialization is not needed.</para>
    574 
    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>
    577 
    578 <para>The <command>dd</command> from above showed some results, like</para>
    579 
    580 <screen>        480+1 records in
    581         480+1 records out</screen>
    582 
    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>
    589 
    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>
    599 
    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>
    607 
    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>
    610 
    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>
    61567</sect2>
    61668
    61769<sect2>
    618 <title>A Two-diskette Rescue Setup</title>
     70<title>Creating a Bootable USB Drive</title>
    61971
    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>
    626 
    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>
    636 
    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>
    643 
    644 <screen><userinput><command>rdev -r /dev/floppy/0 <replaceable>49152</replaceable></command></userinput></screen>
    645 
    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>
    651 
    652 <screen><userinput><command>dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k</command></userinput></screen>
    653 
    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="http://linuxfromscratch.org/hints/news.html"><acronym>LFS </acronym> Hints</ulink>
    660 (please use a mirror site that is suitable) and
    661 <ulink url="http://www.tldp.org">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>
    66279
    66380</sect2>
Note: See TracChangeset for help on using the changeset viewer.