Handbook RAID1 example

Hiroki Sato hrs at FreeBSD.org
Wed Jan 25 02:18:38 UTC 2012


Warren Block <wblock at wonkity.com> wrote
  in <alpine.BSF.2.00.1201231536490.92721 at wonkity.com>:

wb> Multiple users on the forums have reported problems with existing
wb> gmirror(8) mirrors being unbootable after upgrading to FreeBSD 9:
wb> http://forums.freebsd.org/showthread.php?t=28895
wb>
wb> The workaround is to set kern.geom.part.check_integrity="0" in
wb> /boot/loader.conf.
wb>
wb>
wb> The example from the RAID1 chapter of the Handbook isn't helping:
wb> http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/geom-mirror.html
wb>
wb> The procedure overrides the safety and uses the last block of a drive,
wb> regardless of whether it was already allocated to a partition.  During
wb> boot, the GEOM system sees the error and stops:
wb>
wb> GEOM_MIRROR: Device mirror/gm0 launched (2/2).
wb> GEOM_PART: partition 1 has end offset beyond last LBA: 1250263727 >
wb> 1250263726
wb> GEOM_PART: integrity check failed (mirror/gm0, MBR)
wb>
wb> To be fair, that example allows (allowed) the user to set up a mirror
wb> of their existing disk complete with whatever partitioning existed.
wb> And it still ought to work if the last block was not part of a
wb> partition.
wb>
wb> That Handbook chapter could be updated without a huge change by
wb> removing the instructions to turn off the safety (so it will error out
wb> if the user tries it on an allocated last block).
wb>
wb> Then add a note or warning along the lines of "The procedure shown can
wb> only be used if the last block of the drive has not been already
wb> allocated to a partition.  If the last block has been included in a
wb> partition, back up, repartion leaving at least one unused block at the
wb> end of the drive, create the mirror, and restore."

 I think we should rewrite this section not to create a malformed
 partition table by configuring gmirror in some way.  If all of
 partitions are UFS, the following procedure should be safe:

  1. gmirror label gm0 /dev/da1, and edit /boot/loader.conf to load
     the kernel module.

  2. Reboot and check if gm0 is recognized even after that (just in
     case).

  3. Create partitions in /dev/mirror/gm0 based on ones in /dev/da0.
     If capacity of /dev/da0 and /dev/da1 is the same as each other
     gm0 should be slightly smaller by the last sector.

  4. Dump & restore each partition from /dev/da0* to /dev/mirror/gm0*.
     Install a boot block if necessary.

  5. mount /dev/mirror/gm0s1a /mnt, and edit /mnt/etc/fstab to mount
     gm0.  Also, apply the same change to /etc/fstab in /dev/da0.

  6. Reboot and check if gm0 is mounted as the root partition.

  7. gmirror add gm0 /dev/da0, and wait for the rebuild.

 The primary difference between the above and one in the handbook is
 to use /dev/da1 for gm0 first.  By doing this, both making a backup
 of /dev/da0 and repartitioning before setting up the mirror
 configuration can be done virtually.  The step 3 may be complex in
 some cases, but I personally think partitioning /dev/mirror/gm0 by
 gpart based on the existing /dev/da0 is not so difficult.

-- Hiroki
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-doc/attachments/20120125/1b59f5aa/attachment.sig>


More information about the freebsd-doc mailing list