ZFS Volumes
A ZFS volume is a dataset that represents a block device and
can be used like any block device. ZFS volumes are identified as devices
in the /dev/zvol/{dsk,rdsk}/path directory.
In the following example, 5-Gbyte ZFS volume, tank/vol, is created:
# zfs create -V 5gb tank/vol
When you create a volume, a reservation is automatically set to the initial
size of the volume. The reservation size continues to equal the size of
the volume so that unexpected behavior doesn't occur. For example, if the size
of the volume shrinks, data corruption might occur. You must be careful when
changing the size of the volume.
In addition, if you create a snapshot of a volume that changes
in size, you might introduce file system inconsistencies if you attempt to rollback the
snapshot or create a clone from the snapshot.
For information about file system properties that can be applied to volumes, see
Table 5-1.
If you are using a Solaris system with zones installed, you cannot
create or clone a ZFS volume in a non-global zone. Any attempt
to create or clone a volume from within a non-global zone will fail.
For information about using ZFS volumes in a global zone, see Adding ZFS Volumes to a Non-Global Zone.
Using a ZFS Volume as a Swap or Dump Device
To set up a swap area, create a ZFS volume of a
specific size and then enable swap on that device. Do not swap to
a file on a ZFS file system. A ZFS swap file configuration is
not supported.
In the following example, the 5-Gbyte tank/vol volume is added as a swap
device.
# swap -a /dev/zvol/dsk/tank/vol
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 32,33 16 1048688 1048688
/dev/zvol/dsk/tank/vol 254,1 16 10485744 10485744
Using a ZFS volume as a dump device is not supported. Use
the dumpadm command to set up a dump device.
Using a ZFS Volume as a Solaris iSCSI Target
Solaris iSCSI targets and initiators are supported in the Solaris release.
In addition, you can easily create a ZFS volume as a iSCSI
target by setting the shareiscsi property on the volume. For example:
# zfs create -V 2g tank/volumes/v2
# zfs set shareiscsi=on tank/volumes/v2
# iscsitadm list target
Target: tank/volumes/v2
iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
Connections: 0
After the iSCSI target is created, set up the iSCSI initiator.
For more information about Solaris iSCSI targets and initiators, see Chapter 14, Configuring Solaris iSCSI Targets and Initiators (Tasks), in System Administration Guide: Devices and File Systems.
Note - Solaris iSCSI targets can also be created and managed with iscsitadm command.
If you set the shareiscsi property on a ZFS volume, do not use
the iscsitadm command to also create the same target device. Otherwise, you will
end up with duplicate target information for the same device.
A ZFS volume as an iSCSI target is managed just like another
ZFS dataset. However, the rename, export, and import operations work a little differently for
iSCSI targets.
When you rename a ZFS volume, the iSCSI target name remains the same. For example:
# zfs rename tank/volumes/v2 tank/volumes/v1
# iscsitadm list target
Target: tank/volumes/v1
iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
Connections: 0
Exporting a pool that contains a shared ZFS volume causes the target to be removed. Importing a pool that contains a shared ZFS volume causes the target to be shared. For example:
# zpool export tank
# iscsitadm list target
# zpool import tank
# iscsitadm list target
Target: tank/volumes/v1
iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
Connections: 0
All iSCSI target configuration information is stored within the dataset. Like an NFS
shared file system, an iSCSI target that is imported on a different system
is shared appropriately.