<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hurlster.com/wiki/index.php?action=history&amp;feed=atom&amp;title=ZFS</id>
	<title>ZFS - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://hurlster.com/wiki/index.php?action=history&amp;feed=atom&amp;title=ZFS"/>
	<link rel="alternate" type="text/html" href="https://hurlster.com/wiki/index.php?title=ZFS&amp;action=history"/>
	<updated>2026-08-25T03:34:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://hurlster.com/wiki/index.php?title=ZFS&amp;diff=2555&amp;oldid=prev</id>
		<title>Gqwill69: /* Installing ZFS on Ubuntu Server 12.04 */</title>
		<link rel="alternate" type="text/html" href="https://hurlster.com/wiki/index.php?title=ZFS&amp;diff=2555&amp;oldid=prev"/>
		<updated>2013-12-31T19:03:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Installing ZFS on Ubuntu Server 12.04&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Installing ZFS on Ubuntu Server 12.04 ==&lt;br /&gt;
&lt;br /&gt;
*From ubuntu server I needed to install python-software-properties, so that i could run add-apt-repository&lt;br /&gt;
*( You don’t need to complete this first step from ubuntu desktop, or mint )&lt;br /&gt;
 $ sudo apt-get install python-software-properties&lt;br /&gt;
&lt;br /&gt;
*Then install the zfs-native ppa, so that you can download and compile native zfs goodness&lt;br /&gt;
 $ sudo add-apt-repository ppa:zfs-native/stable&lt;br /&gt;
&lt;br /&gt;
*Update your repo list, so it includes the new zfs-native ppa&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
Make sure the the zfs packages in the repo&lt;br /&gt;
 $ apt-cache search zfs&lt;br /&gt;
&lt;br /&gt;
*Install, Note: this might take some time as it compiles the kernel module for your kernel&lt;br /&gt;
 $ sudo apt-get install ubuntu-zfs&lt;br /&gt;
&lt;br /&gt;
*Run the zfs commands to make sure it works&lt;br /&gt;
 $ sudo zfs&lt;br /&gt;
 $ sudo zpool&lt;br /&gt;
&lt;br /&gt;
*Create a pool&amp;lt;br&amp;gt;-m sets default mount directory&lt;br /&gt;
 $ sudo zpool create -m /var/local/storage pool1 raidz /dev/sda /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
*Check the mounts&lt;br /&gt;
 $ dan@nas:/data$ df -h -F zfs&lt;br /&gt;
 Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
 pool1           3.6T  128K  3.6T   1% /var/local/storage&lt;br /&gt;
&lt;br /&gt;
== ZFS with 4K drives ==&lt;br /&gt;
 zpool create -m none -o ashift=12 mypool raidz /dev/disk1 /dev/disk2 /dev/disk3&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;-o ashift=12&amp;#039;&amp;#039;&amp;#039; forces ZFS to use 4K sectors instead of 512 byte sectors. Many new drives use 4K sectors, but lie to the OS about it for ‘compatability’ reasons. My first ZFS filesystem used the 512-byte sectors in the beginning, and I had shocking performance (~10Mb/s write).&lt;br /&gt;
&lt;br /&gt;
See http://zfsonlinux.org/faq.html#HowDoesZFSonLinuxHandlesAdvacedFormatDrives for more information about it.&lt;br /&gt;
&lt;br /&gt;
== ZFS Cheatsheet ==&lt;br /&gt;
This is a quick and dirty cheatsheet on Sun&amp;#039;s ZFS&lt;br /&gt;
*Directories and Files&lt;br /&gt;
 error messages 	/var/adm/messages&lt;br /&gt;
 console&lt;br /&gt;
*States&lt;br /&gt;
 DEGRADED 	One or more top-level devices is in the degraded state because they have become offline. Sufficient replicas exist to keep  functioning&lt;br /&gt;
 FAULTED 	One or more top-level devices is in the faulted state because they have become offline. Insufficient replicas exist to keep functioning&lt;br /&gt;
 OFFLINE 	The device was explicity taken offline by the &amp;quot;zpool offline&amp;quot; command&lt;br /&gt;
 ONLINE 	The device is online and functioning&lt;br /&gt;
 REMOVED 	The device was physically removed while the system was running&lt;br /&gt;
 UNAVAIL 	The device could not be opened&lt;br /&gt;
