Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
GUNION(8)		     System Manager's Manual		       GUNION(8)

NAME
     gunion -- control utility for UNION GEOM class

SYNOPSIS
     gunion create [-v] [-o offset] [-s size] [-S secsize] [-Z gunionname]
	    upperdev lowerdev
     gunion destroy [-fv] prov ...
     gunion reset [-v] prov ...
     gunion revert [-v] prov ...
     gunion commit [-frv] prov ...
     gunion list
     gunion status
     gunion load
     gunion unload

DESCRIPTION
     The  gunion  utility  is  used  to  track	changes to a read-only disk on a
     writable disk.  Logically, a writable disk is placed over a read-only disk.
     Write requests are intercepted and stored on the writable disk.   Read  re-
     quests  are  first  checked  to  see  if  they have been written on the top
     (writable disk) and if found are returned.  If they have not  been  written
     on the top disk, then they are read from the lower disk.

     The gunion utility can be especially useful if you have a large disk with a
     corrupted	filesystem  that  you  are unsure of how to repair.  You can use
     gunion to place another disk over the corrupted disk and  then  attempt  to
     repair the filesystem.  If the repair fails, you can revert all the changes
     in the upper disk and be back to the unchanged state of the lower disk thus
     allowing  you  to	try  another approach to repairing it.	If the repair is
     successful you can request that all the writes recorded on the top disk  be
     written to the lower disk.

     Another  use  of  the gunion utility is to try out upgrades to your system.
     Place the upper disk over the disk holding your filesystem that  is  to  be
     upgraded  and  then  run  the upgrade on it.  If it works, commit it; if it
     fails, revert the upgrade.  An example is given below.

     The upper disk must be at least the size of the disk that it  covers.   The
     union metadata exists only for the period of time that the union is instan-
     tiated,  so  it  is  important  to commit the updates before destroying the
     union.  If the top disk is about 2.5 percent larger  for  512  byte  sector
     disks  (or  0.5  percent  larger for 4K sector disks) than the disk that it
     covers, it is posible (thought not currently implemented) to save the union
     metadata between instantiations of the union device.

     If you do not have physical media available to use for the upper layer, the
     md(4) disk can be used instead.  When used in swap mode the changes are all
     held in buffer memory.  Pages get pushed out to the swap when the system is
     under memory pressure, otherwise they stay in  the  operating  memory.   If
     long-term persistance is desired, vnode mode can be used in which a regular
     file is used as backing store.  The disk space used by the file is based on
     the amount of data that is written to the top device.

     The first argument to gunion indicates an action to be performed:

     create   Set  up  a union provider on the two given devices.  The first de-
	      vice given is used as the top device and must  be  writable.   The
	      second  device given is used as the bottom device and need only be
	      readable.  The second device may be mounted read-only  but  it  is
	      recommended that it be unmounted and accessed only through a mount
	      of  the union device.  If the operation succeeds, the new provider
	      should appear with name /dev/<upperdev>-<lowerdev>.union.  An  al-
	      ternate name can be specified with the -Z flag.  The kernel module
	      geom_union.ko will be loaded if it is not loaded already.

	      Additional options include:

	      -o offset      Where  to	begin on the original provider.  The de-
			     fault is to start at  the	beginning  of  the  disk
			     (i.e.,  at  offset  0).  This option may be used to
			     skip over partitioning information  stored  at  the
			     beginning of a disk.  The offset must be a multiple
			     of the sector size.

	      -s size	     Size  of  the transparent provider.  The default is
			     to be the same size as the lower disk.   Any  extra
			     space  at	the end of the upper disk may be used to
			     store union metadata.

	      -S secsize     Sector size of the transparent provider.	The  de-
			     fault  is	to  be the same sector size as the lower
			     disk.

	      -v	     Be more verbose.

	      -Z gunionname  The name of the new provider.  The suffix	".union"
			     will be appended to the provider name.

     destroy  Turn off the given union providers.

	      Additional options include:

	      -f  Force the removal of the specified provider.

	      -v  Be more verbose.

     revert   Discard  all  the  changes made in the top layer thus reverting to
	      the original state of the lower device.  The union device may  not
	      be  mounted  or  otherwise in use when a revert operation is being
	      done.

     commit   Write all the changes made in the top device to the  lower  device
	      thus  committing	the  lower  device  to have the same data as the
	      union.

	      Additional options include:

	      -f  The commit command will not  allow  the  lower  device  to  be
		  mounted  or otherwise in use while the commit operation is be-
		  ing done.  However, the -f flag may be specified to allow  the
		  lower device to be mounted read-only.  To prevent a filesystem
		  panic  on the mounted lower-device filesystem, immediately af-
		  ter the commit operation finishes the lower-device  filesystem
		  should  be unmounted and then remounted to update its metadata
		  state.  If the lower-device filesystem is currently being used
		  as the root filesystem then the -r flag should be specified to
		  reboot the system at the completion of the commit operation.

	      -r  Reboot the system at the completion of the commit operation.

	      -v  Be more verbose.

     reset    Reset statistics for the given union providers.

     list     See geom(8).

     status   See geom(8).

     load     See geom(8).

     unload   See geom(8).

EXIT STATUS
     Exit status is 0 on success, and 1 if the command fails.

EXAMPLES
     The following example shows how to create and destroy a union provider with
     disks /dev/da0p1 as the read-only disk on the bottom and  /dev/md0  as  the
     wriable disk on the top.

	   gunion create -v md0 da0p1
	   mount /dev/md0-da0p1.union /mnt

     Proceed to make changes in /mnt filesystem.  If they are successful and you
     want to keep them.

	   umount /mnt
	   gunion commit -v md0-da0p1.union

     If they are unsuccessful and you want to roll back.

	   umount /mnt
	   gunion revert -v md0-da0p1.union

     When done eliminate the union.

	   umount /mnt
	   gunion destroy -v md0-da0p1.union

     All uncommitted changes will be discarded when the union is destroyed.

     If  you  use the name of the full disk, for example da0 and it is labelled,
     then a union name will appear for the disk as md0-da0.union as well as  for
     each  partition  on  the  disk as md0-da0p1.union, md0-da0p2.union, etc.  A
     commit operation can be done only on md0-da0.union and will commit  changes
     to  all  the  partitions.	 If  partition level commits are desired, then a
     union must be created for each partition.

     The traffic statistics for the given union providers can be  obtained  with
     the list command.	The example below shows the number of bytes written with
     newfs(8):

	   gunion create md0 da0p1
	   newfs /dev/md0-da0p1.union
	   gunion list

SYSCTL VARIABLES
     The  following  sysctl(8)	variables can be used to control the behavior of
     the UNION GEOM class.  The default value is shown next to each variable.

     kern.geom.union.debug: 0
	     Debug level of the UNION GEOM class.  This can be set to  a  number
	     between  0  and  4 inclusive.  If set to 0, no debug information is
	     printed.  If set to 1, all the verbose messages are logged.  If set
	     to 2, addition error-related information is logged.  If set  to  3,
	     mapping  operations are logged.  If set to 4, the maximum amount of
	     debug information is printed.

SEE ALSO
     geom(4), geom(8)

HISTORY
     The gunion utility appeared in FreeBSD 14.0.

AUTHORS
     Marshall Kirk McKusick <mckusick@mckusick.com>

FreeBSD ports 15.quarterly	January 19, 2022		       GUNION(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=gunion&sektion=8&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help