svn commit: r43242 - projects/zfsupdate-201307/en_US.ISO8859-1/books/handbook/zfs
Warren Block
wblock at FreeBSD.org
Mon Nov 25 05:58:08 UTC 2013
Author: wblock
Date: Mon Nov 25 05:58:08 2013
New Revision: 43242
URL: http://svnweb.freebsd.org/changeset/doc/43242
Log:
Edits for clarity and simplicity.
Modified:
projects/zfsupdate-201307/en_US.ISO8859-1/books/handbook/zfs/chapter.xml
Modified: projects/zfsupdate-201307/en_US.ISO8859-1/books/handbook/zfs/chapter.xml
==============================================================================
--- projects/zfsupdate-201307/en_US.ISO8859-1/books/handbook/zfs/chapter.xml Mon Nov 25 04:36:45 2013 (r43241)
+++ projects/zfsupdate-201307/en_US.ISO8859-1/books/handbook/zfs/chapter.xml Mon Nov 25 05:58:08 2013 (r43242)
@@ -545,16 +545,16 @@ errors: No known data errors</screen>
<para>A ZFS pool that is no longer needed can be destroyed so
that the disks making up the pool can be reused in another
pool or for other purposes. Destroying a pool involves
- unmouting all of the datasets in that pool. If the datasets
+ unmounting all of the datasets in that pool. If the datasets
are in use, the unmount operation will fail and the pool will
not be destroyed. The destruction of the pool can be forced
- with the <option>-f</option> parameter, however this can cause
- undefined behavior in the applications which had open files on
+ with <option>-f</option>, but this can cause
+ undefined behavior in applications which had open files on
those datasets.</para>
</sect2>
<sect2 xml:id="zfs-zpool-attach">
- <title>Adding & Removing Devices</title>
+ <title>Adding and Removing Devices</title>
<para>Adding disks to a zpool can be broken down into two
separate cases: attaching a disk to an existing vdev with
@@ -567,9 +567,9 @@ errors: No known data errors</screen>
as in the case of RAID-Z, the other option is to add a vdev to
the pool. It is possible, but discouraged, to mix vdev types.
ZFS stripes data across each of the vdevs. For example, if
- there are two mirror vdevs, then this is effectively a RAID
+ there are two mirror vdevs, then this is effectively a <acronym>RAID</acronym>
10, striping the writes across the two sets of mirrors.
- Because of the way that space is allocated in ZFS to attempt
+ Because of the way that space is allocated in <acronym>ZFS</acronym> to attempt
to have each vdev reach 100% full at the same time, there is a
performance penalty if the vdevs have different amounts of
free space.</para>
@@ -603,20 +603,20 @@ errors: No known data errors</screen>
this state, all of the data stored on the vdev is still
available, but performance may be impacted because missing
data will need to be calculated from the available redundancy.
- To restore the vdev to a fully functional state the failed
- physical device will need to be replace replaced, and ZFS must
+ To restore the vdev to a fully functional state, the failed
+ physical device must be replaced, and <acronym>ZFS</acronym> must
be instructed to begin the
<link linkend="zfs-term-resilver">resilver</link> operation,
where data that was on the failed device will be recalculated
- from the available redundancy and written to the replacement
- device. Once this process has completed the vdev will return
+ from available redundancy and written to the replacement
+ device. After the process has completed, the vdev will return
to <link linkend="zfs-term-online">Online</link> status. If
the vdev does not have any redundancy, or if multiple devices
- have failed and there is insufficient redundancy to
+ have failed and there is not enough redundancy to
compensate, the pool will enter the
<link linkend="zfs-term-faulted">Faulted</link> state. If a
sufficient number of devices cannot be reconnected to the pool
- then the pool will be inoperative, and data will need to be
+ then the pool will be inoperative, and data must be
restored from backups.</para>
</sect2>
@@ -631,9 +631,9 @@ errors: No known data errors</screen>
<link linkend="zfs-term-resilver">resilver</link> operation,
the pool can grow based on the size of the new smallest
device. This expansion can be triggered by using
- <command>zpool online</command> with the <option>-e</option>
- parameter on each device. After the expansion of each device,
- the additional space will become available in the pool.</para>
+ <command>zpool online</command> with <option>-e</option>
+ on each device. After expansion of all devices,
+ the additional space will become available to the pool.</para>
</sect2>
<sect2 xml:id="zfs-zpool-import">
@@ -689,13 +689,13 @@ errors: No known data errors</screen>
<sect2 xml:id="zfs-zpool-history">
<title>Displaying Recorded Pool History</title>
- <para>ZFS records all the commands that were issued to
+ <para><acronym>ZFS</acronym> records all the commands that were issued to
administer the pool. These include the creation of datasets,
- changing zfs properties or that a disk has been replaced in
- the pool. This is useful to review how a pool was created and
- which user did a specific action at what point in time. The
- history is not kept in a log file, but is a part of the pool
- itself. That is the reason why the history cannot be altered
+ changing properties, or when a disk has been replaced in
+ the pool. This history is useful for reviewing how a pool was created and
+ which user did a specific action and when.
+ History is not kept in a log file, but is a part of the pool
+ itself. Because of that, history cannot be altered
after the fact unless the pool is destroyed. The command to
review this history is aptly named
<command>zpool history</command>:</para>
@@ -709,18 +709,18 @@ History for 'tank':
<para>The output shows <command>zpool</command> and
<command>zfs</command> commands that were executed on the pool
- along with a timestamp. Note that only commands that altered
- the pool in some way are being recorded. Commands like
- <command>zfs list</command> are not part of the history. When
- there is no pool name provided for
- <command>zpool history</command>, then the history of all
- pools will be displayed.</para>
+ along with a timestamp. Only commands that alter
+ the pool in some way are recorded. Commands like
+ <command>zfs list</command> are not included. When
+ no pool name is given to
+ <command>zpool history</command>, the history of all
+ pools is displayed.</para>
- <para>The <command>zpool history</command> can show even more
+ <para><command>zpool history</command> can show even more
information when the options <literal>-i</literal> or
<literal>-l</literal> are provided. The option
<literal>-i</literal> displays user initiated events as well
- as internally logged ZFS events.</para>
+ as internally logged <acronym>ZFS</acronym> events.</para>
<screen>&prompt.root; <userinput>zpool history -i</userinput>
History for 'tank':
@@ -732,10 +732,10 @@ History for 'tank':
2013-02-27.18:51:13 [internal create txg:55] dataset = 39
2013-02-27.18:51:18 zfs create tank/backup</screen>
- <para>The other more detailed history display can be invoked by
- using the <literal>-l</literal> command. This will show the
- log records in long format, which includes more information
- like the user name who issued the command and the hostname on
+ <para>A more-detailed history is invoked by
+ adding <literal>-l</literal>.
+ Log records are shown in long format, including information
+ like the name of the user who issued the command and the hostname on
which the change was made.</para>
<screen>&prompt.root; <userinput>zpool history -l</userinput>
@@ -758,23 +758,22 @@ History for 'tank':
<para>Both options to <command>zpool history</command> can be
combined to give the most detailed information possible for
- any given pool. The pool history can be a valuable
- information source when tracking down what actions were
- performed or when more detailed output is needed for debugging
- a ZFS pool.</para>
+ any given pool. Pool history provides valuable
+ information when tracking down what actions were
+ performed or when more detailed output is needed for debugging.</para>
</sect2>
<sect2 xml:id="zfs-zpool-iostat">
<title>Performance Monitoring</title>
- <para>ZFS has a built-in monitoring system that can display
- statistics about I/O happening on the pool in real-time. It
+ <para>A built-in monitoring system can display
+ statistics about I/O on the pool in real-time. It
shows the amount of free and used space on the pool, how many
read and write operations are being performed per second, and
- how much I/O bandwidth is currently being utilized for read
- and write operations. By default, all pools in the system
- will be monitored and displayed. A pool name can be provided
- as part of the command to monitor just that specific pool. A
+ how much I/O bandwidth is currently being utilized.
+ By default, all pools in the system
+ are monitored and displayed. A pool name can be provided
+ to limit monitoring to just that pool. A
basic example:</para>
<screen>&prompt.root; <userinput>zpool iostat</userinput>
@@ -785,8 +784,8 @@ data 288G 1.53T 2 11
<para>To continuously monitor I/O activity on the pool, a
number can be specified as the last parameter, indicating
- the frequency in seconds to wait between updates. ZFS will
- print the next statistic line after each interval. Press
+ the frequency in seconds to wait between updates.
+ The next statistic line is printed after each interval. Press
<keycombo action="simul">
<keycap>Ctrl</keycap>
<keycap>C</keycap>
@@ -796,14 +795,13 @@ data 288G 1.53T 2 11
display.</para>
<para>Even more detailed pool I/O statistics can be displayed
- with <option>-v</option>. In this case each storage device in
- the pool will be shown with a corresponding statistics line.
- This is helpful to determine how many read and write
+ with <option>-v</option>. Each device in
+ the pool is shown with a statistics line.
+ This is useful in seeing how many read and write
operations are being performed on each device, and can help
- determine if any specific device is slowing down I/O on the
- entire pool. The following example shows a mirrored pool
- consisting of two devices. For each of these, a separate line
- is shown with the current I/O activity.</para>
+ determine if any individual device is slowing down the
+ pool. This example shows a mirrored pool
+ consisting of two devices:</para>
<screen>&prompt.root; <userinput>zpool iostat -v </userinput>
capacity operations bandwidth
@@ -819,13 +817,13 @@ data 288G 1.53T
<sect2 xml:id="zfs-zpool-split">
<title>Splitting a Storage Pool</title>
- <para>A ZFS pool consisting of one or more mirror vdevs can be
+ <para>A pool consisting of one or more mirror vdevs can be
split into a second pool. The last member of each mirror
(unless otherwise specified) is detached and used to create a
new pool containing the same data. It is recommended that
the operation first be attempted with the <option>-n</option>
- parameter. This will print out the details of the proposed
- operation without actually performancing it. This helps
+ parameter. The details of the proposed
+ operation are displayed without actually performing it. This helps
ensure the operation will happen as expected.</para>
</sect2>
</sect1>
@@ -842,55 +840,53 @@ data 288G 1.53T
<sect2 xml:id="zfs-zfs-create">
<title>Creating & Destroying Datasets</title>
- <para>Unlike with traditional disks and volume managers, space
- in <acronym>ZFS</acronym> is not preallocated, allowing
- additional file systems to be created at any time. With
- traditional file systems, once all of the space was
- partitioned and assigned to a file system, there was no way to
+ <para>Unlike traditional disks and volume managers, space
+ in <acronym>ZFS</acronym> is not preallocated.
+ Wtraditional file systems, once all of the space was
+ partitioned and assigned, there was no way to
add an additional file system without adding a new disk.
- <acronym>ZFS</acronym> also allows you to set a number of
- properties on each
- <link linkend="zfs-term-dataset">dataset</link>. These
- properties include features like compression, deduplication,
+ With <acronym>ZFS</acronym>, new file systems can be created at any time.
+ Each
+ <link linkend="zfs-term-dataset"><emphasis>dataset</emphasis></link> has
+ properties including features like compression, deduplication,
caching and quoteas, as well as other useful properties like
- readonly, case sensitivity, network file sharing and mount
+ readonly, case sensitivity, network file sharing, and a mount
point. Each separate dataset can be administered,
<link linkend="zfs-zfs-allow">delegated</link>,
<link linkend="zfs-zfs-send">replicated</link>,
<link linkend="zfs-zfs-snapshot">snapshoted</link>,
<link linkend="zfs-zfs-jail">jailed</link>, and destroyed as a
- unit. This offers many advantages to creating a separate
+ unit. There are many advantages to creating a separate
dataset for each different type or set of files. The only
- drawback to having an extremely large number of datasets, is
+ drawbacks to having an extremely large number of datasets is
that some commands like <command>zfs list</command> will be
- slower, and the mounting of an extremely large number of
- datasets (100s or 1000s) can make the &os; boot process take
- longer.</para>
+ slower, and the mounting of hundreds or even thousands of
+ datasets can slow the &os; boot process.</para>
<para>Destroying a dataset is much quicker than deleting all
of the files that reside on the dataset, as it does not
invole scanning all of the files and updating all of the
corresponding metadata. In modern versions of
- <acronym>ZFS</acronym> the <command>zfs destroy</command>
- operation is asynchronous, the free space may take several
+ <acronym>ZFS</acronym>, <command>zfs destroy</command>
+ is asynchronous, and the free space may take several
minutes to appear in the pool. The <literal>freeing</literal>
property, accessible with <command>zpool get freeing
<replaceable>poolname</replaceable></command> indicates how
many datasets are having their blocks freed in the background.
- If there are child datasets, such as
+ If there are child datasets, like
<link linkend="zfs-term-snapshot">snapshots</link> or other
datasets, then the parent cannot be destroyed. To destroy a
- dataset and all of its children, use the <option>-r</option>
- parameter to recursively destroy the dataset and all of its
- children. The <option>-n -v</option> parameters can be used
- to not actually perform the destruction, but instead list
- which datasets and snapshots would be destroyed and in the
+ dataset and all of its children, use <option>-r</option>
+ to recursively destroy the dataset and all of its
+ children. <option>-n -v</option> can be used
+ to list
+ datasets and snapshots that would be destroyed and, in the
case of snapshots, how much space would be reclaimed by
- proceeding with the destruction.</para>
+ the actual destruction.</para>
</sect2>
<sect2 xml:id="zfs-zfs-volume">
- <title>Creating & Destroying Volumes</title>
+ <title>Creating and Destroying Volumes</title>
<para>A volume is a special type of <acronym>ZFS</acronym>
dataset. Rather than being mounted as a file system, it is
@@ -898,15 +894,15 @@ data 288G 1.53T
<filename>/dev/zvol/<replaceable>poolname</replaceable>/<replaceable>dataset</replaceable></filename>.
This allows the volume to be used for other file systems, to
back the disks of a virtual machine, or to be exported using
- protocols like iSCSI or HAST.</para>
+ protocols like <acronym>iSCSI</acronym> or <acronym>HAST</acronym>.</para>
- <para>A volume can be formatted with any filesystem on top of
- it. This will appear to the user as if they are working with
- a regular disk using that specific filesystem and not ZFS.
- In this way, non-ZFS file systems can be augmented with
- ZFS features that they would not normally have. For example,
- combining the ZFS compression property together with a
- 250 MB volume allows creation of a compressed FAT
+ <para>A volume can be formatted with any file system.
+ To the user, it will appear as if they are working with
+ a regular disk using that specific filesystem and not <acronym>ZFS</acronym>.
+ Putting ordinary file systems on
+ <acronym>ZFS</acronym> volumes provides features those file systems would not normally have. For example,
+ using the compression property on a
+ 250 MB volume allows creation of a compressed <acronym>FAT</acronym>
filesystem.</para>
<screen>&prompt.root; <userinput>zfs create -V 250m -o compression=on tank/fat32</userinput>
@@ -922,7 +918,7 @@ Filesystem Size Used Avail Cap
/dev/zvol/tank/fat32 on /mnt (msdosfs, local)</screen>
<para>Destroying a volume is much the same as destroying a
- regular filesystem dataset. The operation is nearly
+ regular file system dataset. The operation is nearly
instantaneous, but it may take several minutes for the free
space to be reclaimed in the background.</para>
</sect2>
@@ -930,17 +926,17 @@ Filesystem Size Used Avail Cap
<sect2 xml:id="zfs-zfs-rename">
<title>Renaming a Dataset</title>
- <para>The name of a dataset can be changed using
- <command>zfs rename</command>. The rename command can also be
+ <para>The name of a dataset can be changed with
+ <command>zfs rename</command>. <command>rename</command> can also be
used to change the parent of a dataset. Renaming a dataset to
be under a different parent dataset will change the value of
those properties that are inherited by the child dataset.
When a dataset is renamed, it is unmounted and then remounted
in the new location (inherited from the parent dataset). This
- behavior can be prevented using the <option>-u</option>
- parameter. Due to the nature of snapshots, they cannot be
+ behavior can be prevented with <option>-u</option>.
+ Due to the nature of snapshots, they cannot be
renamed outside of the parent dataset. To rename a recursive
- snapshot, specify the <option>-r</option> parameter, and all
+ snapshot, specify <option>-r</option>, and all
snapshots with the same specified snapshot will be
renamed.</para>
</sect2>
@@ -949,7 +945,7 @@ Filesystem Size Used Avail Cap
<title>Setting Dataset Properties</title>
<para>Each <acronym>ZFS</acronym> dataset has a number of
- properties to control its behavior. Most properties are
+ properties that control its behavior. Most properties are
automatically inherited from the parent dataset, but can be
overridden locally. Set a property on a dataset with
<command>zfs set
@@ -960,11 +956,11 @@ Filesystem Size Used Avail Cap
Most properties can be reverted to their inherited values
using <command>zfs inherit</command>.</para>
- <para>It is possible to set user-defined properties in ZFS.
+ <para>It is possible to set user-defined properties.
They become part of the dataset configuration and can be used
to provide additional information about the dataset or its
contents. To distinguish these custom properties from the
- ones supplied as part of ZFS, a colon (<literal>:</literal>)
+ ones supplied as part of <acronym>ZFS</acronym>, a colon (<literal>:</literal>)
is used to create a custom namespace for the property.</para>
<screen>&prompt.root; <userinput>zfs set <replaceable>custom</replaceable>:<replaceable>costcenter</replaceable>=<replaceable>1234</replaceable> <replaceable>tank</replaceable></userinput>
@@ -972,7 +968,7 @@ Filesystem Size Used Avail Cap
NAME PROPERTY VALUE SOURCE
tank custom:costcenter 1234 local</screen>
- <para>To remove such a custom property again, use
+ <para>To remove a custom property, use
<command>zfs inherit</command> with
<option>-r</option>. If the custom property is not
defined in any of the parent datasets, it will be removed
@@ -992,15 +988,15 @@ tank custom:costcenter -
<para><link linkend="zfs-term-snapshot">Snapshots</link> are one
of the most powerful features of <acronym>ZFS</acronym>. A
- snapshot provides a point-in-time copy of the dataset that the
- parent dataset can be rolled back to if required. Create a
+ snapshot provides a point-in-time copy of the dataset. The
+ parent dataset can be easily rolled back to that snapshot state. Create a
snapshot with <command>zfs snapshot
<replaceable>dataset</replaceable>@<replaceable>snapshotname</replaceable></command>.
- Specifying the <option>-r</option> parameter will recursively
- create a snapshot with the same name on all child
+ Adding <option>-r</option> creates a snapshot recursively,
+ with the same name on all child
datasets.</para>
- <para>By default, snapshots are mounted in a hidden directory
+ <para>Snapshots are mounted in a hidden directory
under the parent dataset: <filename
class="directory">.zfs/snapshots/<replaceable>snapshotname</replaceable></filename>.
Individual files can easily be restored to a previous state by
@@ -1012,17 +1008,17 @@ tank custom:costcenter -
<para>Snapshots consume space based on how much the parent file
system has changed since the time of the snapshot. The
<literal>written</literal> property of a snapshot tracks how
- much space is being used by a snapshot.</para>
+ much space is being used by the snapshot.</para>
- <para>To destroy a snapshot and recover the space consumed by
- the overwritten or deleted files, run <command>zfs destroy
+ <para>Snapshots are destroyed and the space reclaimed with
+ <command>zfs destroy
<replaceable>dataset</replaceable>@<replaceable>snapshot</replaceable></command>.
- The <option>-r</option> parameter will recursively remove all
+ Adding <option>-r</option> recursively removes all
snapshots with the same name under the parent dataset. Adding
- the <option>-n -v</option> parameters to the destroy command
- will display a list of the snapshots that would be deleted and
- an estimate of how much space would be reclaimed by proceeding
- with the destroy operation.</para>
+ <option>-n -v</option> to the command
+ displays a list of the snapshots that would be deleted and
+ an estimate of how much space would be reclaimed without
+ performing the actual destroy operation.</para>
</sect2>
<sect2 xml:id="zfs-zfs-clones">
@@ -1050,17 +1046,17 @@ tank custom:costcenter -
<sect2 xml:id="zfs-zfs-quota">
<title>Dataset, User and Group Quotas</title>
- <para><link linkend="zfs-term-quota">Dataset quotas</link> can
- be used to restrict the amount of space that can be consumed
+ <para><link linkend="zfs-term-quota">Dataset quotas</link> are
+ used to restrict the amount of space that can be consumed
by a particular dataset.
<link linkend="zfs-term-refquota">Reference Quotas</link> work
- in very much the same way, except they only count the space
+ in very much the same way, but only count the space
used by the dataset itself, excluding snapshots and child
- datasets. Similarly
+ datasets. Similarly,
<link linkend="zfs-term-userquota">user</link> and
<link linkend="zfs-term-groupquota">group</link> quotas can be
- used to prevent users or groups from consuming all of the
- available space in the pool or dataset.</para>
+ used to prevent users or groups from using all of the
+ space in the pool or dataset.</para>
<para>To enforce a dataset quota of 10 GB for
<filename>storage/home/bob</filename>, use the
@@ -1103,14 +1099,12 @@ tank custom:costcenter -
</listitem>
</itemizedlist>
- <para>For example, to enforce a user quota of 50 GB for a
- user named <replaceable>joe</replaceable>, use the
- following:</para>
+ <para>For example, to enforce a user quota of 50 GB for the
+ user named <replaceable>joe</replaceable>:</para>
<screen>&prompt.root; <userinput>zfs set userquota at joe=50G</userinput></screen>
- <para>To remove the quota or make sure that one is not set,
- instead use:</para>
+ <para>To remove any quota:</para>
<screen>&prompt.root; <userinput>zfs set userquota at joe=none</userinput></screen>
@@ -1146,8 +1140,8 @@ tank custom:costcenter -
the <literal>groupquota</literal> privilege can view and set
all quotas for all groups.</para>
- <para>To display the amount of space consumed by each user on
- the specified filesystem or snapshot, along with any specified
+ <para>To display the amount of space used by each user on
+ a filesystem or snapshot, along with any specified
quotas, use <command>zfs userspace</command>. For group
information, use <command>zfs groupspace</command>. For more
information about supported options or how to display only
@@ -1165,10 +1159,10 @@ tank custom:costcenter -
<para><link linkend="zfs-term-reservation">Reservations</link>
guarantee a minimum amount of space will always be available
- to a dataset. The reserved space will not be available to any
+ on a dataset. The reserved space will not be available to any
other dataset. This feature can be especially useful to
- ensure that users cannot comsume all of the free space,
- leaving none for an important dataset or log files.</para>
+ ensure that free space is available
+ for an important dataset or log files.</para>
<para>The general format of the <literal>reservation</literal>
property is
@@ -1178,8 +1172,7 @@ tank custom:costcenter -
<screen>&prompt.root; <userinput>zfs set reservation=10G storage/home/bob</userinput></screen>
- <para>To make sure that no reservation is set, or to remove a
- reservation, use:</para>
+ <para>To clear any reservation:</para>
<screen>&prompt.root; <userinput>zfs set reservation=none storage/home/bob</userinput></screen>
@@ -1189,9 +1182,8 @@ tank custom:costcenter -
Reservation</link>, with the general format
<literal>refreservation=<replaceable>size</replaceable></literal>.</para>
- <para>To check if any reservations or refreservations exist on
- <filename>storage/home/bob</filename>, execute one of the
- following commands:</para>
+ <para>This command shows any reservations or refreservations that exist on
+ <filename>storage/home/bob</filename>:</para>
<screen>&prompt.root; <userinput>zfs get reservation storage/home/bob</userinput>
&prompt.root; <userinput>zfs get refreservation storage/home/bob</userinput></screen>
@@ -1209,65 +1201,59 @@ tank custom:costcenter -
<para>When enabled,
<link linkend="zfs-term-deduplication">Deduplication</link>
uses the checksum of each block to detect duplicate blocks.
- When a new block is about to be written and it is determined
- to be a duplicate of an existing block, rather than writing
- the same data again, <acronym>ZFS</acronym> just references
- the existing data on disk an additional time. This can offer
- tremendous space savings if your data contains many discreet
- copies of the file information. Deduplication requires an
+ When a new block is a duplicate of an existing block,
+ <acronym>ZFS</acronym> writes an additional reference to
+ the existing data instead of the whole duplicate block. This can offer
+ tremendous space savings if the data contains many discreet
+ copies of the file information. Be warned: deduplication requires an
extremely large amount of memory, and most of the space
savings can be had without the extra cost by enabling
compression instead.</para>
- <para>To activate deduplication, you simply need to set the
- following property on the target pool.</para>
+ <para>To activate deduplication, set the
+ <literal>dedup</literal> property on the target pool:</para>
<screen>&prompt.root; <userinput>zfs set dedup=on <replaceable>pool</replaceable></userinput></screen>
- <para>it is important to mention that only new data being
- written to the pool will be deduplicated. Data that is
- already residing on the pool will not be deduplicated by
+ <para>Only new data being
+ written to the pool will be deduplicated. Data that has
+ already been written to the pool will not be deduplicated merely by
activating this option. As such, a pool with a freshly
activated deduplication property will look something like this
- example.</para>
+ example:</para>
<screen>&prompt.root; <userinput>zpool list</userinput>
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
pool 2.84G 2.19M 2.83G 0% 1.00x ONLINE -</screen>
<para>The <literal>DEDUP</literal> column shows the actual rate
- of deduplication for that pool. A value of
- <literal>1.00x</literal> that no data has been deduplicated
- due to insufficient duplicate data. In the following example,
+ of deduplication for the pool. A value of
+ <literal>1.00x</literal> shows that data has not been deduplicated
+ yet. In the next example,
the ports tree is copied three times into different
- directories on the deduplicated pool above to provide
- redundancy.</para>
+ directories on the deduplicated pool created above.</para>
<screen>&prompt.root; <userinput>zpool list</userinput>
for d in dir1 dir2 dir3; do
for> mkdir $d && cp -R /usr/ports $d &
for> done</screen>
- <para>Now that redundant data has been created, ZFS detects that
- and makes sure that the data is not taking up additional
- space.</para>
+ <para>Redundant data is detected and deduplicated:</para>
<screen>&prompt.root; <userinput>zpool list</userinput>
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
pool 2.84G 20.9M 2.82G 0% 3.00x ONLINE -</screen>
- <para>The <literal>DEDUP</literal> column now contains the
- value <literal>3.00x</literal>. This indicates that ZFS
- detected the copies of the ports tree data and was able to
- deduplicate it at a ratio of 1/3. The space savings that this
- yields can be enormous, but only when there is enough memory
- available to keep track of the deduplicated blocks.</para>
+ <para>The <literal>DEDUP</literal> column now shows a factor of
+ <literal>3.00x</literal>. The multiple copies of the ports
+ tree data was detected and deduplicated, taking only a third
+ of the space. The potential for space savings
+ can be enormous, but comes at the cost of having enough memory
+ to keep track of the deduplicated blocks.</para>
<para>Deduplication is not always beneficial, especially when
- there is not much redundant data on a ZFS pool. To see how
- much space could be saved by deduplication for a given set of
- data that is already stored in a pool, ZFS can simulate the
- effects that deduplication would have:</para>
+ there is not much redundant data on a pool. <acronym>ZFS</acronym>
+ can show potential space savings by simulating deduplication on an existing pool:</para>
<screen>&prompt.root; <userinput>zdb -S <replaceable>pool</replaceable></userinput>
Simulated DDT histogram:
@@ -1293,16 +1279,16 @@ dedup = 1.05, compress = 1.11, copies =
<para>After <command>zdb -S</command> finishes analyzing the
pool, it shows the space reduction ratio that would be
achieved by activating deduplication. In this case,
- <literal>1.16</literal> is a very poor rate that is mostly
+ <literal>1.16</literal> is a very poor ratio that is mostly
influenced by compression. Activating deduplication on this
- pool would not save any significant amount of space. Keeping
- the formula <literal>dedup * compress / copies = deduplication
- ratio</literal> in mind, a system administrator can plan the
+ pool would not save any significant amount of space. Using
+ the formula <emphasis>dedup * compress / copies = deduplication
+ ratio</emphasis>, system administrators can plan the
storage allocation more towards having multiple copies of data
or by having a decent compression rate in order to utilize the
space savings that deduplication provides. As a rule of
- thumb, compression should be used first before deduplication
- due to the lower memory requirements.</para>
+ thumb, compression should be used before deduplication
+ due to the much lower memory requirements.</para>
</sect2>
<sect2 xml:id="zfs-zfs-jail">
@@ -1316,8 +1302,8 @@ dedup = 1.05, compress = 1.11, copies =
to the specified jail, and <command>zfs unjail</command>
detaches it. For the dataset to be administered from
within a jail, the <literal>jailed</literal> property must be
- set. Once a dataset is jailed it can no longer be mounted on
- the host, because the jail administrator may have set
+ set. Once a dataset is jailed, it can no longer be mounted on
+ the host because the jail administrator may have set
unacceptable mount points.</para>
</sect2>
</sect1>
@@ -1398,7 +1384,7 @@ dedup = 1.05, compress = 1.11, copies =
<title>ZFS on i386</title>
<para>Some of the features provided by <acronym>ZFS</acronym>
- are RAM-intensive, and may require tuning for maximum
+ are memory intensive, and may require tuning for maximum
efficiency on systems with limited
<acronym>RAM</acronym>.</para>
@@ -1422,7 +1408,7 @@ dedup = 1.05, compress = 1.11, copies =
<sect3>
<title>Kernel Configuration</title>
- <para>Due to the <acronym>RAM</acronym> limitations of the
+ <para>Due to the address space limitations of the
&i386; platform, <acronym>ZFS</acronym> users on the
&i386; architecture should add this option to a
custom kernel configuration file, rebuild the kernel, and
@@ -1636,7 +1622,7 @@ vfs.zfs.vdev.cache.size="5M"</programlis
operational.</para>
<para>In a <acronym>RAID-Z1</acronym> configuration
- with 4 disks, each 1 TB, usable storage is
+ with four disks, each 1 TB, usable storage is
3 TB and the pool will still be able to
operate in degraded mode with one faulted disk.
If an additional disk goes offline before the
@@ -1644,15 +1630,15 @@ vfs.zfs.vdev.cache.size="5M"</programlis
in the pool can be lost.</para>
<para>In a <acronym>RAID-Z3</acronym> configuration
- with 8 disks of 1 TB, the volume would
+ with eight disks of 1 TB, the volume will
provide 5 TB of usable space and still be
able to operate with three faulted disks. &sun;
- recommends no more than 9 disks in a single vdev.
+ recommends no more than nine disks in a single vdev.
If the configuration has more disks, it is
recommended to divide them into separate vdevs and
the pool data will be striped across them.</para>
- <para>A configuration of 2
+ <para>A configuration of two
<acronym>RAID-Z2</acronym> vdevs consisting of 8
disks each would create something similar to a
<acronym>RAID-60</acronym> array. A
@@ -1960,7 +1946,7 @@ vfs.zfs.vdev.cache.size="5M"</programlis
The fletcher algorithms are faster, but sha256 is a
strong cryptographic hash and has a much lower chance of
collisions at the cost of some performance. Checksums
- can be disabled, but it is inadvisable.</entry>
+ can be disabled, but it is not advised.</entry>
</row>
<row>
@@ -1988,7 +1974,7 @@ vfs.zfs.vdev.cache.size="5M"</programlis
<entry>Checksums make it possible to detect duplicate
blocks of data as they are written. If deduplication is
enabled, instead of writing the block a second time, the
- reference count of the existing block will be increased,
+ reference count of the existing block is increased,
saving storage space. To do this,
<acronym>ZFS</acronym> keeps a deduplication table
(<acronym>DDT</acronym>) in memory, containing the list
@@ -2026,14 +2012,14 @@ vfs.zfs.vdev.cache.size="5M"</programlis
<entry xml:id="zfs-term-scrub">Scrub</entry>
<entry>Instead of a consistency check like &man.fsck.8;,
- <acronym>ZFS</acronym> has the <command>scrub</command>.
+ <acronym>ZFS</acronym> has <command>scrub</command>.
<command>scrub</command> reads all data blocks stored on
the pool and verifies their checksums against the known
- good checksums stored in the metadata. This periodic
+ good checksums stored in the metadata. A periodic
check of all the data stored on the pool ensures the
recovery of any corrupted blocks before they are needed.
A scrub is not required after an unclean shutdown, but
- it is recommended that you run a scrub at least once
+ it is recommended that a <command>scrub</command> is run at least once
each quarter. Checksums of each block are tested as
they are read in normal use, but a scrub operation makes
sure even infrequently used blocks are checked for
@@ -2048,7 +2034,7 @@ vfs.zfs.vdev.cache.size="5M"</programlis
addition to quotas and space reservations. This gives
the administrator fine grained control over how space is
allocated and allows critical file systems to reserve
- space to ensure other file systems do not take all of
+ space to ensure other file systems do not use up all of
the free space.
<para><acronym>ZFS</acronym> supports different types of
@@ -2167,7 +2153,7 @@ vfs.zfs.vdev.cache.size="5M"</programlis
<row>
<entry xml:id="zfs-term-online">Online</entry>
- <entry>A ZFS pool or vdev that is in the
+ <entry>A pool or vdev in the
<literal>Online</literal> state has all of its member
devices connected and fully operational. Individual
devices in the <literal>Online</literal> state are
@@ -2190,10 +2176,10 @@ vfs.zfs.vdev.cache.size="5M"</programlis
<row>
<entry xml:id="zfs-term-degraded">Degraded</entry>
- <entry>A ZFS pool or vdev that is in the
+ <entry>A pool or vdev in the
<literal>Degraded</literal> state has one or more disks
that have been disconnected or have failed. The pool is
- still usable, however if additional devices fail, the
+ still usable, but if additional devices fail, the
pool could become unrecoverable. Reconnecting the
missing devices or replacing the failed disks will
return the pool to an
@@ -2206,7 +2192,7 @@ vfs.zfs.vdev.cache.size="5M"</programlis
<row>
<entry xml:id="zfs-term-faulted">Faulted</entry>
- <entry>A ZFS pool or vdev that is in the
+ <entry>A pool or vdev in the
<literal>Faulted</literal> state is no longer
operational and the data residing on it can no longer be
accessed. A pool or vdev enters the
More information about the svn-doc-projects
mailing list