*Storage Pools&lt;br /&gt;
Displaying 	&lt;br /&gt;
 zpool list&lt;br /&gt;
 zpool list -o name,size,altroot&lt;br /&gt;
 Note: there are a number of properties that you can select, the default is: name, size, used, available, capacity, health, altroot&lt;br /&gt;
&lt;br /&gt;
*Status&lt;br /&gt;
 zpool status&lt;br /&gt;
&lt;br /&gt;
 Show only errored pools with more verbosity&lt;br /&gt;
 zpool status -xv      &lt;br /&gt;
&lt;br /&gt;
*Statistics&lt;br /&gt;
 zpool iostat -v 5 5&lt;br /&gt;
&lt;br /&gt;
Note: use this command like you would iostat&lt;br /&gt;
*History&lt;br /&gt;
 zpool history -il&lt;br /&gt;
&lt;br /&gt;
*Creating&lt;br /&gt;
Performing a dry run but don&amp;#039;t actual perform the creation&lt;br /&gt;
 zpool create -n data01 c1t0d0s0&lt;br /&gt;
&lt;br /&gt;
you can persume that I created two files called /zfs1/disk01 and /zfs1/disk02 using mkfile&lt;br /&gt;
 zpool create data01 /zfs1/disk01 /zfs1/disk02&lt;br /&gt;
&lt;br /&gt;
using a standard disk slice&lt;br /&gt;
 zpool create data01 c1t0d0s0&lt;br /&gt;
&lt;br /&gt;
using a different mountpoint than the default /&amp;lt;pool name&amp;gt;&lt;br /&gt;
 zpool create -m /zfspool data01 c1t0d0s0&lt;br /&gt;
&lt;br /&gt;
mirror and hot spare disks examples&lt;br /&gt;
 zpool create data01 mirror c1t0d0 c2t0d0 mirror c1t0d1 c2t0d1&lt;br /&gt;
 zpool create data01 mirror c1t0d0 c2t0d0 spare c3t0d0&lt;br /&gt;
&lt;br /&gt;
setting up a log device and mirroring it&lt;br /&gt;
 zpool create data01 mirror c1t0d0 c2t0d0 log mirror c3t0d0 c4t0d0&lt;br /&gt;
&lt;br /&gt;
setting up a cache device&lt;br /&gt;
 zpool create data 01 mirror c1t0d0 c2t0d0 cache c3t0d0 c3t1d0&lt;br /&gt;
&lt;br /&gt;
destroying&lt;br /&gt;
 zpool destroy /zfs1/data01&lt;br /&gt;
&lt;br /&gt;
in the event of a disaster you can re-import a destroyed pool&lt;br /&gt;
 zpool import -f -D -d /zfs1 data031&lt;br /&gt;
&lt;br /&gt;
adding&lt;br /&gt;
 zpool add data01 c2t0d0&lt;br /&gt;
&lt;br /&gt;
Note: make sure that you get this right as zpool only supports the removal of hot spares and cache disks&lt;br /&gt;
removing&lt;br /&gt;
 zpool remove data01 c2t0d0&lt;br /&gt;
&lt;br /&gt;
Note: zpool only supports the removal of hot spares and cache disks&lt;br /&gt;
clearing faults&lt;br /&gt;
 zpool clear data01&lt;br /&gt;
&lt;br /&gt;
Clearing a specific disk fault&lt;br /&gt;
 zpool clear data01 c2t0d0&lt;br /&gt;
&lt;br /&gt;
attaching ## c2t0d0 is an existing disk that is not mirrored, by attaching c3t0d0 both disks will become a mirror pair&lt;br /&gt;
 zpool attach data01 c2t0d0 c3t0d0&lt;br /&gt;
&lt;br /&gt;
detaching&lt;br /&gt;
 zpool detach data01 c2t0d0&lt;br /&gt;
&lt;br /&gt;
Note: see above notes is attaching&lt;br /&gt;
onlining&lt;br /&gt;
 zpool online data01 c2t0d0&lt;br /&gt;
