diff --git a/LDP/howto/docbook/Hard-Disk-Upgrade.sgml b/LDP/howto/docbook/Hard-Disk-Upgrade.sgml
new file mode 100644
index 00000000..eb5511a8
--- /dev/null
+++ b/LDP/howto/docbook/Hard-Disk-Upgrade.sgml
@@ -0,0 +1,808 @@
+
+
+
+
+
+
+
+ Hard Disk Upgrade Mini How-To
+
+ Yves
+ Bellefeuille
+
+ yan@storm.ca
+
+
+
+ Konrad
+ Hinsen
+
+ hinsen@cnrs-orleans.fr
+
+
+ v2.11, 13 April 2000
+
+ How to copy a Linux system from one disk to
+ another.
+
+
+
+
+
+
+
+ Introduction
+ This document explains how to transfer, or migrate, an entire Linux
+ system, including LILO, from one hard disk to
+ another.
+
+ In the following explanation, /dev/hda (first
+ IDE hard disk) means the old
+ disk, and /dev/hdb (second IDE
+ hard disk) means the new disk.
+
+ Specific partitions on the old disk are referred
+ to as /dev/hda1, /dev/hda2, and so
+ on. Specific partitions on the new disk are referred
+ to as /dev/hdb1, /dev/hdb2, and
+ so on.
+
+ The explanations in this document are based on Red Hat 6.0. They have
+ also been tested with Debian 2.1, Slackware 3.5 and SuSE 6.2; we
+ indicate a few differences to note if you're using those
+ distributions.
+
+ If the commands don't work properly on your system, please let us
+ know, mentioning what distribution you're using.
+
+
+
+
+
+ Install both disks on your system
+ Modern systems can accept four EIDE devices on the
+ hard disk controller, so there shouldn't be any problem installing both disks on
+ your system at the same time, even if you also have other
+ EIDE devices. Hard disks and CD-ROM
+ drives are typical EIDE devices. Floppy drives and tape
+ drives are usually connected to the floppy drive controller rather than to
+ the hard disk controller.
+
+ SCSI adapters are even more flexible and can accept
+ seven devices. If you're lucky (and rich) enough to have a
+ SCSI adapter, you probably already know this, and you
+ probably know which of your devices are SCSI devices!
+ For more information, see the SCSI How-To.
+
+ Even the oldest systems can accept two devices on the hard disk
+ controller, so you can still install both hard disks at the same
+ time. However, if you already have another device installed in addition to
+ your hard disk (for example, if you have both a hard disk and a
+ CD-ROM drive), you'll have to remove the other device
+ to be able to install the old hard disk and the new hard disk at the same
+ time.
+
+ You must configure the disks as master or
+ slave by installing the disks' jumpers as
+ appropriate. You'll often find configuration information on the disks
+ themselves; if not, consult the manuals or the disks'
+ manufacturers.
+
+ You must also inform the BIOS of the disks'
+ presence and of their geometry. Usually, you enter
+ the BIOS setup program by pressing a key during the
+ system boot-up. Here's what to do for some common
+ BIOSes:
+
+
+
+ Acer notebooks
+ F2 key during Power-On Self-Test
+ (POST)
+
+
+ American Megatrends (AMI)
+ Del key during Power-On
+ Self-Test
+
+
+ Award
+ Del, or
+
+ Ctrl
+ Alt
+ Esc
+
+
+
+ Compaq
+ F10 key after the square appears in
+ the top right corner of the screen during
+ boot-up
+
+
+ Dell
+
+ Ctrl
+ Alt
+ Enter
+
+
+
+
+ DTK
+ Esc key during Power-On Self-Test
+
+
+ Hewlett-Packard Pavilion
+ F1 key during HP blue splash screen
+
+
+ IBM Aptiva 535
+ F1 while the square with the wavy
+ lines is displayed in the upper right corner during power-on
+ Does this also apply to other Aptiva models?
+
+
+
+
+ IBM PS/2
+
+ Ctrl
+ Alt
+ Del
+ , then
+ Ctrl
+ Alt
+ Ins
+ when the cursor is in the top right corner
+
+
+
+ Mr. BIOS
+
+ Ctrl
+ Alt
+ S
+ during Power-On Self-Test
+
+
+
+ Packard Bell
+ For some models, F1 or
+ F2 key during Power-On Self-Test
+
+
+
+ Phoenix
+
+ Ctrl
+ Alt
+ Esc
+ ,
+ Ctrl
+ Alt
+ S
+ , or
+ Ctrl
+ Alt
+ Enter
+
+
+
+
+
+ Many older systems require an Installation or
+ Reference Disk.
+
+
+
+ We're interested in receiving information on other BIOSes to add them
+ to this list.
+
+ Reboot the system and login as root. If you use the
+ su command to become the user root, use
+ su -, with the hyphen option.
+
+
+
+
+
+
+ Unmount non-Linux partitions and network drives
+ Some people like to mount partitions from other operating systems
+ (DOS, Windows, OS/2, etc.) so they can use them under Linux. These
+ partitions must be created and copied under their own operating system,
+ and you should unmount them before copying your Linux partition. For
+ example, if you have a DOS partition mounted at
+ /dos, you must unmount it with this
+ command:
+ umount /dos
+
+
+ Note that the command is umount, without the first
+ letter n in the word
+ unmount.
+
+ You should also unmount network drives.
+
+
+
+
+
+
+ Partition the new disk
+ Use this command to partition the new disk:
+ fdisk /dev/hdb
+
+ EIDE devices are identified as
+ hda,
+ hdb,
+ hdc, and
+ hdd in the
+ /dev directory. Partitions on these
+ disks can range from 1 to 16 and are also in the
+ /dev directory. For example,
+ /dev/hda4 refers to partition 4 on
+ hard disk a (first EIDE hard disk).
+
+ SCSI devices are listed as devices
+ sda,
+ sdb,
+ sdc,
+ sdd,
+ sde,
+ sdf, and
+ sdg in the
+ /dev directory. Similarly,
+ partitions on these disks can range from 1 to 16 and are also in the
+ /dev directory. For example,
+ /dev/sda3
+ refers to partition 3 on SCSI disk a (first
+ SCSI hard disk).
+
+ For Linux partitions with the ext2 file system, use system ID 83. For
+ swap partitions, use system ID 82.
+
+ For more information on partitioning, see the Installation How-To and
+ the Partition Mini How-To.
+
+ If your new disk has over 1024 cylinders, see the Large Disk Mini
+ How-To. In brief, you should install all files required to boot Linux
+ within the first 1024 cylinders. One way to do this is to create a small
+ partition (5 Mb or so) just for the
+ /boot directory at the beginning of
+ the disk. (Slackware only: The kernel is at
+ /vmlinuz rather than
+ /boot/vmlinuz, so you should put both the
+ / directory and the
+ /boot
+ directory in this partition.)
+
+ Partitions for systems other than Linux should be created using their
+ own fdisk or equivalent command rather than with
+ Linux's fdisk.
+
+
+
+
+
+
+ Format the new disk
+ Use the following command to format Linux partitions using ext2fs on the new disk:
+ mkfs.ext2 /dev/hdb1
+
+ To check the disk for bad blocks (physical defects), add the
+ option just before
+ /dev/hdb1.
+
+ If the new disk will have more than one Linux partition, format the
+ other partitions with mkfs.ext2 /dev/hdb2,
+ mkfs.ext2 /dev/hdb3, and so on. Add the
+
+ option if desired.
+
+
+ With older distributions, the command
+ mkfs -t ext2 -c /dev/hdb1
+ didn't check for bad blocks under any of Red Hat, Debian or
+ Slackware, contrary to what the man page stated. This has now been
+ fixed.
+
+
+ To format a swap partition, use this command:
+ mkswap /dev/hdb1
+
+ Again, you can add the option before
+ /dev/hdb1 to check for bad blocks.
+
+
+
+
+
+
+ Mount the new disk
+ Create a directory where you'll mount the new disk, for example
+ /new-disk,
+ and mount it there:
+
+mkdir /new-disk
+mount -t ext2 /dev/hdb1 /new-disk
+
+ If the new disk will have more than one Linux partition, mount them
+ all under /new-disk
+ with the same organization they'll have later.
+
+ Example
+ The new disk will have four Linux partitions, as follows:
+
+/dev/hdb1: /
+/dev/hdb2: /home
+/dev/hdb3: /var
+/dev/hdb4: /var/spool
+
+
+ Mount the four partitions under
+ /new-disk as follows:
+
+/dev/hdb1: /new-disk
+/dev/hdb2: /new-disk/home
+/dev/hdb3: /new-disk/var
+/dev/hdb4: /new-disk/var/spool
+
+ You must create the mount points for each level
+ before you mount the partitions at that level.
+
+ Example
+
+
+mkdir /new-disk [1st level]
+mount -t ext2 /dev/hdb1 /new-disk
+
+mkdir /new-disk/home [2nd level]
+mount -t ext2 /dev/hdb2 /new-disk/home
+
+mkdir /new-disk/var [2nd level also]
+mount -t ext2 /dev/hdb3 /new-disk/var
+
+mkdir /new-disk/var/spool [3rd level]
+mount -t ext2 /dev/hdb4 /new-disk/var/spool
+
+
+ If you've created a mount point at
+ /new-disk/tmp, you'll need to
+ correct the directory's permissions to let all users access it:
+ chmod 1777 /new-disk/tmp
+
+
+
+
+
+
+ Copy the files from the old disk to the new disk
+
+ You might want to go to single-user mode before starting to copy the
+ disk, in order to shut down the system daemons and preserve the state of
+ the logs, and to prevent users from logging in:
+ /sbin/telinit 1
+
+ When copying the hard disk, you want to copy all directories and
+ files, including links.
+
+ However, you don't want to copy the directory
+ /new-disk, since this
+ would copy the new disk to itself!
+
+ Furthermore, you want to create the
+ /proc directory on the new disk,
+ but you don't want to copy its contents:
+ /proc is a
+ virtual file system and doesn't have any actual
+ files, but rather contains information on the processes running on the
+ system.
+
+ Here are three different ways to copy the old disk to the new
+ one. This may take quite a while, especially if you have a large disk or
+ little memory. You can expect to be able to copy 10 Mb per minute, and
+ possibly much more.
+
+ You can follow the copy's progress by using the command
+ df from another terminal. Try
+ watch df or watch ls -l /new-disk
+ to see a report updated every two seconds; press
+ Ctrl
+ C
+
+ to end the display. Be aware that running the
+ watch program itself will slow down the copying.
+
+
+
+ cp -ax / /new-disk
+
+ This is the simplest method, but will only work if your original
+ Linux system is on a single disk partition.
+
+ The option preserves the original system as
+ much as possible. The option limits cp to a
+ single file system; this is necessary to avoid copying the
+ /new-disk
+ and
+ /proc directories.
+
+ SuSE only
+ With this method only, you must also create the directory
+ /dev/pts on the new
+ disk. Use the command
+ mkdir /new-disk/dev/pts".
+
+
+
+ When using the option, recent versions of
+ cp will create the directories
+ /new-disk/new-disk and
+ /new-disk/proc,
+ although the directories will be empty. If these directories are
+ created, you should delete
+ /new-disk/new-disk, and
+ keep /new-disk/proc.
+
+
+
+
+
+
+cd / && echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-disk | sh
+
+
+ (write this all on one line)
+
+ This goes to the root directory and then copies all files and
+ directories except
+ /new-disk and
+ /proc to
+ /new-disk. Note that the
+ first option after ls is the number 1, not the letter L!
+
+ This command should work in all circumstances.
+
+
+
+
+cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin /tmp /usr /var /new-disk
+
+
+ (write this all on one line)
+
+ The last directory,
+ /new-disk, is the destination
+ for the cp command. All the other directories are
+ the sources. Therefore, we're copying all the directories we're
+ listing to /new-disk.
+
+ With this method, you simply list yourself the directories you
+ want to copy. Here we listed all the directories except
+ /new-disk
+ and /proc.
+ If you can't use the other methods for any reason, you
+ can always use this command to manually specify the directories
+ you want to copy.
+
+ With this method only, if there are any files in the root
+ directory itself, you need another command to copy them. In
+ particular, this is required with Debian and Slackware, since these
+ distributions put files in the root directory:
+ cp -dp /* /.* /new-disk
+
+
+
+
+
+ Previous versions of the Mini How-To stated that you could also use
+ tar to copy the disk, but this method was found to have
+ a bug. There are of course many other ways to copy the disks, but these
+ three are the simplest, quickest, and most reliable.
+
+ After using any of these three methods, you must also create the
+ /proc
+ directory on the new disk, if it doesn't already exist:
+ mkdir /new-disk/proc
+
+ At this point, you may verify the file structure on the new disk, if you wish:
+ umount /new-disk
+fsck.ext2 -f /dev/hdb1
+mount -t ext2 /dev/hdb1 /new-disk
+
+
+ If the new disk has more than one partition, you must unmount them
+ from the bottom up before running
+ fsck.ext2: in the example mentioned above, you'd first
+ unmount the 3rd level partitions, then the 2nd level
+ partitions, and then the 1st level partition.
+
+ You may also compare the two disks, to ensure that the files were
+ copied properly:
+ find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -exec cmp {} /new-disk{} \;
+
+
+ (write this all on one line)
+
+
+ Slackware only
+
+ A basic Slackware installation ("A" series only)
+ doesn't include the cmp command, so you won't be able
+ to run this command if you have only installed the basic files. The
+ cmp command is in the "AP1" series.)
+
+
+ This will only compare regular files, not character or block special
+ files (in the
+ /dev directory), sockets, etc.,
+ since the cmp command doesn't work properly with
+ these. We would welcome suggestions on how to verify these "special"
+ files.
+
+
+
+
+
+
+ Modify /new-disk/etc/fstab as appropriate
+ If your new disk doesn't have the same partitions or organization as the
+ old disk, modify the file /new-disk/etc/fstab on the
+ new disk as appropriate.
+
+ Make sure that the disk partitions (first column) correspond to the
+ organization you'll have with the new disk, once the old disk has been
+ removed, and that you're only mounting one partition at
+ / as shown in the second column.
+
+ For more information on the format of the file
+ /etc/fstab, see the Linux System Administrator's
+ Guide, section 4, under Mounting and unmounting.
+
+ For swap partitions, use a line similar to this one:
+ /dev/hda1 swap swap defaults 0 0
+
+
+
+
+
+
+
+ Prepare LILO to boot the new disk
+
+ (Thanks to Rick Masters for helping with this.)
+
+
+ We're assuming that LILO is installed on the hard
+ disk's Master Boot Record (MBR); this seems to be the
+ most common configuration. You want to install LILO on
+ what's presently the second hard disk but will become the first hard disk.
+
+ Edit the file /new-disk/etc/lilo.conf as follows:
+ disk=/dev/hdb bios=0x80 # Tell LILO to treat the second
+ # disk as if it were the first
+ # disk (BIOS ID 0x80).
+boot=/dev/hdb # Install LILO on second hard
+ # disk.
+map=/new-disk/boot/map # Location of "map file".
+install=/new-disk/boot/boot.b # File to copy to hard disk's
+ # boot sector.
+prompt # Have LILO show "LILO boot:"
+ # prompt.
+timeout=50 # Boot default system after 5
+ # seconds. (Value is in tenths of
+ # seconds.)
+image=/new-disk/boot/vmlinuz # Location of Linux kernel. The
+ # actual name may include a version
+ # number, for example
+ # "vmlinuz-2.0.35".
+ label=linux # Label for Linux system.
+ root=/dev/hda1 # Location of root partition on
+ # new hard disk. Modify this as
+ # appropriate for your system.
+ # Note that you must use the name
+ # of the future location, once the
+ # old disk has been removed.
+ read-only # Mount partition read-only at
+ # first, to run fsck.
+
+
+ Slackware only
+ Use image=/new-disk/vmlinuz.
+
+
+ If you're using a SCSI hard disk, you may have to
+ add a line with initrd. See your existing file
+ /etc/lilo.conf.
+
+ Install LILO on the new disk:
+ /sbin/lilo -C /new-disk/etc/lilo.conf
+
+
+ The option tells LILO what
+ configuration file to use.
+
+
+
+
+
+
+ Make a boot diskette (optional)
+
+ If you wish, you can make a boot diskette, in case you run into
+ problems when trying to boot the new disk.
+
+ Insert an empty diskette, format it, create a file system on it and
+ mount it:
+ fdformat /dev/fd0H1440
+mkfs.ext2 /dev/fd0
+mount -t ext2 /dev/fd0 /mnt
+
+ Debian only
+ With Debian 2.x, use /dev/fd0u1440 instead of
+ /dev/fd0H1440. With Debian 1.x, use
+ /dev/fd0h1440, with a lower case
+ h.
+
+
+ Debian only
+ With Debian 2.x, use superformat instead of
+ fdformat.
+ You can ignore the error
+ mformat: command not found.
+ With Debian 1.x, if you don't have the command
+ fdformat, you can omit it if the floppy
+ is already formatted. In this case, you should check the diskette for
+ bad blocks by adding after the
+ mkfs.ext2 command.
+
+
+ Slackware only
+ Use /dev/fd0u1440 instead of
+ /dev/fd0H1440. With older versions, try
+ /dev/fd0h1440, with a lower case
+ h.
+
+
+ SuSE only
+ Use /dev/fd0u1440 instead of
+ /dev/fd0H1440.
+
+
+ Copy all files in /boot to the
+ diskette:
+ cp -dp /boot/* /mnt
+
+
+ Red Hat only
+ If the /boot directory
+ contains both vmlinux and
+ vmlinuz files (note the difference in the last
+ letter), you only need to copy the vmlinuz files to
+ the boot diskette. They are the same as the vmlinux
+ files, except that they're compressed to save space.
+
+
+ Slackware only
+ Copy the file /vmlinuz to the boot diskette;
+ use the command cp /vmlinuz /mnt.
+
+
+ Create a new file /mnt/lilo.conf as follows:
+ boot=/dev/fd0 # Install LILO on floppy disk.
+map=/mnt/map # Location of "map file".
+install=/mnt/boot.b # File to copy to floppy's
+ # boot sector.
+prompt # Have LILO show "LILO boot:"
+ # prompt.
+timeout=50 # Boot default system after 5
+ # seconds. (Value is in tenths of
+ # seconds.)
+image=/mnt/vmlinuz # Location of Linux kernel on
+ # floppy. The actual name may
+ # include a version number, for
+ # example "vmlinuz-2.0.35".
+ label=linux # Label for Linux system.
+ root=/dev/hda1 # Location of root partition on
+ # new hard disk. Modify this as
+ # appropriate for your system.
+ # Note that you must use the name
+ # of the future location, once the
+ # old disk has been removed.
+ read-only # Mount partition read-only at
+ # first, to run fsck.
+
+
+ Install LILO on the boot diskette:
+ /sbin/lilo -C /mnt/lilo.conf
+
+
+ The option tells LILO what
+ configuration file to use.
+
+ Unmount the diskette:
+ umount /mnt
+
+
+
+
+
+
+ Remove the old disk
+ Shut down the system and remove the old disk. Remember to modify the
+ disk jumpers and the BIOS information to reflect the
+ changes.
+
+
+
+
+
+
+ Reboot the system, modify LILO configuration file
+ Reboot the system. If you have problems, you can use the boot diskette
+ you just make. To do so, you may have to modify your
+ BIOS's boot-up sequence to
+ A:, C:.
+
+ You should modify the file
+ /etc/lilo.conf in case you later want to run
+ LILO again. Here's an example of how the file can look:
+ boot=/dev/hda # Install LILO on first hard
+ # disk.
+map=/boot/map # Location of "map file".
+install=/boot/boot.b # File to copy to floppy's
+ # boot sector.
+prompt # Have LILO show "LILO boot:"
+ # prompt.
+timeout=50 # Boot default system after 5
+ # seconds. (Value is in tenths of
+ # seconds.)
+image=/boot/vmlinuz # Location of Linux kernel. The
+ # actual name may include a version
+ # number, for example
+ # "vmlinuz-2.0.35".
+ label=linux # Label for Linux system.
+ root=/dev/hda1 # Location of root partition on
+ # new hard disk. Modify this as
+ # appropriate for your system.
+ read-only # Mount partition read-only at
+ # first, to run fsck.
+
+
+ Slackware only
+ Use image=/vmlinuz.
+
+
+
+
+
+
+
+ Acknowledgements
+ Thanks to Scott Christensen, Frank Damgaard, Alexandre Fornieles, David
+ Fullerton, Igor Furlan, Jerry Gaines, Chris Gillespie, Nicola Girardi,
+ Per Gunnar Hansoe, Richard Hawes, Ralph Heimueller, Gerald Hermant, Andy
+ Heynderickx, Paul Koning, Hannu Liljemark, Claes Maansson, Rick Masters,
+ Jason Priebe, Josh Rabinowitz, Douglas Rhodes, Valentijn Sessink, Kragen
+ Sitaker, Stephen Thomas, and Gerald Willman.
+
+ This document may be translated into any language. If you do so, please
+ send a copy of the translation to Konrad Hinsen
+ hinsen@cnrs-orleans.fr.
+
+
+
+
+