dump/restore
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.
Dec 16 | Awstats | 1 min read |
Dec 16 | Encrypting harddisks | 1 min read |
Dec 16 | Firewall PF | 2 min read |
Dec 16 | Hylafax | 2 min read |
Dec 16 | Jails | 12 min read |