&lt;br /&gt;
offlining 	&lt;br /&gt;
 zpool offline data01 c2t0d0&lt;br /&gt;
&lt;br /&gt;
Temporary offlining (will revent back after a reboot)&lt;br /&gt;
 zpool offline data01 -t c2t0d0&lt;br /&gt;
&lt;br /&gt;
Replacing 	## replacing like for like&lt;br /&gt;
zpool replace data03 c2t0d0&lt;br /&gt;
&lt;br /&gt;
Replacing with another disk&lt;br /&gt;
 zpool replace data03 c2t0d0 c3t0d0&lt;br /&gt;
&lt;br /&gt;
scrubbing 	&lt;br /&gt;
 zpool scrub data01&lt;br /&gt;
&lt;br /&gt;
Stop a scrubbing in progress, check the scrub line using &amp;quot;zpool status data01&amp;quot; to see any errors&lt;br /&gt;
 zpool scrub -s data01&lt;br /&gt;
&lt;br /&gt;
Note: Only one of scrubbing or resilvering can be running at the sametime&lt;br /&gt;
 scrubbing - examines all data to discover hardware faults or disk failures&lt;br /&gt;
 resilvering - examines only data that ZFS knows to be out of date&lt;br /&gt;
&lt;br /&gt;
exporting&lt;br /&gt;
 zpool export data01&lt;br /&gt;
&lt;br /&gt;
importing 	&lt;br /&gt;
when using standard disk devices i.e c2t0d0&lt;br /&gt;
 zpool import data01&lt;br /&gt;
&lt;br /&gt;
if using files in say the /zfs filesystem&lt;br /&gt;
 zpool import -d /zfs&lt;br /&gt;
&lt;br /&gt;
importing a destroyed pool&lt;br /&gt;
 zpool import -f -D -d /zfs1 data03&lt;br /&gt;
getting parameters&lt;br /&gt;
 zpool get all data01&lt;br /&gt;
&lt;br /&gt;
Note: the source column denotes if the value has been change from it default value, a dash in this column means it is a read-only value&lt;br /&gt;
setting parameters&lt;br /&gt;
 zpool set autoreplace=on data01&lt;br /&gt;
&lt;br /&gt;
Note: use the command &amp;quot;zpool get all &amp;lt;pool&amp;gt;&amp;quot; to obtain list of current setting&lt;br /&gt;
upgrade 	## List upgrade paths&lt;br /&gt;
 zpool upgrade -v&lt;br /&gt;
&lt;br /&gt;
upgrade all pools&lt;br /&gt;
 zpool upgrade -a&lt;br /&gt;
&lt;br /&gt;
upgrade specific pool, use &amp;quot;zpool get all &amp;lt;pool&amp;gt;&amp;quot; to obtain version number of a pool&lt;br /&gt;
 zpool upgrade data01&lt;br /&gt;
&lt;br /&gt;
upgrade to a specific version&lt;br /&gt;
 zpool upgrade -V 10 data01&lt;br /&gt;
&lt;br /&gt;
Filesystem&lt;br /&gt;
displaying&lt;br /&gt;
 zfs list&lt;br /&gt;
&lt;br /&gt;
list different types&lt;br /&gt;
 zfs list -t filesystem&lt;br /&gt;
 zfs list -t snapshot&lt;br /&gt;
 zfs list -t volume&lt;br /&gt;
&lt;br /&gt;
recursive display&lt;br /&gt;
 zfs list -r data01/oracle&lt;br /&gt;
&lt;br /&gt;
complex listing&lt;br /&gt;
 zfs list -o name,sharenfs,mountpoint&lt;br /&gt;
&lt;br /&gt;
Note: there are a number of attributes that you can use in a complex listing, so use the man page to see them all&lt;br /&gt;
creating 	&lt;br /&gt;
&lt;br /&gt;
persuming i have a pool called data01 create a /data01/apache filesystem&lt;br /&gt;
 zfs create data01/apache&lt;br /&gt;
&lt;br /&gt;
using a different mountpoint&lt;br /&gt;
 zfs create -o mountpoint=/oracle data01/oracle&lt;br /&gt;
