Copying a disk.

Jerry McAllister jerrymc at
Mon Apr 17 22:04:51 UTC 2006

> Hi All,
> I finaly have a complete server disk (blank one).
> I was wondering what 'copy' strategy people would recomend.
> i.e how to copy a completly bootable server disk (75Gig SCSI) to another 
> identical disk. I have lots of server connections and SCSI connections, so 
> thats not an issue.
> I have a Copy of Norton Ghost (Systemworks 2003), or I can use rsync (?).
> Any step by step would be appreciated.

If it were me, I would plub the second disk in.   
It is SCSI so it should show up as da1   (or higher if you have 
more disks you haven't mentioned).

Then I would use fdisk(8) and bsdlabel(8) to slice and partition it to
be like the other disk.  Use newfs(8) to create the file systems and then
use dump(8) and restore(8) to copy the file systems.

Lets presume you have 1 slice all FreeBSD on the disk and in that slice
you have /, swap, /tmp, /usr, /var and /home  just for example and you 
don't need to copy swap and /tmp, of course.

  The following would do it nicely.
  dd if=/dev/zero of=/dev/da1 bs=512 count=1024
  fdisk -BI da1
  bsdlabel -w -B da1s1
  bsdlabel -e
    --- At this point you will be put in to an editor file with a 
        nominal 1 partition created.   Just for example I will 
        pick some sizes.   Actually, you want to do a bsdlabel on
        your da0s1 to see what values to use.  Make them the same.
  Leave alone all the stuff above the partition information

So, starting here, edit it to be:
  8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a:   393216        0    4.2BSD     2048 16384    94   # 
  b:  2572288        *      swap                        # (Cyl.   32*- 192*)
  c:156119670        0    unused        0     0         # (Cyl.    0 - 4858)
  e:  1048576        *    4.2BSD     2048 16384    89   # (Cyl.  192*- 258*)
  f:  4194304        *    4.2BSD     2048 16384    89   # (Cyl.  258*- 519*)
  g:  6291456        *    4.2BSD     2048 16384    89   # (Cyl.  519*- 910*)
  h:        *        *    4.2BSD     2048 16384    89   # (Cyl.  910*- 4826*)
That would be /     = 192 MB
              swap  = 1256 MB
              /tmp  = 512 MB
              /usr  = 2048 MB
              /var  = 3072 MB
              /home = all the rest of the slice
on a nominal 76 GB drive.   Sizes are before newfs or system reserves.
As mentioned above, use the partition identifiers the same as on your
other disk that you want to copy.

Write and exit the editor and your label is done.

  newfs /dev/da1s1a            becomes /
  newfs -U /dev/da1s1e         becomes /tmp
  newfs -U /dev/da1s1f         becomes /usr
  newfs -U /dev/da1s1g         becomes /var
  newfs -U /dev/da1s1h         becomes /home

Swap does not get newfs-ed.

Add mount points
  mkdir /cproot
  mkdir /cpusr
  mkdir /cpvar
  mkdir /cphome
You don't need one for the copy of /tmp since you don't need to copy it.

Edit /etc/fstab to add mount instructions.

# Presuming your original fstab has the following as per my example
/dev/da0s1a             /               ufs     rw              1       1
/dev/da0s1b             none            swap    sw              0       0
/dev/da0s1e             /tmp            ufs     rw              2       2
/dev/da0s1f             /usr            ufs     rw              2       2
/dev/da0s1g             /var            ufs     rw              2       2
/dev/da0s1h             /home           ufs     rw              2       2
# add something like the following according to your setup needs.
/dev/da1s1a             /cproot         ufs     rw              2       2
/dev/da1s1f             /cpusr          ufs     rw              2       2
/dev/da1s1g             /cpvar          ufs     rw              2       2
/dev/da1s1h             /cphome         ufs     rw              2       2

Note that you want to change the pass on the cproot to '2' so it
won't mess up boots.

Now mount everything.

  mount -a
Then do the copies.

  cd /cproot
  dump -0af - / | restore -rf -
  cd /cpusr
  dump -0af - /usr | restore -rf -
  cd /cpvar
  dump -0af - /var | restore -rf -
  cd /cphome
  dump -0af - /home | restore -rf -

You are finished.

In the future, if you make the same copies on to the same disk, you
do not have to reslice, relabel and renewfs everything.  
You can just go in to each filesystem and rm -rf it.
Or you could just umount,  newfs and remount each partition to clear them.
  cd /cproot
  rm -rf *
 etc or
  umount /cproot
  newfs /dev/da1s1a
   etc etc
  mount -a

Then do copies.

It looks a bit complicated to set up, but it really isn't and it is
the most complete way to create bootable copies of disks.

If you do periodic copies, it would be easy to create a script to
clean the copy (using either rm -rf * or newfs method) and do the
dump/restores.    It could even run on the cron if you want.  I would
actually suggest setting up a three disk rotation for copies.


> -Grant 
> _______________________________________________
> freebsd-questions at mailing list
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at"

More information about the freebsd-questions mailing list