home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Edition 1: Linux / CD1.iso / doc / HOWTO / mini / Hard-Disk-Upgrade < prev    next >
Text File  |  1998-10-14  |  17KB  |  489 lines

  1.  
  2.                          HARD DISK UPGRADE MINI HOW-TO
  3.                                        
  4. Yves Bellefeuille,
  5. yan@ottawa.com
  6.  
  7.    
  8.    
  9.    Version 1.0,
  10.    31 January 1998
  11.      _________________________________________________________________
  12.    
  13.    
  14.    
  15.    _How to copy a Linux system from one hard disk to another._
  16.      _________________________________________________________________
  17.    
  18.    
  19.    
  20.    1. Install both disks on your system
  21.    2. Unmount non-Linux partitions
  22.    3. Partition the new disk
  23.    4. Format the new disk
  24.    5. Mount the new disk
  25.    6. Copy the files from the old disk to the new disk
  26.    7. Modify /etc/fstab as appropriate
  27.    8. Prepare LILO to boot the new disk
  28.    9. Remove the old disk
  29.    10. Reboot the system, install LILO on the new disk
  30.      _________________________________________________________________
  31.    
  32.    
  33.    
  34.    Recently, I replaced my small 249 Mb hard disk with a larger disk. I
  35.    wanted to transfer my entire Linux system, including LILO, from the
  36.    old disk to the new disk. This is how I did it.
  37.    
  38.    In the following explanation, I use "/dev/hda" to denote the "old"
  39.    disk, and "/dev/hda1" means the old Linux partition. "/dev/hdb" means
  40.    the "new" disk, and "/dev/hdb1" means the new Linux partition.
  41.    
  42.    Therefore, I'm assuming that Linux is on the first partition of the
  43.    first disk. Modify this as appropriate for your set-up.
  44.    
  45.    This document is based on my own system, running Red Hat 4.2, and I've
  46.    tested all the commands that follow with that distribution. I've also
  47.    tested them under Debian 1.3.1 and Slackware 3.3, and I indicate a few
  48.    differences to note if you're using those distributions.
  49.    
  50.    If the commands don't work properly on your system, please let me
  51.    know, telling me what version of Linux you're using.
  52.      _________________________________________________________________
  53.    
  54.    
  55.    
  56. 1. Install both disks on your system
  57.  
  58.    
  59.    
  60.    Modern systems can accept four "EIDE" devices on the hard disk
  61.    controller, so there shouldn't be any problem installing both disks on
  62.    your system at the same time, even if you also have other EIDE
  63.    devices. Hard disks and CD-ROM drives are typical EIDE devices. Floppy
  64.    drives and tape drives are usually connected to the floppy drive
  65.    controller rather than to the hard disk controller.
  66.    
  67.    SCSI adapters are even more flexible and can accept seven devices. If
  68.    you're lucky (and rich) enough to have a SCSI adapter, you probably
  69.    already know this, and you probably know which of your devices are
  70.    SCSI devices! For more information, see the SCSI How-To.
  71.    
  72.    Even the oldest systems can accept two devices on the hard disk
  73.    controller, so you can still install both hard disks at the same time.
  74.    However, if you already have another device installed in addition to
  75.    your hard disk (for example, if you have both a hard disk and a CD-ROM
  76.    drive), you'll have to remove the other device to be able to install
  77.    the old hard disk and the new hard disk at the same time.
  78.    
  79.    You must configure the disks as "master" or "slave" by installing the
  80.    disks' jumpers as appropriate. You'll often find configuration
  81.    information on the disks themselves; if not, consult the manuals or
  82.    the disks' manufacturers.
  83.    
  84.    You must also inform the BIOS of the disks' presence and of their
  85.    "geometry". Usually, you enter the BIOS setup programme by pressing a
  86.    key during the system boot-up. Here's what to do for some common
  87.    BIOSes:
  88.    
  89.      
  90.      
  91.      American Megatrends (AMI): Del key during Power-On Self-Test (POST)
  92.      
  93.      Award: Ctrl-Alt-Esc
  94.      
  95.      Compaq: F10 key after the square appears in the top right corner of
  96.      the screen during boot-up
  97.      
  98.      Dell: Ctrl-Alt-Enter
  99.      
  100.      DTK: Esc key during Power-On Self-Test
  101.      
  102.      IBM PS/2: Ctrl-Alt-Del, then Ctrl-Alt-Ins when the cursor is in the
  103.      top right corner
  104.      
  105.      Phoenix: Ctrl-Alt-Esc, or Ctrl-Alt-S, or Ctrl-Alt-Enter
  106.      
  107.      Many older systems require an Installation or Reference Disk.
  108.      
  109.    
  110.    
  111.    (I'm interested in receiving information on other BIOSes to add them
  112.    to this list.)
  113.    
  114.    Reboot the system and login as root.
  115.      _________________________________________________________________
  116.    
  117.    
  118.    
  119. 2. Unmount non-Linux partitions
  120.  
  121.    
  122.    
  123.    Some people like to mount partitions from other operating systems
  124.    (DOS, Windows, OS/2, etc.) so they can use them under Linux. These
  125.    partitions must be created and copied under their own operating
  126.    system, and you should unmount them before copying your Linux
  127.    partition. For example, if you have a DOS partition mounted at /dos,
  128.    you must unmount it with this command:
  129.    
  130.      umount /dos
  131.      
  132.    
  133.    
  134.    Note that the command is "umount", with the first letter "n" missing
  135.    from the word "unmount".
  136.      _________________________________________________________________
  137.    
  138.    
  139.    
  140. 3. Partition the new disk
  141.  
  142.    
  143.    
  144.    Use this command to partition the new disk:
  145.    
  146.      fdisk /dev/hdb
  147.      
  148.    
  149.    
  150.    For more information on partitioning, see the Installation How-To and
  151.    the Partitioning Mini How-To.
  152.    
  153.    If your new disk has over 1024 cylinders, see the Large Disk Mini
  154.    How-To. In brief, you should install all files required to boot Linux
  155.    within the first 1024 cylinders. One way to do this is to create a
  156.    small partition (1 Mb or 2 Mb) just for the /boot directory at the
  157.    beginning of the disk. (_Slackware only:_ The kernel is at /vmlinuz
  158.    rather than /boot/vmlinuz, so you should put both the / directory and
  159.    the /boot directory in this partition.)
  160.    
  161.    Partitions for systems other than Linux should be created using their
  162.    own fdisk or equivalent command rather than with Linux's fdisk.
  163.      _________________________________________________________________
  164.    
  165.    
  166.    
  167. 4. Format the new disk
  168.  
  169.    
  170.    
  171.    Use the following command to format the new disk:
  172.    
  173.      mkfs.ext2 /dev/hdb1
  174.      
  175.    
  176.    
  177.    To check the disk for bad blocks (physical defects), add the -c option
  178.    just before "/dev/hdb1".
  179.    
  180.    (Note: Contrary to what the man page states, the command "mkfs -t ext2
  181.    -c /dev/hdb1" doesn't check for bad blocks under any of Red Hat,
  182.    Debian or Slackware.)
  183.      _________________________________________________________________
  184.    
  185.    
  186.    
  187. 5. Mount the new disk
  188.  
  189.    
  190.    
  191.    Create a directory where you'll mount the new disk, for example
  192.    /new-disk, and mount it there:
  193.    
  194.      mkdir /new-disk
  195.      mount -t ext2 /dev/hdb1 /new-disk
  196.      
  197.    
  198.      _________________________________________________________________
  199.    
  200.    
  201.    
  202. 6. Copy the files from the old disk to the new disk
  203.  
  204.    
  205.    
  206.    You want to completely reproduce the disk structure, including links.
  207.    
  208.    However, you _don't_ want to copy the directory /new-disk, since this
  209.    would copy the new disk to itself!
  210.    
  211.    Furthermore, you want to create the /proc directory on the new disk,
  212.    but you don't want to copy its contents: /proc is a "virtual" file
  213.    system and doesn't have any actual files, but rather contains
  214.    information on the processes running on the system.
  215.    
  216.    Here are four different ways to copy the old disk to the new one. This
  217.    may take quite a while, especially if you have a large disk or little
  218.    memory. You can expect to be able to copy 10 Mb per minute, and
  219.    possibly much more.
  220.    
  221.    You can follow the copy's progress by using the command "df" from
  222.    another terminal. If you're as easily amused as I am, try "watch df"
  223.    or "watch ls -l /new-disk" to see a report updated every two seconds;
  224.    press Ctrl-C to end the display. Be aware that running the "watch"
  225.    programme itself will slow down the copying.
  226.     1. cp -ax / /new-disk
  227.        
  228.      
  229.      
  230.      This is the simplest method, but will only work if your original
  231.      Linux system is on a single disk partition. The -a option preserves
  232.      the original system as much as possible. The -x option limits cp to
  233.      a single file system; this is necessary to avoid copying the
  234.      /new-disk and /proc directories.
  235.     2. cd / && cp -a `/bin/ls -1A | egrep -v "^new-disk$|^proc$"`
  236.        /new-disk
  237.        
  238.      
  239.      
  240.      (Write this all on one line.)
  241.      
  242.      This goes to the root directory and then copies all files and
  243.      directories except /new-disk and /proc to /new-disk. Note that the
  244.      first option after ls is the number 1, not the letter L!
  245.      
  246.      This command should work in all circumstances.
  247.     3. (cd / && tar cpf - . --exclude new-disk --exclude proc) | (cd
  248.        /new-disk && tar xpf -)
  249.        
  250.      
  251.      
  252.      (Write this all on one line.)
  253.      
  254.      This goes to the root directory, "tars" everything except /new-disk
  255.      and /proc, switches to /new-disk and "untars" everything there. Note
  256.      that there must not be a slash before or after the names of the
  257.      directories in the --exclude options.
  258.      
  259.      (Note: The option -l doesn't work here, since tar will still
  260.      re-create the directories /new-disk and /proc even though it doesn't
  261.      copy their contents. Therefore, tar's -l option doesn't have the
  262.      same behaviour as cp's -x option.)
  263.      
  264.      This method is somewhat slower than the others.
  265.     4. cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin
  266.        /tmp /usr /var /new-disk
  267.        
  268.      
  269.      
  270.      (Write this all on one line.)
  271.      
  272.      The last directory, /new-disk, is the destination for the cp
  273.      command. All the other directories are the sources. Therefore, here
  274.      I'm copying all the directories I'm listing to /new-disk.
  275.      
  276.      With this method, you simply list yourself the directories you want
  277.      to copy. Here I listed all my directories except /new-disk and
  278.      /proc. If you can't use the other methods for any reason, you can
  279.      always use this command to manually specify the directories you want
  280.      to copy.
  281.      
  282.      With this method only, if there are any files in the root directory
  283.      itself, you need another command to copy them. In particular, this
  284.      is required with Debian and Slackware, since these distributions put
  285.      files in the root directory:
  286.      
  287.      cp -dp /* /.* /new-disk
  288.      
  289.    
  290.    
  291.    After using any of these four methods, you must also create the /proc
  292.    directory on the new disk:
  293.    
  294.      mkdir /new-disk/proc
  295.      
  296.    
  297.    
  298.    At this point, you may verify the file structure on the new disk, if
  299.    you wish:
  300.    
  301.      umount /new-disk
  302.      fsck.ext2 -f /dev/hdb1
  303.      mount -t ext2 /dev/hdb1 /new-disk
  304.      
  305.    
  306.    
  307.    You may also use the following script to compare the two disks, to
  308.    ensure that the files were copied properly:
  309.    
  310.  
  311. #!/bin/sh
  312. cd /
  313. for file in `/bin/ls -1A | egrep -v '^new-disk$|^proc$'`
  314. do
  315.     find $file -xtype f -exec cmp \{\} /new-disk/\{\} \;
  316. done
  317.  
  318.    
  319.    
  320.    (_Slackware only:_ A basic Slackware installation doesn't include the
  321.    "cmp" or "diff" commands, so you won't be able to run this script if
  322.    you have only installed the basic files.)
  323.    
  324.    This will only compare regular files, not character or block special
  325.    files (in the /dev directory), sockets, etc., since the "cmp" command
  326.    doesn't work properly with these. I would welcome suggestions on how
  327.    to verify these "special" files.
  328.      _________________________________________________________________
  329.    
  330.    
  331.    
  332. 7. Modify /etc/fstab as appropriate
  333.  
  334.    
  335.    
  336.    If your new disk doesn't have the same partitions or organization as
  337.    the old disk, modify the file /etc/fstab on the new disk as
  338.    appropriate. Remember that this file is currently located at
  339.    /new-disk/etc/fstab.
  340.    
  341.    Make sure that the disk partitions in the first column correspond to
  342.    the organization you'll have with the new disk, once the old disk has
  343.    been removed, and that you're only mounting one partition at "/" as
  344.    shown in the second column.
  345.      _________________________________________________________________
  346.    
  347.    
  348.    
  349. 8. Prepare LILO to boot the new disk
  350.  
  351.    
  352.    
  353.    This is the most complicated step. I'm assuming that LILO is installed
  354.    on the hard disk's Master Boot Record (MBR); this seems to be the most
  355.    common configuration.
  356.    
  357.    You want to install LILO on what's presently the second hard disk.
  358.    It's clear that LILO can't _run_ from the second hard disk; however,
  359.    LILO's documentation does anticipate that you might want to _install_
  360.    LILO on the second hard disk, for example if the first hard disk will
  361.    be removed:
  362.    
  363.      
  364.      
  365.      LILO can't be stored at any of the following locations:
  366.      
  367.      - on the second hard disk. (Unless for backup purposes, if the
  368.      current first disk will be removed or disabled, or if some other
  369.      boot loader is used, that is capable of loading boot sectors from
  370.      other drives.)
  371.      
  372.    
  373.    
  374.    However, the documentation doesn't explain the proper way to install
  375.    LILO on the second hard disk if the first hard disk will be removed,
  376.    and I've concluded after many attempts that it isn't possible to
  377.    install LILO directly onto the MBR of the second hard disk and have it
  378.    work correctly the first time.
  379.    
  380.    Instead, I suggest the use of a boot diskette to boot the new hard
  381.    disk the first time.
  382.    
  383.    Insert an empty diskette, format it, create a file system on it and
  384.    mount it:
  385.    
  386.      fdformat /dev/fd0H1440
  387.      mkfs.ext2 /dev/fd0
  388.      mount -t ext2 /dev/fd0 /mnt
  389.      
  390.    
  391.    
  392.    (_Debian only:_ The command "fdformat" is not included in a basic
  393.    installation with Debian. If you don't have this command, you may omit
  394.    it if the floppy is already formatted. In this case, you should check
  395.    the diskette for bad blocks by adding "-c" after the "mkfs.ext2"
  396.    command.
  397.    
  398.    (_Debian and Slackware only:_ Use the command "fdformat
  399.    /dev/fd0h1440", with a lower case "h".)
  400.    
  401.    Copy all files in /boot to the diskette:
  402.    
  403.      cp -dp /boot/* /mnt
  404.      
  405.    
  406.    
  407.    (_Slackware only:_ Copy the file /vmlinuz to the boot diskette; use
  408.    the command "cp /vmlinuz /mnt".)
  409.    
  410.    Create a new file /mnt/lilo.conf as follows:
  411.    
  412.  
  413. boot=/dev/fd0           # Install LILO on floppy disk.
  414. map=/mnt/map            # Location of "map file".
  415. install=/mnt/boot.b     # File to copy to floppy's boot sector.
  416. prompt                  # Have LILO show "LILO boot:" prompt.
  417. timeout=50              # Boot default system after 5 seconds.
  418.                         # (Value is in tenths of seconds.)
  419. image=/mnt/vmlinuz      # Location of Linux kernel on floppy.
  420.     label=linux         # Label for Linux system.
  421.     root=/dev/hda1      # Location of root partition on new hard
  422.                         # disk. Modify this as appropriate for
  423.                         # your system.
  424.                         # Note that you must use the name of the
  425.                         # future location, once the old disk has
  426.                         # been removed.
  427.  
  428.    
  429.    
  430.    (_Debian only:_ In the "image" line, use the actual name of the Linux
  431.    kernel. For example, with Debian 1.3.1, use "/mnt/vmlinuz-2.0.29".)
  432.    
  433.    Install LILO on the boot diskette:
  434.    
  435.      /sbin/lilo -C /mnt/lilo.conf
  436.      
  437.    
  438.    
  439.    The -C option tells /sbin/lilo what configuration file to use.
  440.    
  441.    Unmount the diskette:
  442.    
  443.      umount /mnt
  444.      
  445.    
  446.    
  447.    and shut down the system.
  448.      _________________________________________________________________
  449.    
  450.    
  451.    
  452. 9. Remove the old disk
  453.  
  454.    
  455.    
  456.    After removing the old disk, remember to modify the disk jumpers and
  457.    the BIOS information to reflect the changes.
  458.      _________________________________________________________________
  459.    
  460.    
  461.    
  462. 10. Reboot the system, install LILO on the new disk
  463.  
  464.    
  465.    
  466.    Reboot the system from the boot diskette you just made. To do so, you
  467.    may have to modify your BIOS's boot-up sequence to "A:, C:".
  468.    
  469.    Make any necessary changes to the /etc/lilo.conf file, and run
  470.    /sbin/lilo to install LILO on the new disk. With Debian, make sure
  471.    that the "boot" line says "/dev/hda" rather than "/dev/hda1" or
  472.    similar if you want to install LILO on the Master Boot Record.
  473.    
  474.    You can then try re-booting your system from your new hard disk to
  475.    test if everything is working properly. If you run into any problems,
  476.    you can still use the diskette you just made to boot your system.
  477.      _________________________________________________________________
  478.    
  479. Acknowledgements
  480.  
  481.    
  482.    
  483.    Special thanks to _Dr Konrad Hinsen_ of the Institut de biologie
  484.    structurale, Grenoble, France, who has been kindly acting as my
  485.    personal Linux guru. Thanks also to _Frank Damgaard_, _Paul Koning_
  486.    and _Josh Rabinowitz_, and to _Scott Christensen_ for alerting me to
  487.    some particularities of the Slackware distribution.
  488.      _________________________________________________________________
  489.