18.4. RAID1 - Mirroring

Mirroring is a technology used by many corporations and home users to back up data without interruption. When a mirror exists, it simply means that diskB replicates diskA. Or, perhaps diskC+D replicates diskA+B. Regardless of the disk configuration, the important aspect is that information on one disk or partition is being replicated. Later, that information could be more easily restored, backed up without causing service or access interruption, and even be physically stored in a data safe.

To begin, ensure the system has two disk drives of equal size, this exercise assumes they are direct access (da(4)) SCSI disks.

Begin by installing FreeBSD on the first disk with only two partitions. One should be a swap partition, double the RAM size and all remaining space devoted to the root (/) file system. It is possible to have separate partitions for other mount points; however, this will increase the difficulty level ten fold due to manual alteration of the bsdlabel(8) and fdisk(8) settings.

Reboot and wait for the system to fully initialize. Once this process has completed, log in as the root user.

Create the /dev/mirror/gm device and link it with /dev/da1:

# gmirror label -vnb round-robin gm0 /dev/da1

The system should respond with:

Metadata value stored on /dev/da1.

Initialize GEOM, this will load the /boot/kernel/geom_mirror.ko kernel module:

# gmirror load


This command should have created the gm0, device node under the /dev/mirror directory.

Install a generic fdisk label and boot code to newly created gm0 device:

# fdisk -vBI /dev/mirror/gm0

Now install generic bsdlabel information:

# bsdlabel -wB /dev/mirror/gm0s1


If multiple slices and partitions exist, the flags for the previous two commands will require alteration. They must match the slice and partition size of the other disk.

Use the newfs(8) utility to create a default file system on the gm0s1a device node:

# newfs -U /dev/mirror/gm0s1a

This should have caused the system to spit out some information and a bunch of numbers. This is good. Examine the screen for any error messages and mount the device to the /mnt mount point:

# mount /dev/mirror/gm0s1a /mnt

Now move all data from the boot disk over to this new file system. This example uses the dump(8) and restore(8) commands; however, dd(1) would also work with this scenario.

# dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)

This must be done for each file system. Simply place the appropriate file system in the correct location when running the aforementioned command.

Now edit the replicated /mnt/etc/fstab file and remove or comment out the swap file [12]. Change the other file system information to use the new disk. See the following example:

# Device                Mountpoint      FStype  Options         Dump    Pass#
#/dev/da0s2b             none            swap    sw              0       0
/dev/mirror/gm0s1a       /               ufs     rw              1       1

Now create a boot.conf file on both the current and new root partitions. This file will "help" the system BIOS boot the correct drive:

# echo "1:da(1,a)/boot/loader" > /boot.config
# echo "1:da(1,a)/boot/loader" > /mnt/boot.config


We have placed it on both root partitions to ensure proper boot up. If for some reason the system cannot read from the new root partition, a failsafe is available.

Now add the following line to the new /boot/loader.conf:

# echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf

This will instruct loader(8) utility to load the geom_mirror.ko module during system initialization.

Reboot the system:

# shutdown -r now

If all has gone well, the system should have booted from the gm0s1a device and a login prompt should be waiting. If something went wrong, see review the forthcoming troubleshooting section. Now add the da0 disk to gm0 device:

# gmirror configure -a gm0
# gmirror insert gm0 /dev/da0

The -a flag tells gmirror(8) to use automatic synchronization; i.e., mirror the disk writes automatically. The manual page explains how to rebuild and replace disks, although it uses data in place of gm0.

18.4.1. Troubleshooting System refuses to boot

If the system boots up to a prompt similar to:

ffs_mountroot: can't find rootvp
Root mount failed: 6

Reboot the machine using the power or reset button. At the boot menu, select option six (6). This will drop the system to a loader(8) prompt. Load the kernel module manually:

OK? load geom_mirror.ko
OK? boot

If this works then for whatever reason the module was not being loaded properly. Place:


in the kernel configuration file, rebuild and reinstall. That should remedy this issue.

[12] It should be noted that commenting out the swap file entry in fstab will most likely require you to re-establish a different way of enabling swap space. Please refer to Sekcja 11.14, "Adding Swap Space" for more information.

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.