Editing Zpool

Jump to: navigation, search

Warning: You are not logged in.

Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
 
Run '''diskutil list''' command to make sure you pick the correct disk before attempting to create your pool. Look under IDENTIFIER. Note that if you partition the disk yourself, and specify a slice for ZFS, you are responsible for making sure the partition table shows the partition type is ZFS. This can be done with OS X's built-in "gpt" command or the easier to use "gdisk" command, which can be downloaded [http://sourceforge.net/projects/gptfdisk/ here]. For detailed instructions, see [[Suppressing_the_annoying_pop-up|here]]. Partitions can also be made by resizing existing ones with '''diskutil'''.
 
  
 
== Creating a pool ==
 
== Creating a pool ==
  
Start using ZFS by first creating a storage pool with the command '''zpool'''. As mentioned above, the disk partition on which the pool will be created must be specified before creation.
+
In the past, it was customary to label the disk before using it with ZFS. This is no longer the case. It is preferred
 +
that ZFS labels the disk.
 +
 
 +
It is recommended on OS X that ZFS is told to be case-insensitive and using formD. This is what OS X expects by default.
 +
It is also recommended to create pools with the default 4096 (4k) disks, even if your disks are still the older 512.
  
Once the disk partition is decided, you may run the following command with a few preferred properties:
 
 
'''Recommended pool creation command line'''
 
'''Recommended pool creation command line'''
  
  sudo zpool create -f -o ashift=12 -O casesensitivity=insensitive -O normalization=formD $poolname mirror diskX diskY
+
  zpool create -f -O casesensitivity=insensitive -O normalization=formD -o ashift=12 $poolname /dev/diskX
  
Or using "\" to show it broken up over multiple lines:
+
* Replace $poolname with the name of the pool you want, for example "tank".
 +
* ''If you want to use the entire disk for ZFS'', replace /dev/diskX with the available disk. For example /dev/disk1
 +
* If you have already partitioned the disk, and wish to only use a slice, use /dev/disk1s2
  
sudo zpool create -f -o ashift=12 \
+
Use "diskutil list" to make sure you pick the correct disk before attempting to create your pool.
-O casesensitivity=insensitive \
+
-O normalization=formD \
+
$poolname mirror diskX diskY
+
  
* Replace $poolname with the name of the pool you want. For example, "tank."
+
You can also decide to disable '''access time''', enable '''compression''' and all those nice things. But that
* ''If you want to use the entire disk for ZFS'', replace diskX and diskY with the available disks. For example, disk1 and disk2.
+
can be done at any time in ZFS. For example
* If you have already partitioned the disk, and wish to only use a slice, use diskXsN. For example, disk1s2.
+
* -f [https://openzfs.github.io/openzfs-docs/man/8/zpool-create.8.html Forces use of vdevs, '''even if''' they appear '''in use''' or specify a conflicting replication level. Not all devices can be overridden in this manner.] (not: "instructs ZFS to label the disk for you.")
+
* -o ashift=12 instructs ZFS to use 4K sectors, as described here: http://wiki.illumos.org/display/illumos/ZFS+and+Advanced+Format+disks
+
  
The default for ashift is 9, but you will most likely want to create pools with an ashift of 12, which is appropriate for 4096 (4k) disks (i.e., Advanced Format disks), even if your disks are still the older 512. If you are using SSDs in your pool now, or anticipate replacing any of your pool's disks with SSDs in the future, then an ashift of 13 is a better choice. It is important to get this right now because a vdev's ashift cannot be changed after the vdev is created.
+
zfs set compression=on $poolname
  
On OS X you will want to use [http://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms NFD normalization], or quite a few applications won't work (e.g., iTunes). Read [https://towardsdatascience.com/what-on-earth-is-unicode-normalization-56c005c55ad0 What on Earth is Unicode Normalization?] helps understand why.
 
  
You can also decide to disable '''access time''', enable '''compression,''' and all those nice things. But that can be done at any time in ZFS. For example
 
 
sudo zfs set compression=lz4 $poolname
 
 
or for pool version 28 compatibility
 
 
sudo zfs set compression=on $poolname
 
 
If you do want compression, you should turn it on '''as soon as possible''', or enable it at the time the pool is created. Turning compression on later will ''only'' apply to new data added to a dataset going forward, ''not'' the preexisting uncompressed data you already put in the dataset while compression was turned off.
 
 
For example, you may want to use something like this
 
 
sudo zpool create -f -o ashift=12 -O compression=lz4 -O casesensitivity=insensitive -O atime=off -O normalization=formD tank mirror disk3 disk4
 
 
Or using "\" to show it broken up over multiple lines:
 
sudo zpool create -f -o ashift=12 \
 
-O compression=lz4 \
 
-O casesensitivity=insensitive \
 
-O atime=off \
 
-O normalization=formD \
 
tank mirror disk3 disk4
 
 
If you absolutely must be compatible with non-OpenZFS implementations of ZFS (e.g., Oracle Solaris), you'd need to do
 
 
sudo zpool create -f -o version=28 -o ashift=12 -O compression=on -O casesensitivity=insensitive -O atime=off -O normalization=formD tank mirror disk3 disk4
 
 
Or using "\" to show it broken up over multiple lines:
 
 
sudo zpool create -f -o version=28 -o ashift=12 \
 
-O compression=on \
 
-O casesensitivity=insensitive \
 
-O atime=off \
 
-O normalization=formD \
 
tank mirror disk3 disk4
 
 
For available properties to consider and set, see [https://docs.oracle.com/cd/E23824_01/html/821-1448/gazss.html#scrolltoc Introducing ZFS Properties].
 
  
 
== Unplugging a pool ==
 
== Unplugging a pool ==
  
The equivalent of unmounting a device before unplugging it is exporting a pool in ZFS terminology.  
+
Pool export is not yet automatic in Open ZFS on OS X. Before you unplug any devices should '''must export all pools used by the device'''.
  
Before unplugging any devices you '''must export all pools using the device'''.
+
  zpool export $poolname
 
+
  sudo zpool export $poolname
+
  
 
The export can sometimes fail if the mount is busy (as with all filesystems). So you might need to close any
 
The export can sometimes fail if the mount is busy (as with all filesystems). So you might need to close any
applications still accessing the pool. Also, there is an option "-f" to force unmount while exporting:
+
windows still accessing the ZFS volume. If you are just rebooting, you need not export first.
 
+
sudo zpool export -f $poolname
+
 
+
If you are just rebooting, you do not need to export first.
+
 
+
== Feature flags ==
+
If you are creating a pool on another OpenZFS platform, and you want to make sure that pool is compatible with OpenZFS on OS X, you must not enable any [http://open-zfs.org/wiki/Features#Feature_Flags feature flags] not yet supported by OpenZFS on OS X.
+
 
+
For instance, let's say you were creating a pool using OmniOS, which currently supports more feature flags than OpenZFS on OS X.
+
 
+
To start out with all feature flags disabled, use the -d option when creating the pool:
+
 
+
sudo zpool create -d $poolname c2t1d0
+
 
+
To selectively enable only the feature flags supported by OpenZFS on OS X (as of 2014-08-01) use -d combined with -o feature@..., as follows:
+
 
+
sudo zpool create -d -o feature@async_destroy=enabled -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled $poolname c2t1d0
+
 
+
Or using "\" to show it broken up over multiple lines:
+
sudo zpool create -d \
+
-o feature@async_destroy=enabled \
+
-o feature@empty_bpobj=enabled \
+
-o feature@lz4_compress=enabled \
+
$poolname c2t1d0
+
 
+
And don't forget to specify the other options you want, as discussed above:
+
sudo zpool create -d \
+
-o feature@async_destroy=enabled \
+
-o feature@empty_bpobj=enabled \
+
-o feature@lz4_compress=enabled \
+
-O compression=lz4 \
+
-O casesensitivity=insensitive \
+
-O atime=off \
+
-O normalization=formD \
+
$poolname c2t1d0
+
 
+
(Note that illumos distributions such as OmniOS handle ashift indirectly as described here: http://wiki.illumos.org/display/illumos/ZFS+and+Advanced+Format+disks)
+

Please note that all contributions to OpenZFS on OS X may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see OpenZFS on OS X:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)