<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Luca Morettoni &#187; ZFS</title>
	<atom:link href="http://www.morettoni.net/tag/zfs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.morettoni.net</link>
	<description>software developing &#38; consulting</description>
	<lastBuildDate>Fri, 06 May 2011 07:14:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>ZFS: always consistent on disk (parte 3)</title>
		<link>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p3/</link>
		<comments>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p3/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 10:29:08 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=370</guid>
		<description><![CDATA[
			
				
			
		
<p>Terminiamo questa serie di articoli (parte 1, parte 2) sulla consistenza su disco di ZFS analizzando una comoda proprietà impostabile a livello di filesystem che ci consente di aumentare le probabilità di ripristino di un file in caso di errore anche avendo a disposizione un solo disco fisso. Purtroppo in molti casi ci è impossibile [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-always-consistent-on-disk-p3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-always-consistent-on-disk-p3%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Terminiamo questa serie di articoli (<a title="parte 1" href="http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p1/" target="_self">parte 1</a>, <a title="parte 2" href="http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p2/" target="_self">parte 2</a>) sulla consistenza su disco di <a title="ZFS" href="http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome" target="_blank">ZFS</a> analizzando una comoda proprietà impostabile a livello di filesystem che ci consente di aumentare le probabilità di ripristino di un file in caso di errore anche avendo a disposizione un solo disco fisso. Purtroppo in molti casi ci è impossibile disporre di un secondo disco per impostare il mirroring a livello di pool; pensate ad esempio ai portatili, potrei aggiungere come secondo disco di mirror un disco esterno collegato via USB, ma le prestazioni ne risentirebbero!<br />
Grazie alla proprietà <strong>copies</strong>, impostabile a livello di filesystem, possiamo indicare a ZFS quante copie deve fare di ogni singolo blocco dati, nel caso in cui uno di questi blocchi fosse danneggiato ZFS provvederà a recuperarlo dalla seconda copia così come avrebbe fatto da un secondo disco. Il limite massimo di copie impostabili è pari a tre.</p>
<p style="text-align: center;"><strong>ATTENZIONE: i test comportano l’alterazione dei dati presenti nei dischi utilizzati nei pool, quindi effettuate questi test su filesystem di prova, che non contengono dati e sopratutto A VOSTRO RISCHIO E PERICOLO!!!!</strong></p>
<p>Andiamo a valutare il comportamento di ZFS in caso di alterazione del disco come visto negli altri esempi.<br />
Cominciamo creando il nostro pool di test con un solo disco:</p>
<pre>$ mkfile 150m disk1
$ pfexec zpool create testPool `pwd`/disk1</pre>
<p>impostiamo a due il numero delle copie settando l&#8217;apposita opzione in fase di creazione del filesystem:</p>
<pre>$ pfexec zfs create -o copies=2 testPool/fs1</pre>
<p>copiamo il solito file di test e rileviamo l&#8217;Object-ID e il DVA del primo blocco dati:</p>
<pre>$ pfexec cp /etc/bash/bash_completion /testPool/fs1/
$ ls -li /testPool/fs1/
total 1
<strong>5</strong> -rwxr-xr-x 1 root root 217434 2009-12-16 11:37 bash_completion*
$ pfexec zdb -ddddd testPool/fs1 5
Dataset testPool/fs1 [ZPL], ID 30, cr_txg 6, 547K, 5 objects,
rootbp DVA[0]=&lt;0:5c800:200&gt; DVA[1]=&lt;0:1c5c800:200&gt; DVA[2]=&lt;0:3814a00:200&gt; [L0 DMU objset]
fletcher4 lzjb LE contiguous unique triple size=800L/200P
birth=10L/10P fill=5
cksum=155932587a:748a6697e34:1521b17e820db:2b3b6c4032fb3a

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         5    2    16K   128K   515K   256K  100.00  ZFS plain file
                                        264   bonus  ZFS znode
	dnode flags: USED_BYTES USERUSED_ACCOUNTED
	dnode maxblkid: 1
	path	/bash_completion
	uid     0
	gid     0
	atime	Wed Dec 16 11:37:03 2009
	mtime	Wed Dec 16 11:37:03 2009
	ctime	Wed Dec 16 11:37:03 2009
	crtime	Wed Dec 16 11:37:03 2009
	gen	10
	mode	100755
	size	217434
	parent	3
	links	1
	xattr	0
	rdev	0x0000000000000000
Indirect blocks:
               0 L1  0:5a000:400 4000L/400P F=2 B=10/10
               0  L0 <strong>0:19e00:20000</strong> 20000L/20000P F=1 B=10/10
           20000  L0 0:39e00:20000 20000L/20000P F=1 B=10/10

		segment [0000000000000000, 0000000000040000) size  256K</pre>
<p>frammentiamo, sporchiamo e ricostruiamo il disco come al solito:</p>
<pre>$ pfexec zpool export testPool
$ ./zsplit.sh disk1 0x19e00
8399+0 records in
8399+0 records out
4300288 bytes (4.3 MB) copied, 0.100184 s, 42.9 MB/s
256+0 records in
256+0 records out
131072 bytes (131 kB) copied, 0.00666101 s, 19.7 MB/s
298545+0 records in
298545+0 records out
152855040 bytes (153 MB) copied, 3.43945 s, 44.4 MB/s
$ head disk1-p2
#
# This file contains an example set of shell completions that can be used with
# bash(1).  These completions allow a user to complete filenames, commands
# name, command line options, and command line arguments using the [tab] key.
# The completions defined here are specific to the GNU command set, as a result
# they will provide the choice of GNU command line options in response to the
# [tab] key.  For the completed options to match the command implementation,
# you may have to have /usr/gnu/bin at the head of your PATH.
#
# These completions are not included in the default bash(1) environment.  To
$ sed "s/ file / FILE /g" disk1-p2 &gt; disk1-p2-bad
$ cat disk1-p1 disk1-p2-bad disk1-p3 &gt; disk1</pre>
<p>ora non ci resta che accedere nuovamente al file e vedere come si comporta ZFS:</p>
<pre>$ pfexec zpool import -d `pwd` testPool
$ zpool status testPool
  pool: testPool
 state: ONLINE
 scrub: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	testPool                                ONLINE       0     0     0
	  /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     0

errors: No known data errors
$ head /testPool/fs1/bash_completion
#
# This file contains an example set of shell completions that can be used with
# bash(1).  These completions allow a user to complete filenames, commands
# name, command line options, and command line arguments using the [tab] key.
# The completions defined here are specific to the GNU command set, as a result
# they will provide the choice of GNU command line options in response to the
# [tab] key.  For the completed options to match the command implementation,
# you may have to have /usr/gnu/bin at the head of your PATH.
#
# These completions are not included in the default bash(1) environment.  To
$ zpool status testPool
  pool: testPool
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
	attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
	using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	testPool                                ONLINE       0     0     0
	  /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     1

errors: No known data errors</pre>
<p>benissimo, ZFS è riuscito a recuperare il contenuto del file dalla seconda copia e ci informa dell&#8217;accaduto, spetterà poi a noi valutare se è giunti il momento di sostituire il disco!<br />
Ricordate che è possibile variare il numero di copie impostando l&#8217;apposita opzione:</p>
<pre>$ pfexec zfs set copies=3 testPool/fs1</pre>
<p>tuttavia il nuovo numero di copie riguarderà solo i nuovi file che verranno scritti o modificati dopo la modifica della proprietà.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ZFS: always consistent on disk (parte 2)</title>
		<link>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p2/</link>
		<comments>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p2/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 08:05:35 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=363</guid>
		<description><![CDATA[
			
				
			
		
<p>Con il precedente articolo abbiamo analizzato il comportamento di ZFS in caso di danneggiamento di alcuni blocchi su disco vediamo cosa accade mettendo a disposizione del filesystem un minimo di ridondanza. Negli esempi utilizzerò due dischi in mirroring, tuttavia lo stesso identico discorso vale in caso di utilizzo di RAIDZ.</p>
<p style="text-align: center;">ATTENZIONE: i test comportano [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-always-consistent-on-disk-p2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-always-consistent-on-disk-p2%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Con il <a title=" ZFS: always consistent on disk (parte 1)" href="http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p1/" target="_self">precedente articolo</a> abbiamo analizzato il comportamento di <a title="ZFS" href="http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome" target="_blank">ZFS</a> in caso di danneggiamento di alcuni blocchi su disco vediamo cosa accade mettendo a disposizione del filesystem un minimo di ridondanza. Negli esempi utilizzerò due dischi in mirroring, tuttavia lo stesso identico discorso vale in caso di utilizzo di RAIDZ.</p>
<p style="text-align: center;"><strong>ATTENZIONE: i test comportano l’alterazione dei dati presenti nei dischi utilizzati nei pool, quindi effettuate questi test su filesystem di prova, che non contengono dati e sopratutto A VOSTRO RISCHIO E PERICOLO!!!!</strong></p>
<p>Anche qui andiamo a creare il nostro pool e un filesystem al suo interno, copiamo un file e andiamo a leggere il suo Object-ID:</p>
<pre>$ mkfile 150m disk1 disk2
$ pfexec zpool create testPool mirror `pwd`/disk1 `pwd`/disk2
$ pfexec zfs create testPool/fs1
$ pfexec zpool status testPool
  pool: testPool
 state: ONLINE
 scrub: none requested
config:

	NAME                                      STATE     READ WRITE CKSUM
	testPool                                  ONLINE       0     0     0
	  mirror-0                                ONLINE       0     0     0
	    /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     0
	    /export/home/luca/itl-osug/zfs/disk2  ONLINE       0     0     0

errors: No known data errors
$ pfexec cp /etc/bash/bash_completion /testPool/fs1/
$ ls -li /testPool/fs1/
total 1
<strong>5</strong> -rwxr-xr-x 1 root root 217434 2009-12-16 11:29 bash_completion*</pre>
<p>ora identifichiamo il DVA del primo blocco dati del nostro file ricorrendo sempre al tool zdb(1M):</p>
<pre>$ pfexec zdb -ddddd testPool/fs1 5
Dataset testPool/fs1 [ZPL], ID 30, cr_txg 6, 280K, 5 objects,
rootbp DVA[0]=&lt;0:5a600:200&gt; DVA[1]=&lt;0:1c1a600:200&gt; [L0 DMU objset]
fletcher4 lzjb LE contiguous unique double size=800L/200P
birth=9L/9P fill=5
cksum=15c4f5e074:7dbede02443:17c06031a984a:31d9454fbe4275

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         5    2    16K   128K   258K   256K  100.00  ZFS plain file
                                        264   bonus  ZFS znode
	dnode flags: USED_BYTES USERUSED_ACCOUNTED
	dnode maxblkid: 1
	path	/bash_completion
	uid     0
	gid     0
	atime	Wed Dec 16 11:29:43 2009
	mtime	Wed Dec 16 11:29:43 2009
	ctime	Wed Dec 16 11:29:43 2009
	crtime	Wed Dec 16 11:29:43 2009
	gen	9
	mode	100755
	size	217434
	parent	3
	links	1
	xattr	0
	rdev	0x0000000000000000
Indirect blocks:
               0 L1  0:55a00:400 4000L/400P F=2 B=9/9
               0  L0 <strong>0:15800:20000</strong> 20000L/20000P F=1 B=9/9
           20000  L0 0:35800:20000 20000L/20000P F=1 B=9/9

		segment [0000000000000000, 0000000000040000) size  256K</pre>
<p>e come al solito esportiamo il filesystem, spezzettiamo il disco, sporchiamo il settore che inizia al blocco 0x15800, ricomponiamo il tutto e rimontiamo il filesystem:</p>
<pre>$ pfexec zpool export testPool
$ ./zsplit.sh disk1 0x15800
8364+0 records in
8364+0 records out
4282368 bytes (4.3 MB) copied, 0.101551 s, 42.2 MB/s
256+0 records in
256+0 records out
131072 bytes (131 kB) copied, 0.00645801 s, 20.3 MB/s
298580+0 records in
298580+0 records out
152872960 bytes (153 MB) copied, 3.40133 s, 44.9 MB/s
$ head disk1-p2
#
# This file contains an example set of shell completions that can be used with
# bash(1).  These completions allow a user to complete filenames, commands
# name, command line options, and command line arguments using the [tab] key.
# The completions defined here are specific to the GNU command set, as a result
# they will provide the choice of GNU command line options in response to the
# [tab] key.  For the completed options to match the command implementation,
# you may have to have /usr/gnu/bin at the head of your PATH.
#
# These completions are not included in the default bash(1) environment.  To
$ sed "s/ file / FILE /g" disk1-p2 &gt; disk1-p2-bad
$ cat disk1-p1 disk1-p2-bad disk1-p3 &gt; disk1
$ pfexec zpool import -d `pwd` testPool
$ pfexec zpool status testPool
  pool: testPool
 state: ONLINE
 scrub: none requested
config:

	NAME                                      STATE     READ WRITE CKSUM
	testPool                                  ONLINE       0     0     0
	  mirror-0                                ONLINE       0     0     0
	    /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     0
	    /export/home/luca/itl-osug/zfs/disk2  ONLINE       0     0     0

errors: No known data errors</pre>
<p>proviamo ad accedere al nostro file:</p>
<pre>$ head /testPool/fs1/bash_completion
#
# This file contains an example set of shell completions that can be used with
# bash(1).  These completions allow a user to complete filenames, commands
# name, command line options, and command line arguments using the [tab] key.
# The completions defined here are specific to the GNU command set, as a result
# they will provide the choice of GNU command line options in response to the
# [tab] key.  For the completed options to match the command implementation,
# you may have to have /usr/gnu/bin at the head of your PATH.
#
# These completions are not included in the default bash(1) environment.  To
$ pfexec zpool status testPool
  pool: testPool
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
	attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
	using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: none requested
config:

	NAME                                      STATE     READ WRITE CKSUM
	testPool                                  ONLINE       0     0     0
	  mirror-0                                ONLINE       0     0     0
	    /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     1
	    /export/home/luca/itl-osug/zfs/disk2  ONLINE       0     0     0

errors: No known data errors</pre>
<p>in questo caso siamo riusciti ad accedere al nostro file e tutto sembra essere al suo posto, tuttavia lo status di ZFS ci riporta che è stato riscontrato un errore di checksum nel disco numero 1 (quello da noi alterato) e ci &#8220;invita&#8221; a prendere qualche decisione in merito (sostituire il disco oppure azzerare il conteggio degli errorri)!!</p>
<p>Nella <a title="Parte 3" href="http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p3/" target="_self">terza</a> ed ultima parte scopriremo come aumentare la sicurezza dei nostri dati anche disponendo di un solo disco fisso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ZFS: always consistent on disk (parte 1)</title>
		<link>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p1/</link>
		<comments>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p1/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 13:02:46 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=348</guid>
		<description><![CDATA[
			
				
			
		
<p>Ieri sera (15 dicembre), durante la LinuxNight di dicembre (foto), organizzata dal Linux User Group di Perugia ho avuto modo di presentare alcune caratteristiche di OpenSolaris, nell&#8217;ambito degli incontri organizzati dal Gruppo Italiano degli Utenti OpenSolaris (ITL-OSUG).</p>
<p>Si è parlato di numerosissimi aspetti di OpenSolaris: DTrace, SMF, Time Slider e sopratutto ZFS. Proprio riguardo al motto [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-always-consistent-on-disk-p1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-always-consistent-on-disk-p1%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Ieri sera (15 dicembre), durante la LinuxNight di dicembre (<a title="Foto LinuxNight" href="http://www.flickr.com/photos/21830354@N04/sets/72157622894445761" target="_blank">foto</a>), organizzata dal <a title="LUG Perugia" href="http://www.perugiagnulug.org/" target="_blank">Linux User Group di Perugia</a> ho avuto modo di presentare alcune caratteristiche di <a title="OpenSolaris" href="http://www.opensolaris.org" target="_blank">OpenSolaris</a>, nell&#8217;ambito degli incontri organizzati dal Gruppo Italiano degli Utenti OpenSolaris (<a title="ITL-OSUG" href="http://hub.opensolaris.org/bin/view/User+Group+itl-osug/" target="_blank">ITL-OSUG</a>).</p>
<p>Si è parlato di numerosissimi aspetti di OpenSolaris: <a title="DTrace" href="http://hub.opensolaris.org/bin/view/Community+Group+dtrace/WebHome" target="_blank">DTrace</a>, <a title="SMF" href="http://hub.opensolaris.org/bin/view/Community+Group+smf/" target="_blank">SMF</a>, Time Slider e sopratutto <a title="ZFS" href="http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome" target="_blank">ZFS</a>. Proprio riguardo al motto <strong>&#8220;always consistent on disk&#8221;</strong> di ZFS si sono concentrate alcune demo (non tutte portate a termine per mancanza di tempo), per chi non ha potuto seguire &#8220;in diretta&#8221; la presentazione ecco riportati i vari passaggi dei test effettuati.</p>
<p style="text-align: center;"><strong>ATTENZIONE: i test comportano l&#8217;alterazione dei dati presenti nei dischi utilizzati nei pool, quindi effettuate questi test su filesystem di prova, che non contengono dati e sopratutto A VOSTRO RISCHIO E PERICOLO!!!!</strong></p>
<p>Cominciamo creando un nuovo pool (denominato &#8220;<em>testPool</em>&#8220;) senza nessuna ridondanza dei dati attiva in cui creeremo un filesystem (denominato &#8220;<em>fs1</em>&#8220;), come dischi ho utilizzato un file (chiamato &#8220;<em>disk1</em>&#8220;):</p>
<pre>$ mkfile 150m disk1
$ pfexec zpool create testPool `pwd`/disk1
$ pfexec zfs create testPool/fs1
$ zpool status testPool
  pool: testPool
 state: ONLINE
 scrub: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	testPool                                ONLINE       0     0     0
	  /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     0</pre>
<p>ora copiamo un file qualsiasi nel nostro filesystem e andiamo a leggere l&#8217;i-node attribuito al file (per essere precisi sotto ZFS dovremmo usare il termine ObjectID al posto di i-node):</p>
<pre>$ pfexec cp /etc/bash/bash_completion /testPool/fs1/
$ ls -li /testPool/fs1/
total 259
<strong>5</strong> -rwxr-xr-x 1 root root 217434 2009-12-16 11:21 bash_completion*</pre>
<p>ora, grazie al tool di diagnostica zdb(1M) andiamo a leggere in quali blocchi fisici è stato memorizzato il nostro file (con Object-ID uguale a 5):</p>
<pre>$ pfexec zdb -ddddd testPool/fs1 5
Dataset testPool/fs1 [ZPL], ID 30, cr_txg 6, 280K, 5 objects,
rootbp DVA[0]=&lt;0:58200:200&gt; DVA[1]=&lt;0:1c18200:200&gt; [L0 DMU objset]
fletcher4 lzjb LE contiguous unique double size=800L/200P
birth=8L/8P fill=5
cksum=15525a36dc:7f4d019c8fa:18a35fbbba8d3:349cb86bc37272

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         5    2    16K   128K   258K   256K  100.00  ZFS plain file
                                        264   bonus  ZFS znode
	dnode flags: USED_BYTES USERUSED_ACCOUNTED
	dnode maxblkid: 1
	path	/bash_completion
	uid     0
	gid     0
	atime	Wed Dec 16 11:21:45 2009
	mtime	Wed Dec 16 11:21:45 2009
	ctime	Wed Dec 16 11:21:45 2009
	crtime	Wed Dec 16 11:21:45 2009
	gen	8
	mode	100755
	size	217434
	parent	3
	links	1
	xattr	0
	rdev	0x0000000000000000
Indirect blocks:
               0 L1  0:53200:400 4000L/400P F=2 B=8/8
               0  <strong>L0 0:13000:20000</strong> 20000L/20000P F=1 B=8/8
           20000  <strong>L0 0:33000:20000</strong> 20000L/20000P F=1 B=8/8

		segment [0000000000000000, 0000000000040000) size  256K</pre>
<p>tra le tante informazioni visualizzate andiamo ad estrapolare i blocchi che ci interessano, ovvero quelli di livello 0 (L0): il nostro file è stato scritto usando due blocchi con i seguenti DVA (Data Virtual Address): <strong>0:13000:20000</strong> e <strong>0:33000:20000</strong>. Il significato dei tre numeri (in esadecimale) è: device sul quale è scritto il blocco (nel nostro caso ne abbiamo uno solo, quindi troveremo sempre zero), offset del blocco rispetto all'inizio del disco (a cui dovremmo aggiungere 4 MegaByte di spazio riservato ai metadati e al boot block) e per finire la grandezza del blocco.</p>
<p>Ora che conosciamo le "coordinate" del nostro file possiamo divertirci a fare qualche danno, prima però esportiamo il nostro pool per poter accedere senza problemi al disco da rovinare!</p>
<pre>$ pfexec zpool export testPool</pre>
<p>ora, per agevolare la demo ho creato uno script che prende il disco e lo divide in tre parti: la prima conterrà tutto il disco fino al blocco di inizio del file (escluso), la seconda con il blocco richiesto e la terza parte tutto il resto del disco. Lo script richiede due parametri: il nome del disco e l'offset del file (ricavato precedentemente con zdb), lo script è così composto:</p>
<pre>$ cat zsplit.sh
#!/bin/sh

DISK=$1

# converte da esadecimale a decimale
START=`echo $2 | awk --non-decimal-data '{print ($1)+0}'`
# aggiunge i 4M di offset (fissi) iniziali e divide per 512 (block size)
START=$(((4194304+$START)/512))
# se non specificato "estrae" 256 blocchi
SIZE=${3:-256}
END=$(($START+$SIZE))

# esegue la "frammentazione"
dd if=$DISK of=$DISK-p1 bs=512 count=$START
dd if=$DISK of=$DISK-p2 bs=512 skip=$START count=$SIZE
dd if=$DISK of=$DISK-p3 bs=512 skip=$END</pre>
<p>ora "sezioniamo" il nostro disco e controlliamo che la parte 2 contegga effettivamente il file presente sul nostro disco:</p>
<pre>$ ./zsplit.sh disk1 0x13000
8344+0 records in
8344+0 records out
4272128 bytes (4.3 MB) copied, 0.104004 s, 41.1 MB/s
256+0 records in
256+0 records out
131072 bytes (131 kB) copied, 0.00671322 s, 19.5 MB/s
298600+0 records in
298600+0 records out
152883200 bytes (153 MB) copied, 3.6703 s, 41.7 MB/s
$ head disk1-p2
#
# This file contains an example set of shell completions that can be used with
# bash(1).  These completions allow a user to complete filenames, commands
# name, command line options, and command line arguments using the [tab] key.
# The completions defined here are specific to the GNU command set, as a result
# they will provide the choice of GNU command line options in response to the
# [tab] key.  For the completed options to match the command implementation,
# you may have to have /usr/gnu/bin at the head of your PATH.
#
# These completions are not included in the default bash(1) environment.  To</pre>
<p>per simulare una &#8220;rottura&#8221; sporcherò il file con sed(1) mettendo in maiuscolo tutte le occorrenze della parola &#8220;file&#8221;:</p>
<pre>$ sed "s/ file / FILE /g" disk1-p2 &gt; disk1-p2-bad</pre>
<p>ora &#8220;ricomponiamo&#8221; il disco, facciamo di nuovo l&#8217;import del nostro pool e controlliamo il suo stato:</p>
<pre>$ cat disk1-p1 disk1-p2-bad disk1-p3 &gt; disk1
$ pfexec zpool import -d `pwd` testPool
$ zpool status testPool
  pool: testPool
 state: ONLINE
 scrub: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	testPool                                ONLINE       0     0     0
	  /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     0</pre>
<p>come vedete zfs ancora non si è accorto della presenza di eventuali errori, ma se proviamo ad accedere al nostro file ci accorgiamo che qualcosa non và:</p>
<pre>$ head /testPool/fs1/bash_completion
head: error reading `/testPool/fs1/bash_completion': I/O error
$ pfexec zpool status -v testPool
  pool: testPool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: none requested
config:

	NAME                                    STATE     READ WRITE CKSUM
	testPool                                ONLINE       0     0     1
	  /export/home/luca/itl-osug/zfs/disk1  ONLINE       0     0     2

errors: Permanent errors have been detected in the following files:

        /testPool/fs1/bash_completion</pre>
<p>ZFS ci avverte che il file è inutilizzabile e ci &#8220;invita&#8221; a ripristinarlo da un eventuale backup, visto che non ha la possibilità di farlo lui!!! E&#8217; importante eseguire ad intervalli regolari uno &#8220;scrub&#8221; dei nostri pool, altrimenti ci accorgeremmo di eventuali problemi solo al momento dell&#8217;accesso a potenziali file danneggiati; invece con lo scrub (comando <tt>zpool scrub nome_pool</tt>) sarà ZFS che andrà a controllorare i dati presenti su disco e la loro consistenza!</p>
<p>Bene, nella <a title="Seconda parte" href="http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p2/" target="_self">seconda parte</a> di questo articolo vedremo invece come si comporterà ZFS in caso di ridondanza dei dati, a presto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2009/12/zfs-always-consistent-on-disk-p1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>ZFS deduplication</title>
		<link>http://www.morettoni.net/2009/12/zfs-deduplication/</link>
		<comments>http://www.morettoni.net/2009/12/zfs-deduplication/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 15:08:59 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[dedup]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=337</guid>
		<description><![CDATA[
			
				
			
		
<p>Con l&#8217;uscita della build 128a di OpenSolaris viene aggiunta una nuova ed importante funzionalità a ZFS: la &#8220;deduplication&#8221; (evito di tradurre la parola&#8230;). Grazie a questa nuova funzionalità il filesystem è in grado di riconoscere eventuali blocchi duplicati e scriverli una volta solo&#8230; risparmiando così spazio su disco! I blocchi vengono riconosciuti grazie ad una [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-deduplication%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F12%2Fzfs-deduplication%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Con l&#8217;uscita della <a title="OpenSolaris build snv_128a" href="http://www.opensolaris.org/jive/thread.jspa?threadID=119219&amp;tstart=0">build 128a</a> di <a title="OpenSolaris" href="http://www.opensolaris.org" target="_blank">OpenSolaris</a> viene aggiunta una nuova ed importante funzionalità a <a title="ZFS" href="http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome" target="_blank">ZFS</a>: la &#8220;deduplication&#8221; (evito di tradurre la parola&#8230;). Grazie a questa nuova funzionalità il filesystem è in grado di riconoscere eventuali blocchi duplicati e scriverli una volta solo&#8230; risparmiando così spazio su disco! I blocchi vengono riconosciuti grazie ad una chiave di hash generata da un algoritmo (selezionabile) e verificata prima di ogni scrittura.<br />
Prima di entrare nel dettaglio mettiamo subito alla prova tale feature; creiamo tre dischi &#8220;su file&#8221; (da 150 Mega ciascuno) che andranno a comporre il nostro pool:</p>
<pre>$ mkfile 150m disk1 disk2 disk3</pre>
<p>ora creiamo il nuovo pool, chiamandolo con molta fantasia &#8220;dedup&#8221;:</p>
<pre>$ pfexec zpool create dedup \
    /export/home/luca/tmp/disk1 \
    /export/home/luca/tmp/disk2 \
    /export/home/luca/tmp/disk3</pre>
<p>controllandone le caratteristiche vediamo subito che la dimensione è pari a 435 Megabyte e notiamo che il rapporto di &#8220;deduplication&#8221; è pari a uno (visto che ancora non abbiamo scritto nulla):</p>
<pre>$ zpool get all dedup
NAME   PROPERTY       VALUE       SOURCE
dedup  size           435M        -
dedup  capacity       0%          -
dedup  altroot        -           default
dedup  health         ONLINE      -
dedup  guid           598651376828683765  default
dedup  version        22          default
dedup  bootfs         -           default
dedup  delegation     on          default
dedup  autoreplace    off         default
dedup  cachefile      -           default
dedup  failmode       wait        default
dedup  listsnapshots  off         default
dedup  autoexpand     off         default
<strong>dedup  dedupratio     1.00x       -
</strong>dedup  free           435M        -
dedup  allocated      79.5K       -</pre>
<p>ora andiamo ad abilitare la &#8220;deduplication&#8221; a livello di filesystem:</p>
<pre>$ pfexec zfs set dedup=on dedup</pre>
<p>da questo momento in poi, per ogni nuovo blocco che ZFS andrà a scrivere effettuerà il controllo di duplicazione: copiamo alcuni file nel nuovo filesystem e controlliamo. Per il test ho scelto di copiare alcuni MP3 presenti sul mio disco fisso, vediamo l&#8217;occupazione dei file prescelti:</p>
<pre>$ du -h /export/home/luca/Documents/Music/aavv_80/
72M    /export/home/luca/Documents/Music/aavv_80/</pre>
<p>ora creiamo tre cartelle nel nostro filesystem su cui andremo a copiare i file</p>
<pre>$ cd /dedup
$ pfexec mkdir d1
$ pfexec mkdir d2
$ pfexec mkdir d3
$ pfexec mkdir d4</pre>
<p>e copiamo i file:</p>
<pre>$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d1
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d2
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d3
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d4</pre>
<p>ora controlliamo lo spazio occupato:</p>
<pre>$ du -h .
72M    ./d1
72M    ./d2
72M    ./d3
72M    ./d4
287M    .</pre>
<p>i conti tornano; su tutte e quattro le cartelle sono presenti 72 Megabyte di MP3&#8230; mmmm&#8230; e la &#8220;deduplication&#8221; che fine ha fatto&#8230; non ha funzionato?!?!??? Controlliamo meglio:</p>
<pre>$ zpool list dedup
NAME    SIZE  ALLOC   FREE    CAP  <strong>DEDUP</strong>  HEALTH  ALTROOT
dedup   435M  72.5M   363M    16%  <strong>4.00x</strong>  ONLINE  -</pre>
<p>ecco svelato il mistero!!! Il comando &#8220;du&#8221; (come anche ls e molti altri) agendo a livello user &#8220;vede&#8221; la dimensione reale del file (la stessa cosa accade per i filesystem compressi), ma se controlliamo meglio lo spazio allocato a livello di pool vediamo che in realtà sono stati utilizzati &#8220;solo&#8221; 72.5 Megabyte e il rapporto di &#8220;deduplication&#8221; è salito a 4; ora i conti tornano alla perfezione!!!</p>
<p>Bene, dopo la pratica torniamo a parlare di teoria, analizzando le varie opzioni legate a questa nuova caratteristica. In precedenza abbiamo semplicemente attivato la deduplication, accettando così le impostazioni di default, tuttavia esistono diverse opzioni settabili per la proprietà dedup:</p>
<ul>
<li>off: dedup disattivata;</li>
<li>on: dedup attivata, il blocchi vengono controllati con l&#8217;algoritmo SHA256;</li>
<li>verify: come sopra l&#8217;algoritmo di hash è sempre SHA256, ma in caso di rilevamento di un blocco uguale, viene verificata l&#8217;esattezza bit a bit;</li>
<li>fletcher4,verify: viene usato l&#8217;algoritmo di hash &#8220;fletcher4&#8243;, che risulta essere molto più veloce ma che produce con maggiore probabilità delle duplicazioni di chiavi e quindi è per questo che la verifica è obbligatoria.</li>
</ul>
<p>Non è detto che in futuro vengano implementati anche altri algoritmi per la verifica delle duplicazioni dei blocchi, il consiglio è quello di attivare la deduplication con l&#8217;opzione verify per stare tranquilli <img src='http://www.morettoni.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2009/12/zfs-deduplication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggiungere dischi ai mirror di ZFS</title>
		<link>http://www.morettoni.net/2009/04/aggiungere-dischi-ai-mirror-di-zfs/</link>
		<comments>http://www.morettoni.net/2009/04/aggiungere-dischi-ai-mirror-di-zfs/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 13:28:36 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=262</guid>
		<description><![CDATA[
			
				
			
		
<p>Come già detto nei precedenti post inerenti ZFS è un filesystem &#8220;nato sicuro&#8221;, ovvero per sua natura abbiamo la massima garanzia di affidabilità per quello che riguarda le memorizzazioni su disco; tuttavia se veramente vogliamo dormire sonni tranquilli e sfruttare tutte le features di sicurezza di ZFS è consigliabile fornire più di un disco al [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F04%2Faggiungere-dischi-ai-mirror-di-zfs%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2009%2F04%2Faggiungere-dischi-ai-mirror-di-zfs%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Come già detto nei precedenti <a title="post ZFS" href="http://www.morettoni.net/tag/zfs/" target="_self">post</a> inerenti <a title="ZFS" href="http://opensolaris.org/os/community/zfs/" target="_blank">ZFS</a> è un filesystem &#8220;nato sicuro&#8221;, ovvero per sua natura abbiamo la massima garanzia di affidabilità per quello che riguarda le memorizzazioni su disco; tuttavia se veramente vogliamo dormire sonni tranquilli e sfruttare tutte le features di sicurezza di ZFS è consigliabile fornire più di un disco al sistema in modo che si possa quantomeno implementare un mirroring dei dati (sistema minimo di ridondanza).</p>
<p>Se al momento dell&#8217;installazione di <a title="OpenSolaris" href="http://www.opensolaris.org" target="_blank">OpenSolaris</a> (o dell&#8217;ultima release di <a title="Sun Solaris 10" href="http://www.sun.com/software/solaris/" target="_blank">Solaris 10</a>) avevate a disposizione un solo disco ZFS creerà in automatico un mirror &#8220;zoppo&#8221;, finchè non gli fornirete il secondo disco, se avete un disco nuovo nuovo basterà digitare:</p>
<pre># zpool attach -f rpool c0t0d0s0 c0t1d0s0</pre>
<p>dove <em>rpool</em> è il nome del vostro pool, seguito dal device del vecchio disco e da quello del nuovo. Se invece il disco che andate ad aggiungere non è nuovo (magari proviene da una vecchia macchina o contiene una versione di Solaris che andate ad aggiornare) riceverete un bel messaggio di errore:</p>
<pre># zpool attach -f rpool c0t0d0s0 c0t1d0s0
cannot attach c0t1d0s0 to c0t0d0s0: device is too small</pre>
<p>questo perchè con molta probabilità il vostro disco contiene già una label in formato EFI e questo tipo di label non &#8220;copre&#8221; totalmente la dimensione del disco, quindi occorrerà passare al formato SMI, per fare questo useremo il comando format (ho evidenziato in grassetto le scelte effettuate):</p>
<pre># format -e
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0t0d0 &lt;DEFAULT cyl 8921 alt 2 hd 255 sec 63&gt;
          /pci@0,0/pci8086,25f8@4/pci1000,3150@0/sd@0,0
       1. c0t1d0 &lt;DEFAULT cyl 8915 alt 2 hd 255 sec 63&gt;
          /pci@0,0/pci8086,25f8@4/pci1000,3150@0/sd@1,0
Specify disk (enter its number): <strong>1</strong>
selecting c0t1d0
[disk formatted]

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        scsi       - independent SCSI mode selects
        cache      - enable, disable or query SCSI disk cache
        volname    - set 8-character volume name
        !&lt;cmd&gt;     - execute &lt;cmd&gt;, then return
        quit
format&gt; <strong>label</strong>
[0] SMI Label
[1] EFI Label
Specify Label type[0]: <strong>0</strong>
Ready to label disk, continue? <strong>y</strong>

format&gt; <strong>quit</strong>
#</pre>
<p>fatto questo potremo ripetere il comando di attach e in automatico ZFS comincerà il resilvering del disco in modo da sincronizzare i dati.</p>
<pre># zpool status
  pool: rpool
 state: ONLINE
 scrub: resilver completed after 0h11m with 0 errors on Thu Apr 23 15:09:22 2009
config:

        NAME          STATE     READ WRITE CKSUM
        rpool         ONLINE       0     0     0
          mirror      ONLINE       0     0     0
            c0t0d0s0  ONLINE       0     0     0
            c0t1d0s0  ONLINE       0     0     0

errors: No known data errors</pre>
<p>C&#8217;è da aggiungere una piccola nota, alcune volte è necessario cancellare tutte le vecchie partizioni presenti sul disco prima di cambiare il formato delle <em>label</em>, basta entrare nel sottomenu <em>fdisk</em> e rimuovere tutte le partizioni e poi ripetere le operazioni viste prima.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2009/04/aggiungere-dischi-ai-mirror-di-zfs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Il mio primo commit!!!</title>
		<link>http://www.morettoni.net/2008/12/il-mio-primo-commit/</link>
		<comments>http://www.morettoni.net/2008/12/il-mio-primo-commit/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 11:30:00 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=109</guid>
		<description><![CDATA[
			
				
			
		
<p>Finalmente è arrivato il mio primo contributo ad OpenSolaris!
Già da qualche giorno nella mia signature delle mail compariva la misteriosa nota &#8220;OpenSolaris SCA #OS0344&#8220;, dove SCA stà per Sun Contributor Agreement; ma questa mattina, grazie all&#8217;aiuto di Tim Foster, ho committato la mia prima patch sul sistema, che permetterà di utilizzare la proprietà offset nel [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F12%2Fil-mio-primo-commit%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F12%2Fil-mio-primo-commit%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Finalmente è arrivato il mio primo contributo ad <a href="http://www.opensolaris.org/">OpenSolaris</a>!<br />
Già da qualche giorno nella mia signature delle mail compariva la misteriosa nota &#8220;<span style="font-weight: bold;">OpenSolaris SCA #OS0344</span>&#8220;, dove SCA stà per <span style="font-style: italic;">Sun Contributor Agreement</span>; ma questa mattina, grazie all&#8217;aiuto di <a href="http://blogs.sun.com/timf/">Tim Foster</a>, ho committato la mia prima patch sul sistema, che permetterà di utilizzare la proprietà <tt>offset</tt> nel servizio <tt>zfs-auto-snapshot</tt>.<br />
Ancora un grazie a Tim per il supporto e i preziosi consigli!!</p>
<p>Qui potete leggere l&#8217;annuncio del commit in mailing list:<br />
<a href="http://mail.opensolaris.org/pipermail/zfs-auto-snapshot/2008-December/000074.html">http://mail.opensolaris.org/pipermail/zfs-auto-snapshot/2008-December/000074.html</a><br />
e nel blog di Tim: <a href="http://blogs.sun.com/timf/en_IE/entry/6777694_need_ability_to_control">http://blogs.sun.com/timf/en_IE/entry/6777694_need_ability_to_control</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2008/12/il-mio-primo-commit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TimeSlider e zfs-auto-snapshot</title>
		<link>http://www.morettoni.net/2008/10/timeslider-e-zfs-auto-snapshot/</link>
		<comments>http://www.morettoni.net/2008/10/timeslider-e-zfs-auto-snapshot/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 14:39:00 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=104</guid>
		<description><![CDATA[
			
				
			
		
<p>Continua lo sviluppo di OpenSolaris ed ovviamente prosegue l&#8217;integrazione delle sue funzionalità più spinte con le varie componenti del sistema operativo. E&#8217; stata resa disponibile una feature che permette di integrare gli snapshot di ZFS con nautilus il &#8220;filemanager&#8221; di GNOME. In questo modo potrete andare a ritroso nel tempo e recuperare molto agevolmente le [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F10%2Ftimeslider-e-zfs-auto-snapshot%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F10%2Ftimeslider-e-zfs-auto-snapshot%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Continua lo sviluppo di <a href="http://www.opensolaris.org/">OpenSolaris</a> ed ovviamente prosegue l&#8217;integrazione delle sue funzionalità più spinte con le varie componenti del sistema operativo. E&#8217; stata resa disponibile una feature che permette di integrare gli snapshot di <a href="http://opensolaris.org/os/community/zfs/">ZFS</a> con <a href="http://www.gnome.org/projects/nautilus/">nautilus</a> il &#8220;filemanager&#8221; di <a href="http://www.gnome.org/">GNOME</a>. In questo modo potrete andare a ritroso nel tempo e recuperare molto agevolmente le vecchie copie dei file più importarti che avrete provveduto a rovinare e/o perdere!!!<br />
Una volta aggiornato OpenSolaris alla release <a href="http://morettoni.blogspot.com/2008/10/opensolaris-100.html">snv_100</a> basterà installare due pacchetti ed effettuare alcune &#8220;correzioni&#8221;, per primo installiamo i pacchetti necessari:</p>
<pre>pfexec pkg install SUNWzfs-auto-snapshot
pfexec pkg install SUNWgnome-time-slider</pre>
<p>il primo installa una serie di servizi sviluppati da <a href="http://blogs.sun.com/timf/">Tim Foster</a> che effettuano una serie di snapshot in automatico ogni 15 minuti, ogni ora, ogni giorno, ogni settimana ed ogni mese (ovviamente potrete personalizzare la frequenza e la quantità di snap da conservare, maggiori info le trovate nel <a href="http://src.opensolaris.org/source/xref/jds/zfs-snapshot/README.zfs-auto-snapshot.txt">README</a> di zfs-auto-snap), mentre il secondo pacchetto installa l&#8217;utility di configurazione del time-slider consentendovi di scegliere quali filesystem zfs includere nei salvataggi (di default tutti ovviamente).<br />
Come accennato, installare questi pacchetti non basta, in quanto a causa di un baco nel pacchetto di zfs-auto-snapshot l&#8217;utente che si occupa di effettuare gli snap non ha abbastanza privilegi; poco male, sistemiamo noi il tutto; per prima cosa togliamo il lock all&#8217;account <span style="font-style: italic;">zfssnap</span> (come utente <span style="font-weight: bold;">root</span>):</p>
<pre># passwd -N zfssnap</pre>
<p>e aggiungiamo i privilegi di amministrazione ZFS (tutto su una riga):</p>
<pre># echo "zfssnap::::type=role;auths=solaris.smf.manage.zfs-auto-snapshot;profiles=ZFS File System Management" &gt;&gt; /etc/user_attr</pre>
<p style="text-align: left;">Ora non rimane altro da fare che attivare la nostra &#8220;macchina del tempo&#8221; per filesystem con <span style="font-style: italic;">System/Administration/Time Slider Setup</span>:</p>
<p style="text-align: left;">
<div id="attachment_149" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-149" title="Time-Slider Setting" src="http://www.morettoni.net/wp-content/uploads/2008/10/time-machine-setting-300x254.png" alt="Impostazioni della Time-Slider" width="300" height="254" /><p class="wp-caption-text">Impostazioni della Time-Slider</p></div>
<p>ora potrete scegliere quali filesystem &#8220;proteggere&#8221; e lo spazio che intendete lasciare libero sul disco fisso; per default al raggiungimento dell&#8217;80% dello spazio occupato verranno cancellati gli snapshot più vecchi. Ecco cosa ho scelto di salvare sulla mia macchina:</p>
<div id="attachment_150" class="wp-caption aligncenter" style="width: 267px"><img class="size-medium wp-image-150" title="Time-Slider settings" src="http://www.morettoni.net/wp-content/uploads/2008/10/time-machine-setting2-257x300.png" alt="Qui si possono scegliere quali filesystem salvare" width="257" height="300" /><p class="wp-caption-text">Qui si possono scegliere quali filesystem salvare</p></div>
<p>Dopo qualche minuto potrete controllare se il servizio sta facendo il proprio lavoro con:</p>
<pre>$ zfs list -t snapshot | grep auto-snap</pre>
<p>ora, se aprite nautilus avrete la possibilità di &#8220;viaggiare nel tempo&#8221; (chiccando sull&#8217;icona &#8220;Restore&#8221;) e recuperare i vecchi file semplicemente muovendo la slide avanti ed indietro; ecco la mia <span style="font-style: italic;">home</span> ad esempio:</p>
<div id="attachment_151" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-151" title="La mia home" src="http://www.morettoni.net/wp-content/uploads/2008/10/time-machine-home-300x222.png" alt="ecco come si presenta la mia home &quot;ora&quot;" width="300" height="222" /><p class="wp-caption-text">ecco come si presenta la mia home &quot;ora&quot;</p></div>
<p>ed ecco evidenziato un file che avevo cancellato qualche minuto prima:</p>
<div id="attachment_152" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-152" title="File mancante" src="http://www.morettoni.net/wp-content/uploads/2008/10/time-machine-miss-file-300x222.png" alt="...e questa era la mia home qualche istante prima!" width="300" height="222" /><p class="wp-caption-text">...e questa era la mia home qualche istante prima!</p></div>
<p>facile vero? Potete trovare ulteriori immagini e spiegazioni dettagliate nel blog di <a href="http://blogs.sun.com/erwann/entry/zfs_on_the_desktop_zfs">Erwan Chénedé</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2008/10/timeslider-e-zfs-auto-snapshot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ancora aggiornamenti!!!</title>
		<link>http://www.morettoni.net/2008/09/ancora-aggiornamenti/</link>
		<comments>http://www.morettoni.net/2008/09/ancora-aggiornamenti/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 11:56:00 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=100</guid>
		<description><![CDATA[
			
				
			
		
<p>Continuano gli aggiornamenti di OpenSolaris in previsione del rilascio della prossima versione stabile 2008.11, infatti questo fine settimana il repository dei pacchetti è stato aggiornato alla snv_98. Con questa nuova release è stato inclusa anche la versione 13 di ZFS, infatti, dopo aver aggiornato alla nuova release è possibile aggiornare i metadati del proprio pool [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F09%2Fancora-aggiornamenti%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F09%2Fancora-aggiornamenti%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Continuano gli aggiornamenti di <a href="http://www.opensolaris.org/">OpenSolaris</a> in previsione del rilascio della prossima versione stabile 2008.11, infatti questo fine settimana il repository dei pacchetti è stato aggiornato alla <span style="font-weight: bold;">snv_98</span>. Con questa nuova release è stato inclusa anche la versione <a href="http://www.opensolaris.org/os/community/zfs/version/13/">13</a> di ZFS, infatti, dopo aver <a href="http://morettoni.blogspot.com/2008/09/aggiornare-opensolaris-seconda-parte.html">aggiornato alla nuova release</a> è possibile aggiornare i metadati del proprio pool con:</p>
<pre># zpool upgrade -a</pre>
<p>questa opzione è immediata ed indolore (tuttavia consiglio sempre di fare il backup di tutti i vostri dati <span style="font-weight: bold;">PRIMA</span> di eseguire qualsiasi aggiornamento, <span style="font-weight: bold;">SEMPRE!!!</span>) tuttavia occorrerà anche aggiornare il booloader per fargli &#8220;comprendere&#8221; il nuovo formato, altrimenti vi troverete ad affrontare un bel problema al prossimo <a href="http://morettoni.blogspot.com/2008/09/aggiornare-zfs.html">reboot</a>!<br />
Prima di riavviare la macchina occorrerà digitare i seguenti comandi:</p>
<pre># touch /etc/system
# bootadm update-archive
# /boot/solaris/bin/update_grub</pre>
<p>se invece vi siete fatti prendere dalla fretta e vi trovate con GRUB che mostra il suo bel prompt nero basterà fare il boot con un liveCD aggiornato (altrimenti non riuscirà a leggere il nuovo formato di ZFS) scaricabile da <a href="http://www.genunix.org/">genunix.org</a> ed agire così:</p>
<pre># mkdir /tmp/rpool
# zpool import -f -R /tmp/rpool rpool
# mount -F zfs rpool/opensolaris-X /mnt
# touch /mnt/etc/system
# bootadm update-archive -R /mnt
# /mnt/boot/solaris/bin/update_grub# umount /mnt
# zpool export rpool</pre>
<p>ricordatevi di sostituire <tt>opensolaris-X</tt> con il nome del vostro boot-environment appena aggiornato; dopo il reboot tutto tornerà a funzionare perfettamente!<br />
Se volete approfondire trovate maggiori informazioni <a href="http://www.genunix.org/wiki/index.php/ZFS_rpool_Upgrade_and_GRUB">qui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2008/09/ancora-aggiornamenti/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Aggiornare ZFS</title>
		<link>http://www.morettoni.net/2008/09/aggiornare-zfs/</link>
		<comments>http://www.morettoni.net/2008/09/aggiornare-zfs/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 12:16:00 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=97</guid>
		<description><![CDATA[
			
				
			
		
<p>Leggendo la man page di zpool e zfs vi sarete certamente accorti che esiste la possibilità di &#8220;aggiornare&#8221; la struttura usata dal filesystem a versioni più recenti (ma non è possibile tornare indietro). Recentemente è stata rilasciata la release 12, ma se come me intendete aggiornare il pool di boot fate attenzione!
Infatti dopo questo upgrade [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F09%2Faggiornare-zfs%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F09%2Faggiornare-zfs%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Leggendo la man page di zpool e zfs vi sarete certamente accorti che esiste la possibilità di &#8220;aggiornare&#8221; la struttura usata dal filesystem a versioni più recenti (ma non è possibile tornare indietro). Recentemente è stata rilasciata la release <a href="http://www.opensolaris.org/os/community/zfs/version/12/">12</a>, ma se come me intendete aggiornare il pool di boot fate attenzione!<br />
Infatti dopo questo upgrade è necessario reinstallare GRUB, altrimenti al prossimo riavvio non andrete oltre il prompt del bootloader!<br />
I passi da seguire per un aggiornamento &#8220;pulito&#8221; sono:</p>
<pre># zpool upgrade -a</pre>
<p>e verranno aggiornati tutti i pool, oppure se volete aggiornarne solo uno sostituite al posto di <tt>-a</tt> il nome del pool; a questo punto aggiornate GRUB:</p>
<pre># installgrub /boot/grub/stage1 /boot/grub/stage1/dev/rdsk/c5t0d0s0</pre>
<p>ovviamente nel vostro caso sostituirete <tt>c5t0d0s0</tt> con il device del vostro disco.<br />
Se invece siete stati impazienti o incauti e già vi trovate con il boot di OpenSolaris andato basterà inserire nel lettore un CD live con le ultime release (scaricabile da <a href="http://www.genunix.org/">www.genunix.org</a>) e lanciare l&#8217;ultimo comando dalla console.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2008/09/aggiornare-zfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>snapdiff v0.1</title>
		<link>http://www.morettoni.net/2008/09/snapdiff-v01/</link>
		<comments>http://www.morettoni.net/2008/09/snapdiff-v01/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 08:45:00 +0000</pubDate>
		<dc:creator>Luca Morettoni</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://www.morettoni.net/?p=94</guid>
		<description><![CDATA[
			
				
			
		
<p>Ispitato dal post di sickness riguardo la possibilità di capire quali file sono cambiati rispetto ad uno specifico snapshot mi sono &#8220;divertito&#8221; a realizzare questo semplice script che non fa altro che ispezionare tramite il comando diff un filesystem ZFS e un suo snapshot specifico. In fondo lo script effettua dei semplici controlli e migliora [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F09%2Fsnapdiff-v01%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.morettoni.net%2F2008%2F09%2Fsnapdiff-v01%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Ispitato dal post di <a href="http://morettoni.blogspot.com/2008/08/niente-paura-c-zfs.html?showComment=1220120400000#c1115386738302892022">sickness</a> riguardo la possibilità di capire quali file sono cambiati rispetto ad uno specifico snapshot mi sono &#8220;divertito&#8221; a realizzare questo semplice <a href="http://morettoni.net/zfs/snapdiff">script</a> che non fa altro che ispezionare tramite il comando diff un filesystem ZFS e un suo snapshot specifico. In fondo lo script effettua dei semplici controlli e migliora l&#8217;aspetto dell&#8217;output per renderlo &#8220;leggermente&#8221; più leggibile, magari in future versioni integrerò anche altre features. L&#8217;unico vincolo richiesto è che il filesystem ZFS che si intende &#8220;ispezionare&#8221; sia attualmente montato.</p>
<p>Le operazioni svolte sono semplici:</p>
<ol>
<li>viene impostata su &#8220;visible&#8221; la proprietà &#8220;snapdir&#8221;</li>
<li>viene eseguito il diff tra il mountpoint del filesystem e lo snapshot</li>
<li>viene ripristinala la proprietà &#8220;snapdir&#8221; al suo valore originale</li>
</ol>
<p>La chiave del funzionamento dello script è essenzialmente il fatto che è possibile &#8220;montare&#8221; gli snapshot di un filesystem impostando la proprietà con:</p>
<pre># zfs set snapdir=visible</pre>
<p>a questo punto potremmo accedere (in modalità <span style="font-weight: bold;">read-only</span>) a tutti i file del filesystem  così come apparivano al momento della creazione dello snapshot. Per accedervi possiamo operare in questo modo:</p>
<pre>$ cd .zfs/snapdir//file_interessato</pre>
<p>facile vero? <img src='http://www.morettoni.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Per usare invece il mio script e controllare quali file sono cambiati, cancellati oppure aggiunti basta il comando:</p>
<pre>$ pfexec ./snapdiff rpool/export/home/luca snap-2008-08-15</pre>
<p>e vedremo quali file sono cambiati nella mia home dal giorno 15 agosto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.morettoni.net/2008/09/snapdiff-v01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