&lt;br /&gt;
create a volume - the device can be accessed via /dev/zvol/[rdsk|dsk]/data03/swap&lt;br /&gt;
 zfs create -V 50mb data01/swap&lt;br /&gt;
 swap -a /dev/zvol/dsk/data01/swap&lt;br /&gt;
&lt;br /&gt;
Note: don&amp;#039;t use a zfs volume as a dump device it is not supported&lt;br /&gt;
destroying&lt;br /&gt;
 zfs destroy data01/oracle&lt;br /&gt;
&lt;br /&gt;
using the recusive options -r = all children, -R = all dependants&lt;br /&gt;
 zfs destroy -r data01/oracle&lt;br /&gt;
 zfs destroy -R data01/oracle&lt;br /&gt;
&lt;br /&gt;
mounting&lt;br /&gt;
 zfs mount data01&lt;br /&gt;
&lt;br /&gt;
Note: there are all the normal mount options that you can apply i.e ro/rw, setuid&lt;br /&gt;
unmounting&lt;br /&gt;
 zfs umount data01&lt;br /&gt;
&lt;br /&gt;
share 	&lt;br /&gt;
 zfs share data01&lt;br /&gt;
&lt;br /&gt;
Persist over reboots&lt;br /&gt;
 zfs set sharenfs=on data01&lt;br /&gt;
&lt;br /&gt;
unshare&lt;br /&gt;
 zfs unshare data01&lt;br /&gt;
&lt;br /&gt;
persist over reboots&lt;br /&gt;
 zfs set sharenfs=off data01&lt;br /&gt;
&lt;br /&gt;
snapshotting&lt;br /&gt;
 zfs snapshot data01@10022010&lt;br /&gt;
&lt;br /&gt;
destroying a snapshot&lt;br /&gt;
 zfs destroy data01@10022010&lt;br /&gt;
&lt;br /&gt;
rollback&lt;br /&gt;
 zfs rollback data01@10022010&lt;br /&gt;
&lt;br /&gt;
cloning/promoting 	&lt;br /&gt;
 zfs clone data01@10022010 data03/clone&lt;br /&gt;
&lt;br /&gt;
promoting a clone&lt;br /&gt;
 zfs promote data03/clone&lt;br /&gt;
&lt;br /&gt;
Note: the clone must reside in the same pool&lt;br /&gt;
renaming 	&lt;br /&gt;
the dataset must be kept within the same pool&lt;br /&gt;
 zfs rename data03/ora_disk01 data03/ora_d01&lt;br /&gt;
&lt;br /&gt;
 Note: you have two options&lt;br /&gt;
 -p creates all the non-existing parent datasets&lt;br /&gt;
 -r recursively rename the sanpshots of all descendent datasets (used with snapshots only)&lt;br /&gt;
&lt;br /&gt;
getting parameters 	&lt;br /&gt;
&lt;br /&gt;
List all the properties&lt;br /&gt;
 zfs get all data03/oracle&lt;br /&gt;
&lt;br /&gt;
get a specific property&lt;br /&gt;
 zfs get setuid data03/oracle&lt;br /&gt;
&lt;br /&gt;
get a list of a specific properites for all datasets&lt;br /&gt;
 zfs get compression&lt;br /&gt;
&lt;br /&gt;
Note: the source column denotes if the value has been change from it default value, a dash in this column means it is a read-only value&lt;br /&gt;
setting parameters 	&lt;br /&gt;
&lt;br /&gt;
set and unset a quota&lt;br /&gt;
 zfs set quota=50M data03/oracle&lt;br /&gt;
 zfs set quota=none data03/oracle&lt;br /&gt;
&lt;br /&gt;
Note: use the command &amp;quot;zfs get all &amp;lt;dataset&amp;gt; &amp;quot; to obtain list of current settings&lt;br /&gt;
inherit 	## set back to the default value&lt;br /&gt;
 zfs inherit compression data03/oracle&lt;br /&gt;
&lt;br /&gt;
upgrade 	&lt;br /&gt;
List the upgrade paths&lt;br /&gt;
 zfs upgrade -v&lt;br /&gt;
&lt;br /&gt;
List all the datasets that are not at the current level&lt;br /&gt;
 zfs upgrade&lt;br /&gt;
&lt;br /&gt;
upgrade a specific dataset&lt;br /&gt;
 upgrade -V &amp;lt;version&amp;gt; data03/oracle&lt;br /&gt;
&lt;br /&gt;
send/receive 	&lt;br /&gt;
here is a complete example of a send and receive with incremental update&lt;br /&gt;
create some test files&lt;br /&gt;
 mkfile -v 100m /zfs/master&lt;br /&gt;
 mkdir -v 100m /zfs/slave&lt;br /&gt;
&lt;br /&gt;
create mountpoints&lt;br /&gt;
 mkdir /master&lt;br /&gt;
 mkdir /slave&lt;br /&gt;
&lt;br /&gt;
Create the pools&lt;br /&gt;
 zpool create master&lt;br /&gt;
 zpool create slave&lt;br /&gt;
&lt;br /&gt;
create the data filesystem&lt;br /&gt;
 zfs create master/data&lt;br /&gt;
&lt;br /&gt;
create a test file&lt;br /&gt;
 echo &amp;quot;created: 09:58&amp;quot; &amp;gt; /master/data/test.txt&lt;br /&gt;
&lt;br /&gt;
create a snapshot and send it to the slave, you could use SSH or tape to transfer to another server (see below)&lt;br /&gt;
 zfs snapshot master/data@1&lt;br /&gt;
 zfs send master/data@1 | zfs receive slave/data&lt;br /&gt;
&lt;br /&gt;
set the slave to read-only because you can cause data corruption, make sure if do this before accessing anything the&lt;br /&gt;
slave/data directory&lt;br /&gt;
 zfs set readonly=on slave/data&lt;br /&gt;
&lt;br /&gt;
update the original test.txt file&lt;br /&gt;
 echo &amp;quot;`date`&amp;quot; &amp;gt;&amp;gt; /master/data/text.txt&lt;br /&gt;
&lt;br /&gt;
create a second snapshot and send the differences, you may get an error message saying that the desination had been&lt;br /&gt;
modified this is because you did not set the slave/data to ready only (see above)&lt;br /&gt;
 zfs snapshot master/data@2&lt;br /&gt;
 zfs send master/data@1 master/data@2 | zfs receive slave/data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
using SSH&lt;br /&gt;
 zfs send master/data@1 | ssh backup_server zfs receive backups/data@1&lt;br /&gt;
&lt;br /&gt;
using a tape drive, you can also use cpio&lt;br /&gt;
 zfs send master/data@1 &amp;gt; /dev/rmt/0&lt;br /&gt;
 zfs receive slave/data2@1 &amp;lt; /dev/rmt/0&lt;br /&gt;
 zfs rename slave/data slave/data.old&lt;br /&gt;
 zfs rename slave/data2 slave/data&lt;br /&gt;
&lt;br /&gt;
you can also save incremental data&lt;br /&gt;
 zfs send master/data@12022010 &amp;gt; /dev/rmt/0&lt;br /&gt;
 zfs send -i master/data@12022010 master/data@13022010 &amp;gt; /dev/rmt/0&lt;br /&gt;
&lt;br /&gt;
Using gzip to compress the snapshot&lt;br /&gt;
 zfs send master/fs@snap | gzip &amp;gt; /dev/rmt/0&lt;br /&gt;
&lt;br /&gt;
allow/unallow 	&lt;br /&gt;
display the permissions set&lt;br /&gt;
 zfs allow master&lt;br /&gt;
&lt;br /&gt;
create permission set&lt;br /&gt;
 zfs allow -s @permset1 create,mount,snapshot,clone,promote master&lt;br /&gt;
&lt;br /&gt;
grant a user permissions&lt;br /&gt;
 zfs allow vallep @permset1 master&lt;br /&gt;
&lt;br /&gt;
revoke a user permissions&lt;br /&gt;
 zfs unallow vallep @permset1 master&lt;br /&gt;
&lt;br /&gt;
Note: there are many permissions that you can set so see the man page or just use the &amp;quot;zfs allow&amp;quot; command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Gqwill69</name></author>
	</entry>
</feed>