<?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>ArLUG (Arad Linux Users Group) &#187; Manuel R. Ciosici</title>
	<atom:link href="http://www.arlug.ro/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.arlug.ro</link>
	<description>ArLUG (Arad Linux Users Group)</description>
	<lastBuildDate>Tue, 29 Jun 2010 20:08:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rezumat beerfest decembrie 2009</title>
		<link>http://www.arlug.ro/2009/12/rezumat-beerfest-decembrie-2009/</link>
		<comments>http://www.arlug.ro/2009/12/rezumat-beerfest-decembrie-2009/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 22:54:28 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=576</guid>
		<description><![CDATA[Am fost în total vreo zece oameni: Rareș, crazyman, Eugen, DarkLau, Ioan, Călin, Răzvan, Manuel, Seba și Tiberiu Socaciu. Ne-am întâlnit în Papa Joe (la Boul Roșu). Ca de obicei am avut discuții pe bisericuțe, pe tot felul de teme incluzând prezentarea pe care plănuim să o facem la liceul CFR. Și am apucat să [...]]]></description>
			<content:encoded><![CDATA[<p>Am fost în total vreo zece oameni: Rareș, crazyman, Eugen, DarkLau, Ioan, Călin, Răzvan, Manuel, Seba și Tiberiu Socaciu. Ne-am întâlnit în Papa Joe (la Boul Roșu). Ca de obicei am avut discuții pe bisericuțe, pe tot felul de teme incluzând prezentarea pe care plănuim să o facem la liceul CFR. Și am apucat să facem și o sesiune de idei legate de organizare. Din păcate nu a făcut nimeni nicio poză / filmuleț / nu a twitter-it nimeni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/12/rezumat-beerfest-decembrie-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beerfest decembrie 2009</title>
		<link>http://www.arlug.ro/2009/12/beerfest-decembrie-2009/</link>
		<comments>http://www.arlug.ro/2009/12/beerfest-decembrie-2009/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 12:55:34 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=565</guid>
		<description><![CDATA[Loading&#8230;
]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://spreadsheets.google.com/embeddedform?key=t_9nRae01smfxRXCMMGUDsw" width="600" height="597" frameborder="0" marginheight="0" marginwidth="0">Loading&#8230;</iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/12/beerfest-decembrie-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beerfest ArLUG cu ocazia lansării Ubuntu 9.10</title>
		<link>http://www.arlug.ro/2009/10/beerfest-arlug-cu-ocazia-lansarii-ubuntu-9-10/</link>
		<comments>http://www.arlug.ro/2009/10/beerfest-arlug-cu-ocazia-lansarii-ubuntu-9-10/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 10:09:19 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=483</guid>
		<description><![CDATA[În 30 octombrie la ora 18 în &#8220;Old lady&#8217;s pub&#8221; de langa cimitirul de la UTA. Se va discuta despre noua versiune de Ubuntu, ce aduce nou, dar și despre alte distribuții și alte proiecte Open Source.
View Larger Map
Loading&#8230;
]]></description>
			<content:encoded><![CDATA[<p>În 30 octombrie la ora 18 în &#8220;Old lady&#8217;s pub&#8221; de langa cimitirul de la UTA. Se va discuta despre noua versiune de Ubuntu, ce aduce nou, dar și despre alte distribuții și alte proiecte Open Source.<br />
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://www.openstreetmap.org/export/embed.html?bbox=21.29996,46.18952,21.31576,46.19785&#038;layer=mapnik&#038;marker=46.19481,21.30709" style="border: 1px solid black"></iframe><br /><small><a href="http://www.openstreetmap.org/?lat=46.193685&#038;lon=21.30786&#038;zoom=15&#038;layers=B000FTFTT&#038;mlat=46.19481&#038;mlon=21.30709">View Larger Map</a></small></p>
<p><iframe src="https://spreadsheets.google.com/embeddedform?key=tyo7wDVtkDLSyI9w_36ibvQ" width="760" height="611" frameborder="0" marginheight="0" marginwidth="0">Loading&#8230;</iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/10/beerfest-arlug-cu-ocazia-lansarii-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cum să recuperezi fişierele şterse de pe o partiţie ext3</title>
		<link>http://www.arlug.ro/2009/07/cum-sa-recuperezi-fisierele-sterse-de-pe-o-partitie-ext3/</link>
		<comments>http://www.arlug.ro/2009/07/cum-sa-recuperezi-fisierele-sterse-de-pe-o-partitie-ext3/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 19:42:41 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[HOWTOs]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=429</guid>
		<description><![CDATA[Crazy Man mi-a trimis traducerea acestui articol pe care m-a rugat să-l postez aici. Traducerea aparține lui crazy man, Adrian Vesa și Seba Popity.
Carlo Wood, Mar 2008

Introducere
I se întâmplă fiecăruia mai devreme sau mai târziu: o fracţiune de secundă după ce ai apăsat Enter realizezi greşeala, dar este deja prea târziu. Tocmai ai şters un [...]]]></description>
			<content:encoded><![CDATA[<div>Crazy Man mi-a trimis traducerea acestui articol pe care m-a rugat să-l postez aici. Traducerea aparține lui crazy man, Adrian Vesa și Seba Popity.</div>
<div>Carlo Wood, Mar 2008</div>
</p>
<h2>Introducere</h2>
<p>I se întâmplă fiecăruia mai devreme sau mai târziu: o fracţiune de secundă după ce ai apăsat Enter realizezi greşeala, dar este deja prea târziu. Tocmai ai şters un fişier sau director valoros pentru care nu este rezervă (backup). Sau poate există o rezervă, dar e veche de o lună&#8230; şi, şocat, vezi ultima lună fugind prin faţa ochilor şi realizezi dureros ce trebuie să refaci &#8230;<span id="more-429"></span></p>
<p>Din fericire, iţi aduci aminte că niciodată fişierele nu sunt  <em>cu adevărat</em> şterse, cel mult suprascrise de un nou conţinut. Astfel, remontezi discul doar în citire.  Şi acum?<br />
Dacă căutaţi pe Google &#8220;undelete ext3&#8243;, aproape în fiecare articol găsit vor fi utilizatori care întreabă dacă e posibil iar răspunsul este acelaşi: NU<br />
Cele mai citate pagini vin chiar de pe pagina de întrebări <a href="http://batleth.sapienti-sat.org/projects/FAQs/ext3-faq.html" target="_blank">ext3 FAQ</a></p>
<p>Q: Cum îmi pot recupera fişierele şterse de pe o partiţie ext3?<br />
De fapt, nu se poate! Astfel a răspuns unul din dezvoltatori, Andreas Dilger:</p>
<p><em>Pentru a avea certitudinea că ext3 poate relua în siguranţă o deconectare după un crash, goleşte de fapt block pointerii din inode, în timp ce ext2 doar marchează aceste blocuri ca nefolosite in bitmap-ul blocului, marchează inode-ul ca &#8220;şters&#8221; şi nu modifică block pointerii.</em></p>
<p><em>Singura ta speranţă este &#8220;grep&#8221; pentru a recupera parţial fişierele care au fost şterse şi să speri la cât mai mult. </em><br />
Totuşi, nu este chiar tot adevărat. <em>Toate</em> informaţiile pot fi încă acolo, la fel şi block pointerii. Este doar mai puţin probabil ca sunt încă acolo (de pe ext2), deoarece acestea trebuie să fie recuperate de la jurnal. Pe deasupra, meta datele sunt mai puţin coerent legate de datele reale astfel încât algoritmii heuristici sunt necesari pentru a recupera lucrurile. De fiecare dată când un fişier este accesat, se schimba Acces Time , şi inode-ul lui este scris pe disc, împreună cu alţi 31 de inodes care rezidă în acelaşi bloc. Când se întâmplă asta, o copie a acelui bloc este scrisă în jurnal. De aici inainte, dacă partiţia nu este destul de mare în comparaţie cu jurnalul, şi dacă cel puţin ai accesat recent fişierele pe care vrei să le recuperezi, ar putea fi posibil să recuperezi block pointerii din jurnal .</p>
<p>Pe 7 februarie 2008, mi-am şers din greseală tot directorul home: peste 3 GB de date şterse cu  <code>rm -rf</code>. Singura rezervă avută era din iunie 2007. Neputinţa de a reface datele era  <em>inacceptabilă</em>. Astfel, am ignorat tot ce mi s-a spus şi am început să învăţ cum funcţionează un sistem ext3 şi <em>exact</em> ce anume se întâmplă când sunt şterse fişierele&#8230;<br />
3 săptămâni şi aproape 5000 de linii de cod mai târziu recuperasem toate fişierele de pe disc.</p>
<h2>Ce trebuie să ştiţi înainte de a începe</h2>
<p>Programul pe care l-am scris presupune o selecţie a fişierelor  <em>recent</em> şterse (imediat după ultimul unmount). Nu tratează fişierele de pe un sistem de fişiere corupt ci doar fişierele şterse accidental.</p>
<p>Totuşi, programul este în faza beta: dezvoltarea programului a fost făcută ca un hack, doar cu scopul de a îmi recupera datele. După ce mi-am recuperat datele am continuat dezvoltarea programului pentru încă o lună la adresarea bug-urilor care nu au apărut în cazul meu, dar per total programul nu este atât de robust pe cât ar putea fi. Astfel, e posibil ca lucrurile să nu meargă „ca pe roate” şi pentru voi. Am dotat programul cu <code>asserts</code>, care creează oportunitatea ca în cazul în care ceva nu merge cum trebuie programul să se oprească şi să nu mai încerce recuperarea. În acest caz va trebui să săpaţi mai adânc, ca să terminaţi voi programul, ca sa spun aşa.</p>
<p>Programul are nevoie doar de acces în citire pe sistemul de fişiere pe care au fost fişierele şterse: el nu încearcă să recupereze fişierele. În schimb, vă permite să faceţi o copie a fişierelor şterse şi le scrie într-un director proaspăt creat în <em>directorul curent</em> (care , desigur, ar trebui să fie pe un sistem de fişiere diferit). Toate căile sunt relative cu root-ul partiţiei, thus— daca analizaţi o partiţie <code>/dev/md5</code> care a fost montată  <code>/home</code>, atunci  <code>/home</code> este necunoscut de partiţie şi de program deci nu e parte din cale (path). În schimb, o cale va fi ceva de genul &#8220;carlo/c++/foo.cc&#8221; , fără primul slash. Root-ul partiţiei (<code>/home</code> din exemplu) este  şirul <em>gol</em> ,  nu  &#8216;/&#8217;.</p>
<p>Numele programului, <code>ext3grep</code> l-am pus astfel deoarece planuiam să scriu un program mai inteligent care să fie în stare să reconstruiască fişierele căutând după blocuri care arată <em>identic</em> cu blocurile căutate (pe baza unui backup mai vechi sau a altor reguli). Particula <em>grep</em> din nume a fost pusă anticipând că citatul din partea dezvoltatorilor ex3 era adevărat: mă pregăteam pentru a lucra cu seturi de blocuri, fiecare set corespunzând unui tipar de căutare şi încărcate cu probabilităţi, asupra cărora cineva ar trebui să lucreze cu seturi de operatori pentru a reduce numărul de blocuri şi să le atribuie fişierelor aranjându-le în ordine. Oricum nimic de genul acesta nu a fost folosit. Totuşi, am păstrat numele <code>ext3grep</code> deoarece cineva poate doreşte să adauge o adevărată funcţionalitate <code>grep</code> programului (în acest moment funcţiile grep sunt limitate la şiruri fixe, listând numerele de bloc asemănătoare pe o ieşire standard).</p>
<h2>Cum stochează  EXT3 fişierele?</h2>
<h3>Mărimea blocurilor</h3>
<p>Conţinutul fişierelor este stocat în blocuri continue de 4096 de bytes (mărimea actuală depinde de parametrii liniei de comandă dată pentru mke2fs când a fost creat sistemul de fişiere prima dată şi poate fi 1024, 2048 sau 4096 de bytes). Un hard disc este un &#8220;block device&#8221;, adică fiecare intrare / ieşire este în fucţie de aceste blocuri; o persoană poate doar citi / scrie un număr integral de blocuri odată. Această nu înseamnă neapărat că mărimea minimă a unui fragment continuu de fişier este aceeaşi (deşi poate fi doar mai mică), dar în practică este. De fapt, programul nu va funcţiona dacă mărimea fragmentelor nu este aceeaşi cu mărimea blocurilor.</p>
<p>Mărimea actuală a blocului precum şi mărimea actuală a fragmentelor sunt stocate într-un superbloc şi pot fi găsite cu opţiunea <code>--superblock</code>. De exemplu ,</p>
<pre>$ ext3grep $IMAGE --superblock | grep 'size:'
Block size: 4096
Fragment size: 4096</pre>
<p>Aici <code>IMAGE</code> este o variabilă de sistem care a fost setată ca nume pentru dispozitivul   (sau o copie a acestuia făcută cu  <code>dd</code>) partiţiei care conţine sistemul de fişiere. De exemplu,  <code>/dev/sdd2</code> ( în general, oricare nume de dispozitiv returnat de comanda  <code>df</code> sub numele de &#8220;Filesystem&#8221;). În mod normal doar root poate citi direct dispozitivele, dar puteţi (temporar) să le faceţi citibile de către voi, sau să faceţi o imagine backup cu dd. Ţineţi minte că, de exemplu, <code>/dev/sdd</code> NU este o partiţie (observaţi digitul lipsă ) şi nu va conţine date folositoare pentru scopul nostru.</p>
<p>Întreaga partiţie este impărţită într-un număr de blocuri integral, începând numărătoarea de la 0. Astfel, dacă doriţi vreodată să faceţi o copie a blocului cu numărul N trebuie să faceţi astfel:</p>
<div>
<pre>$ dd if=$IMAGE bs=4096 count=1 skip=$N of=block.$N</pre>
</div>
<p>unde N ia valoare de la 0 până la (dar nu incluzând şi) numărul de blocuri stocate în superbloc. De exemplu,</p>
<pre>$ ext3grep $IMAGE --superblock | grep 'Blocks count:'
Blocks count: 2441824</pre>
<p>Având oricare număr de bloc, se pot tipări informaţii despre el folosind opţiunea  <code>--block</code> în linia de comandă. De exemplu,<br />
<code>$ ext3grep $IMAGE --ls --block 600<br />
[...]<br />
Group: 0<br />
Block 600 is Allocated. It's inside the inode table of group 0<br />
 (inodes [1 - 33&gt;).</p>
<p>$ ext3grep $IMAGE --ls --block 1109<br />
[...]<br />
Group: 0</p>
<p>Block 1109 is a directory. The block is Allocated</p>
<p>          .-- File type in dir_entry (r=regular file, d=directory, l=symlink)<br />
          |          .-- D: Deleted ; R: Reallocated<br />
Indx Next |  Inode   | Deletion time                        Mode        File name<br />
==========+==========+----------------data-from-inode------+-----------+=========<br />
   0    1 d       2                                         drwxr-xr-x  .<br />
   1  end d       2                                         drwxr-xr-x  ..<br />
   2    3 d      11  D 1202351093 Thu Feb  7 03:24:53 2008  drwxr-xr-x  lost+found<br />
   3  end d  195457  D 1202352103 Thu Feb  7 03:41:43 2008  drwxr-xr-x  carlo</code></p>
<h3>Superblocul</h3>
<p>Superblocul nu este chiar un bloc. Mărimea lui este întotdeauna de 1024 de bytes şi primul superbloc începe la multiplu de 1024. Deci, dacă mărimea blocului este 1024 atunci superblocul este blocul 1, dar dacă mărimea blocului este 2048 sau 4096 atunci superblocul este o parte din blocul 0. Există multiple copii de rezervă altundeva pe disc. <code>ext3grep</code> presupune că primul superbloc nu este corupt şi nu încearcă să găsească sau să citească copiile de rezervă.</p>
<p>Se poate citi conţinutul primului superbloc folosind dd astfel:</p>
<div>
<pre>$ dd if=$IMAGE bs=1024 skip=1 count=1 of=superblock</pre>
</div>
<p>Semnificaţia fiecărui byte este dată în tabelul  1.</p>
<table border="0">
<caption>Tabel 1. Superblocuri</caption>
<tbody>
<tr>
<th>Bytes</th>
<th>type</th>
<th>Descriere</th>
</tr>
<tr>
<td>0 .. 3</td>
<td>__le32</td>
<td>Inodes total</td>
</tr>
<tr>
<td>4 .. 7</td>
<td>__le32</td>
<td>Blocuri total</td>
</tr>
<tr>
<td>8 .. 11</td>
<td>__le32</td>
<td>Blocuri rezervate total</td>
</tr>
<tr>
<td>12 .. 15</td>
<td>__le32</td>
<td>Blocuri libere total</td>
</tr>
<tr>
<td>16 .. 19</td>
<td>__le32</td>
<td>Inodes liberi total</td>
</tr>
<tr>
<td>20 .. 23</td>
<td>__le32</td>
<td>Primul bloc de date</td>
</tr>
<tr>
<td>24 .. 27</td>
<td>__le32</td>
<td>Mărime bloc</td>
</tr>
<tr>
<td>28 .. 31</td>
<td>__le32</td>
<td>Mărime fragment</td>
</tr>
<tr>
<td>32 .. 35</td>
<td>__le32</td>
<td>Număr de blocuri per grup</td>
</tr>
<tr>
<td>36 .. 39</td>
<td>__le32</td>
<td>Număr de fragmente per grup</td>
</tr>
<tr>
<td>40 .. 43</td>
<td>__le32</td>
<td>Număr de inodes per grup</td>
</tr>
<tr>
<td>44 .. 47</td>
<td>__le32</td>
<td>Ora montării</td>
</tr>
<tr>
<td>48 .. 51</td>
<td>__le32</td>
<td>Ora scrierii</td>
</tr>
<tr>
<td>52 .. 53</td>
<td>__le16</td>
<td>Montări total</td>
</tr>
<tr>
<td>54 .. 55</td>
<td>__le16</td>
<td>Maximal mount count</td>
</tr>
<tr>
<td>56 .. 57</td>
<td>__le16</td>
<td>Semnătura magică</td>
</tr>
<tr>
<td>58 .. 59</td>
<td>__le16</td>
<td>Stare sistem de fişiere</td>
</tr>
<tr>
<td>60 .. 61</td>
<td>__le16</td>
<td>Comportament la descoperire erori</td>
</tr>
<tr>
<td>62 .. 63</td>
<td>__le16</td>
<td>Nivel minim revizie</td>
</tr>
<tr>
<td>64 .. 67</td>
<td>__le32</td>
<td>Data ultimei verificări</td>
</tr>
<tr>
<td>68 .. 71</td>
<td>__le32</td>
<td>Timp maxim între verificări</td>
</tr>
<tr>
<td>72 .. 75</td>
<td>__le32</td>
<td>OS</td>
</tr>
<tr>
<td>76 .. 79</td>
<td>__le32</td>
<td>Nivel revizie</td>
</tr>
<tr>
<td>80 .. 81</td>
<td>__le16</td>
<td>UID iniţial pentru blockuri rezervate</td>
</tr>
<tr>
<td>82 .. 83</td>
<td>__le16</td>
<td>GID iniţial pentru blockuri libere</td>
</tr>
<tr>
<td>84 .. 87</td>
<td>__le32</td>
<td>Primul  inode nerezervat</td>
</tr>
<tr>
<td>88 .. 89</td>
<td>__le16</td>
<td>Mărimea structurii inode</td>
</tr>
<tr>
<td>90 .. 91</td>
<td>__le16</td>
<td>Numărul de grupuri de blocuri  pentru acest superbloc</td>
</tr>
<tr>
<td>92 .. 95</td>
<td>__le32</td>
<td>Set de opţiuni compatibile</td>
</tr>
<tr>
<td>96 .. 99</td>
<td>__le32</td>
<td>Set de opţiuni incompatibile</td>
</tr>
<tr>
<td>100 .. 103</td>
<td>__le32</td>
<td>Set de opţiuni compatibile doar în citire</td>
</tr>
<tr>
<td>104 .. 119</td>
<td>__u8[16]</td>
<td>128-bit uuid pentru volum</td>
</tr>
<tr>
<td>120 .. 135</td>
<td>char[16]</td>
<td>Numele volumului</td>
</tr>
<tr>
<td>136 .. 199</td>
<td>char[64]</td>
<td>Directorul în care a fost montat ultima oară</td>
</tr>
<tr>
<td>200 .. 203</td>
<td>__le32</td>
<td>Pentru compresie</td>
</tr>
<tr>
<td>204</td>
<td>__u8</td>
<td>Număr de blocuri pentru care se va încerca realocarea</td>
</tr>
<tr>
<td>205</td>
<td>__u8</td>
<td>Număr de prealocare pentru directoare</td>
</tr>
<tr>
<td>206 .. 207</td>
<td>__le16</td>
<td>Descriptor per grup pentru creştere online</td>
</tr>
<tr>
<td>208 .. 223</td>
<td>__u8[16]</td>
<td>uuid pentru superblocul jurnal</td>
</tr>
<tr>
<td>224 .. 227</td>
<td>__le32</td>
<td>Numărul inode pentru fişierul jurnal</td>
</tr>
<tr>
<td>228 .. 231</td>
<td>__le32</td>
<td>Numărul dispozitivului pentru fişierul jurnal</td>
</tr>
<tr>
<td>232 .. 235</td>
<td>__le32</td>
<td>Începutul listei de inodes care se vor şterge</td>
</tr>
<tr>
<td>236 .. 251</td>
<td>__le32[4]</td>
<td>HTREE hash seed</td>
</tr>
<tr>
<td>252</td>
<td>__u8</td>
<td>Versiunea iniţială de hash folosită</td>
</tr>
<tr>
<td>253 .. 255</td>
<td></td>
<td>Rezervat</td>
</tr>
<tr>
<td>256 .. 259</td>
<td>__le32</td>
<td>Opţiuni iniţiale de montare</td>
</tr>
<tr>
<td>260 .. 263</td>
<td>__le32</td>
<td>Primul grup metabloc</td>
</tr>
<tr>
<td>264 .. 1023</td>
<td></td>
<td>Rezervat</td>
</tr>
</tbody>
</table>
<p>Structura C ( C-struct ) pentru superbloc este dată în fişierul header <code>/usr/include/linux/ext3_fs.h</code> şi a fost folosită pentru a crea tabelul 1. Datele întregilor nealocaţi sunt stocate pe disc în format Little Endian. Într-un format Little Endian procesoarele gen Intel x86, care înseamnă că <code>__le32</code> este de fapt  <code>uint32_t</code> şi  <code>__le16</code> este egal cu <code>uint16_t</code>.</p>
<h3>Grupurile</h3>
<p>Fiecare sistem de fişiere ext3 este împărţit în grupuri, cu un număr fix de blocuri per grup, cu excepţia ultimului grup care conţine blocurile rămase. Numărul de blocuri per grup este dat în superbloc.</p>
<pre>$ ext3grep $IMAGE --superblock | grep 'Blocks per group'
# Blocks per group: 32768</pre>
<p>Fiecare grup foloseşte un bloc ca hartă pentru a ţine evidenţa cărui bloc din grup îi este alocat (folosit). Astfel pot fi cel mult 4096 * 8 = 32768 blocuri normale per grup.</p>
<p>Alt bloc este folosit ca hartă pentru numărul de inodes alocat. Inodes sunt structuri de date de 128 de bytes (ele pot fi extinse teoretic; mărimea reală este dată tot în superbloc) care sunt stocate într-un tabel (4096 / 128 = 32 inodes per bloc) în fiecare grup. Având cel mult 32768 bits în hartă, putem trage concluzia că vor fi cel mult 32768 inodes per grup şi astfel 32768 / 32 = 1024 blocuri în tabela inode pentru fiecare grup. Dimensiunea reală a tabelei inode este dată de numărul real de inodes per grup, care este şi el stocat în supergrup.</p>
<pre>$ ext3grep $IMAGE --superblock | egrep 'Size of inode|inodes per group'
Number of inodes per group: 16288
Size of inode structure: 128</pre>
<p>Numerele de bloc atât pentru hartă cât şi pentru începutul tabelei inode este dat în &#8220;tabela descriptoare a grupului &#8220;, care se găseşte în blocul următor superblocului; deci bloc1 sau bloc2 în funcţie de mărimea blocului. Această tabelă de decriptare constă din o serie de structuri consecutive <code>ext3_group_desc</code> definite şi ele în <code>/usr/include/linux/ext3_fs.h</code>,  conform tabelului  2.</p>
<table border="0">
<caption>Tabel 2. O descriptoare de grup</caption>
<tbody>
<tr>
<th>Bytes</th>
<th>type</th>
<th>Descriere</th>
</tr>
<tr>
<td>0 .. 3</td>
<td>__le32</td>
<td>Blocul hartă pentru blocuri &#8211; Blocks bitmap block</td>
</tr>
<tr>
<td>4 .. 7</td>
<td>__le32</td>
<td>Blocul hartă pentru inodes &#8211; Inodes bitmap block</td>
</tr>
<tr>
<td>8 .. 11</td>
<td>__le32</td>
<td>Blocul tabelei inodes &#8211; Inodes table block</td>
</tr>
<tr>
<td>12 .. 13</td>
<td>__le16</td>
<td>Total blocuri libere &#8211; Free blocks count</td>
</tr>
<tr>
<td>14 .. 15</td>
<td>__le16</td>
<td>Total inodes liberi-Free inodes count</td>
</tr>
<tr>
<td>16 .. 17</td>
<td>__le16</td>
<td>Directoare total &#8211; Directories count</td>
</tr>
<tr>
<td>18 .. 31</td>
<td></td>
<td>Rezervat</td>
</tr>
</tbody>
</table>
<p>Datorită faptului că dimensiunea acestei structuri este o putere de 2, 32 de bytes, se potriveşte exact unui număr întreg de descriptoare într-un bloc. Astfel tabela este continuă chiar dacă este întinsă pe mai multe blocuri. Ţineţi minte că un bloc de 4096 bytes este deja capabil să ţină 128 de descriptoare de grup, fiecare putând stoca 32768 de blocuri / mdash; aşadar doar o partiţie mai mare de 16GB va folosi mai mult de un bloc pentru tabela de descriptoare de grup.</p>
<p>Conţinutul tabelei este tipărit folosind  <code>ext3grep</code> dacă nu sunt specificate alte acţiuni sau un grup în linia de comandă. De exemplu,<br />
<code>$ ext3grep $IMAGE<br />
No action specified; implying --superblock.<br />
[...]<br />
Number of groups: 75<br />
 Group	0: block bitmap at 598, inodes bitmap at 599, inode table at 600<br />
	   4 free blocks, 16278 free inodes, 1 used directory<br />
 Group	1: block bitmap at 33366, inodes bitmap at 33367, inode table at<br />
 33368<br />
	   30510 free blocks, 16288 free inodes, 0 used directory<br />
[...]<br />
 Group	74: block bitmap at 2424832, inodes bitmap at 2424833, inode table<br />
 at 2424834<br />
	   16481 free blocks, 16288 free inodes, 0 used directory<br />
[...]</code></p>
<h3>Inodes</h3>
<p>Inodes din tabelul de inodes al fiecărui grup conţin metadate pentru fiecare tip de date pe care îl poate stoca sistemul de fişiere. Acest tip poate fi un link simbolic, caz în care doar inodeul este suficient, poate fi un director, un fişier, un FIFO, un socket UNIX etc. În cazul fişierelor şi directoarelor datele reale sunt stocate în blocurile sistemului de fişiere din exteriorul inodeului. Primele 12 numere de blocuri sunt stocate în inode, în cazul în care este nevoie de mai multe blocuri inodeul indică un bloc indirect: un bloc cu mai multe numere de blocuri care conţin date. Astfel inodeul poate stoca un bloc indirect dublu sau triplu. Structura unui inode este dată în tabelul 3.</p>
<table border="0">
<caption>Tabel  3. Un inode</caption>
<tbody>
<tr>
<th>Bytes</th>
<th>type</th>
<th>Descriere</th>
</tr>
<tr>
<td>0 .. 1</td>
<td>__le16</td>
<td>Mod de fişier</td>
</tr>
<tr>
<td>2 .. 3</td>
<td>__le16</td>
<td>Low 16 bits of Owner uid</td>
</tr>
<tr>
<td>4 .. 7</td>
<td>__le32</td>
<td>Mărime in bytes</td>
</tr>
<tr>
<td>8 .. 11</td>
<td>__le32</td>
<td>Access time</td>
</tr>
<tr>
<td>12 .. 15</td>
<td>__le32</td>
<td>Ora creării</td>
</tr>
<tr>
<td>16 .. 19</td>
<td>__le32</td>
<td>Ora modificării</td>
</tr>
<tr>
<td>20 .. 23</td>
<td>__le32</td>
<td>Ora ştergerii</td>
</tr>
<tr>
<td>24 .. 25</td>
<td>__le16</td>
<td>Low 16 bits of Group Id</td>
</tr>
<tr>
<td>26 .. 27</td>
<td>__le16</td>
<td>Total Linkuri</td>
</tr>
<tr>
<td>28 .. 31</td>
<td>__le32</td>
<td>Blocuri total</td>
</tr>
<tr>
<td>32 .. 35</td>
<td>__le32</td>
<td>File flags</td>
</tr>
<tr>
<td>36 .. 39</td>
<td>linux1</td>
<td>OS dependent 1</td>
</tr>
<tr>
<td>40 .. 99</td>
<td>__le32[15]</td>
<td>Pointers to blocks</td>
</tr>
<tr>
<td>100 .. 103</td>
<td>__le32</td>
<td>Versiune fişier (for NFS)</td>
</tr>
<tr>
<td>104 .. 107</td>
<td>__le32</td>
<td>File ACL</td>
</tr>
<tr>
<td>108 .. 111</td>
<td>__le32</td>
<td>Directory ACL</td>
</tr>
<tr>
<td>112 .. 115</td>
<td>__le32</td>
<td>Fragment address</td>
</tr>
<tr>
<td>116 .. 127</td>
<td>linux2</td>
<td>OS dependent 2</td>
</tr>
</tbody>
</table>
<p>Structura C a unui inode  <code>struct ext3_inode</code>, este dată în fişierul header  <code>/usr/include/linux/ext3_fs.h</code> şi a fost utilizată pentru a crea tabelul3. Acelaşi fişier header mai defineşte un număr de constante sub forma unui macros care poate fi folosit pentru accesarea datelor. De exemplu, componenta de structură stocată de la byte 40 până la 99 este <code>i_block</code>,  mărimea ei este  <code>EXT3_N_BLOCKS</code> 32-bit numere de blocuri. <code>i_block[EXT3_IND_BLOCK]</code> indică către (conţine numărul de bloc pentru ) un bloc indirect dacă acesta există,  <code>i_block[EXT3_DIND_BLOCK]</code> către un bloc indirect dublu şi  <code>i_block[EXT3_TIND_BLOCK]</code> către un bloc indirect triplu. În mod normal, fiecare constantă are un macro al ei, se poate analiza fişierul header pentru mai multe detalii. <code>ext3grep</code> foloseşte <code>i_reserved2</code> pentru a stoca numărul inodeului, astfel că tipărirea structurii unui  <code>ext3_inode</code> în gdb arată care inode este el de fapt.</p>
<p>Superblocul indică câte inodes sunt în total şi câte inodes sunt per grup. Aceasta ne permite să calculăm numărul de grupuri. Deoarece inodesurile sunt stocate în tabela lor respectivă pentru grup, prima dată trebuie determinat grupul căruia îi aparţine numărul de inodes. Deoarece inodes încep a fi numărate de la 1, formula de conversie a unui număr de inodes în numărul de grup căruia îi aparţine este:</p>
<pre>grup = (număr_inode  - 1) / număr_de_inodes_per_grup</pre>
<p>Aceasta ne dă tabela inodes corectă. Pentru aflarea index-ului inodes din acestă tabelă extragem numărul primului inodes din tabelă din numărul inodesului nostru:</p>
<pre>index = număr_inode  - (grup * număr_de_inodes_per_grup + 1)</pre>
<p>Observaţi că acest index determină şi bitul corespunzător din harta inodes.</p>
<p>Atfel, grupurile au fost făcute transparente: fiecare inodes poate fi adresat cu un număr din intervalul continuu  <code>[1, număr_de_inodes]</code>, unde număr_de_inodes este dat de :</p>
<pre>$ ext3grep $IMAGE --superblock | grep 'Inodes count'
Inodes count: 1221600</pre>
<p>În unele cazuri e posibil să doriţi să ştiţi care bloc din sistemul de fişiere aparţine tabelei de inodes care stochează un anumit inodes. Aceasta se poate face folosind în linia de comandă opţiunea <code>--inode-to-block</code>,  de exemplu:</p>
<pre>$ ext3grep $IMAGE --inode-to-block 2
[...]
Inode 2 resides in block 600 at offset 0x80.</pre>
<p>Inodesul cu numărul 2 (macro <code>EXT3_ROOT_INO</code> în <code>ext3_fs.h</code>) este întotdeauna folosit pentru root-ul partiţiei: tipul lui este un director. Din toate celelalte inodes speciale folosim doar EXT3_JOURNAL_INO (numărul 8).</p>
<p>Având numărul inodesului  se poate afişa conţinutul lui folosind  <code>ext3grep</code>, astfel:</p>
<pre>$ ext3grep $IMAGE --inode 2 --print
Number of groups: 75
Loading group metadata... done
[...]

Hex dump of inode 2:
0000 | ed 41 00 00 00 10 00 00 97 6f aa 47 08 6c aa 47 | .A.......o.G.l.G
0010 | 08 6c aa 47 00 00 00 00 00 00 02 00 08 00 00 00 | .l.G............
0020 | 00 00 00 00 02 00 00 00 55 04 00 00 00 00 00 00 | ........U.......
0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

Inode is Allocated
Group: 0
Generation Id: 0
uid / gid: 0 / 0
mode: drwxr-xr-x
size: 4096
num of links: 2
sectors: 8 (--&gt; 0 indirect blocks).

Inode Times:
Accessed:       1202352023 = Thu Feb  7 03:40:23 2008
File Modified:  1202351112 = Thu Feb  7 03:25:12 2008
Inode Modified: 1202351112 = Thu Feb  7 03:25:12 2008
Deletion time:  0

Direct Blocks: 1109
[...]
Inode 2 is directory "".
Directory block 1109:
          .-- File type in dir_entry (r=regular file, d=directory, l=symlink)
          |          .-- D: Deleted ; R: Reallocated
Indx Next |  Inode   | Deletion time                        Mode        File name
==========+==========+----------------data-from-inode------+-----------+=========
   0    1 d       2                                         drwxr-xr-x  .
   1  end d       2                                         drwxr-xr-x  ..
   2    3 d      11  D 1202351093 Thu Feb  7 03:24:53 2008  drwxr-xr-x  lost+found
   3  end d  195457  D 1202352103 Thu Feb  7 03:41:43 2008  drwxr-xr-x  carlo</pre>
<p>După cum observaţi,  <code>ext3grep</code> prima dată se descarcă conţinutul hexazecimal al tabelei inodes; apoi se interpretează şi se afişează membrii de structură terminându-se cu linia <code>Direct Blocks: 1109</code>. Apoi detectează că acest bloc este un director (care mai poate fi observat în câmpul MODE al inodesului) şi apoi continuă cu listarea acestui bloc ca director.</p>
<h3>Fişierele normale</h3>
<p>Dacă un inodes reprezintă un fişier normal, atunci blocurile la care se referă conţin doar datele fişierului. Dacă mărimea unui fişier nu este un număr întreg de ori mărimea blocului, atunci bytesii în exces din ultimul bloc vor fi scrişi cu 0 (cel puţin în Linux).</p>
<h3>Legături simbolice</h3>
<p>Valoarea unui link simbolic este un şir: cărarea (path) până la ţintă. Lungimea şirului este dată în  <code>i_size</code>. Dacă  <code>i_blocks</code> este zero, atunci  <code>i_block</code> <em>NU</em> conţine numere de blocuri ci este folosit pentru stocarea efectivă a şirului. Oricum, dacă numele ţintei este mai lung decât suportă <code>i_block</code>, atunci  <code>i_blocks</code> va fi non-zero şi  <code>i_block[0]</code> va indica un bloc care conţine numele ţintei.</p>
<h3>Directoarele</h3>
<p>Dacă un inodes reprezintă un director atunci blocurile lui sunt legături singulare către structurile de date ale  <code>ext3_dir_entry_2</code>. Fiecare bloc se conţine pe el: nu sunt entry point pentru directoare în exteriorul lui. Primul bloc începe întotdeauna cu intrarea directoarelor „.” şi „..”</p>
<table border="0">
<caption>Tabel  4. A Directory Entry</caption>
<tbody>
<tr>
<th>Bytes</th>
<th>type</th>
<th>Descriere</th>
</tr>
<tr>
<td>0 .. 3</td>
<td>__le32</td>
<td>Număr Inodes</td>
</tr>
<tr>
<td>4 .. 5</td>
<td>__le16</td>
<td>Lungime intrare director</td>
</tr>
<tr>
<td>6</td>
<td>__u8</td>
<td>Lungime nume</td>
</tr>
<tr>
<td>7</td>
<td>__u8</td>
<td>Tip fişier</td>
</tr>
<tr>
<td>8</td>
<td>char[]</td>
<td>Fişier, link simbolic sau nume director</td>
</tr>
</tbody>
</table>
<p>Folosind opţiunile  <code>--ls --inode $N</code>, <code>ext3grep</code> afişează conţinutul fiecărui bloc de director pentru inodesul N. De exemplu, pentru a lista directorul rădăcină (root) al unei partiţii:</p>
<pre>$ ext3grep $IMAGE --ls --inode 2
Number of groups: 75
Loading group metadata... done
Minimum / maximum journal block: 1115 / 35026
Loading journal descriptors... done
Journal transaction 4381435 wraps around, some data blocks might have been
 lost of this transaction.
Number of descriptors in journal: 30258; min / max sequence numbers:
 4379495 / 4382264
Inode is Allocated
Loading md5.ext3grep.stage2... done
The first block of the directory is 1109.
Inode 2 is directory "".
Directory block 1109:
          .-- File type in dir_entry (r=regular file, d=directory, l=symlink)
          |          .-- D: Deleted ; R: Reallocated
Indx Next |  Inode   | Deletion time                        Mode        File name
==========+==========+----------------data-from-inode------+-----------+=========
   0    1 d       2                                         drwxr-xr-x  .
   1  end d       2                                         drwxr-xr-x  ..
   2    3 d      11  D 1202351093 Thu Feb  7 03:24:53 2008  drwxr-xr-x  lost+found
   3  end d  195457  D 1202352103 Thu Feb  7 03:41:43 2008  drwxr-xr-x  carlo</pre>
<p>Aşadar, se va folosi   <code>ext3grep --ls --inode 195457</code> pentru a lista directorul  <code>carlo</code>, şi aşa mai departe.</p>
<p>Observaţi că  <code>ext3grep</code> afişează toate intrările din director, şterse sau nu. Există 2 posibilităţi pentru a vedea dacă un director este şters: prima, inodesul lui va avea un Deletion Time diferit de 0, a doua – intrările directorului pot fi scoase din lista de legătură fiind omise; &#8220;Directory Entry Length&#8221;, bytes 4 şi 5 ai fiecărei intrări din director, în mod normal, indică intrarea următoare sau byte-ul care urmează blocul dacă nu sunt alte intrări de directoare. În afişarea făcută de <code>ext2grep</code> adresa intrărilor de directoare a fost înlocuită cu un index artifical (în prima coloană) iar &#8220;Directory Entry Length&#8221; este înlocuită cu coloana numită <code>Next</code>,  care ori indică următoarea intrare ori conţine <code>end</code> când nu mai sunt alte intrări de directoare. În exemplul de mai sus 0 este prima intrare, 1 este următoarea şi ultima. Intrările cu indexul 2 şi 3 sunt omise. Totuşi încă se poate observa că intrarea 2 indica intrarea 3. De fapt, intrările 2 şi 3 sunt şterse în acelaşi timp schimbând &#8220;Directory Entry Length&#8221; a intrării 1 astfel încât să nu mai indice intrarea 2 ci sfârşitul blocului .</p>
<p>Deoarece  <code>ext3grep</code> afişează şi intrările şterse este foarte posibil ca aceleaşi intrări să fie făcute de mai multe ori. În cazuri particulare, dacă un fişier este mutat, o dublură rămâne şi încă poate fi văzută. De exemplu,</p>
<pre>$ ext3grep $IMAGE --ls --inode 195457 | grep '\.viminfo$'
   7    8 r  201434  D 1202351096 Thu Feb  7 03:24:56 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  18   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  18   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  18   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  17   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  17   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  17   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195981  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195981  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195987  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195994  D 1202351111 Thu Feb  7 03:25:11 2008  rrw-r--r--  .viminfo
  18   19 r  195995  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  18   19 r  195993  D 1202351097 Thu Feb  7 03:24:57 2008  rrw-------  .viminfo
  17   19 r  197221  D 1202351110 Thu Feb  7 03:25:10 2008  rrw-r--r--  .viminfo</pre>
<p>Pentru a înţelege acestea, trebuie remarcat că</p>
<p>Întâi, aceste intrări dublate apar mai ales datorită blocurilor director dublate, care se observă deja din numărul de index al intrărilor: dacă ar fi toate din acelaşi bloc atunci toate numerele de index ar fi diferite. Desigur, fără a piping rezultatul la <code>grep</code> ar fi clar că fiecare intrare aparţine altui bloc director, dar acel rezultat este prea mare pentru a fi aratat aici.</p>
<p>În al doiela rând, trebuie să observaţi că doar numărul de inode, tipul de fişier din a 3-a coloană şi numele fişierului sunt datele din intrarea de director. Timpul ştergerii şi coloana de Mod sunt extrase din data curentă din inodeul corespunzator. Aşadar, acel inode ar fi putut fi refolosit acum mult timp de alt fişier iar datele conţinute nu ar mai fi legate de intrările acestui director. Acesta este clar cazul exemplului de mai sus deoarece este sigur faptul că acele fişiere .viminfo nu au fost şterse în aceeaşi zi. În <em>câteva</em> cazuri se poate detecta că un inode a fost realocat (refolosit): dacă este încă în uz (dar nu mai poate fi de această intrare de director <em>ştearsă</em>), sau când tipul de fişier din inode diferă de tipul de fişier din intrarea de director. În aceste cazuri a 5-a coloană arată un R în loc de D şi conţinutul inodeului nu este afişat. Astfel, deoarece aceste intrări arată puţine informaţii despre utilizare, ele sunt în mod normal eliminate. Dacă doriţi să vedeţi intrările cu inodeurile realocate cunoscute trebuie să adăugaţi la linia de comandă opţiunea <code>--reallocated</code>. Mai mult decât atât, uneori numărul inodeului din intrarea de director este scris cu 0. Aceste intrări sunt în mod evident nefolositoare şi eliminate şi ele. Pentru a le afişa se foloseşte în linia de comandă optiunea <code>--zeroed-inodes</code>.</p>
<p>Există posibilitatea filtrării rezultatelor afişate de  <code>--ls</code>. O prezentare generală a filtrelor disponibile este dată de rezultatul optiunii <code>--help</code> :</p>
<pre>$ ext3grep $IMAGE --help
[...]
Filters:
  --group grp            Only process group 'grp'.
  --directory            Only process directory inodes.
  --after dtime          Only entries deleted on or after 'dtime'.
  --before dtime         Only entries deleted before 'dtime'.
  --deleted              Only show/process deleted entries.
  --allocated            Only show/process allocated inodes/blocks.
  --unallocated          Only show/process unallocated inodes/blocks.
  --reallocated          Do not suppress entries with reallocated inodes.
                         Inodes are considered 'reallocated' if the entry
                         is deleted but the inode is allocated, but also when
                         the file type in the dir entry and the inode are
                         different.
  --zeroed-inodes        Do not suppress entries with zeroed inodes. Linked
                         entries are always shown, regardless of this option.
  --depth depth          Process directories recursively up till a depth
                         of 'depth'.
[...]</pre>
<p>Pentru a putea determian valorile importante pentru  <code>--after</code> şi  <code>--before</code> a fost adăugată acţiunea  <code>--histogram=dtime</code> . Această opţiune a linie de comandă  face ca <code>ext3grep</code> să listeze o histogramă a timpului faţă de numărul inodeurilor şterse. Dacă ştergeţi un număr mare de fişiere odată, de exemplu cu <code>rm -rf</code>, atunci ar trebui să fie simplu calculul unei ferestre de timp în care a avut loc ştergerea. De exemplu, aici am mărit o bucată din dezastrul personal în care am şters cu puţin peste 50 000 de fişiere din directorul Home:</p>
<pre>$ ext3grep $IMAGE --histogram=dtime --after=1202351086 --before=1202351129
Only show/process deleted entries if they are deleted on or after Thu Feb  7 03:24:46 2008 and before Thu Feb  7 03:25:29 2008.

Number of groups: 75
Minimum / maximum journal block: 1115 / 35026
Loading journal descriptors... done
Journal transaction 4381435 wraps around, some data blocks might have been lost of this transaction.
Number of descriptors in journal: 30258; min / max sequence numbers: 4379495 / 4382264

Only show/process deleted entries if they are deleted on or after 1202351086 and before 1202351129.
Only showing deleted entries.
Thu Feb  7 03:24:46 2008  1202351086        0
Thu Feb  7 03:24:47 2008  1202351087        1
Thu Feb  7 03:24:48 2008  1202351088        0
Thu Feb  7 03:24:49 2008  1202351089        0
Thu Feb  7 03:24:50 2008  1202351090        0
Thu Feb  7 03:24:51 2008  1202351091        0
Thu Feb  7 03:24:52 2008  1202351092        0
Thu Feb  7 03:24:53 2008  1202351093      705 ==============
Thu Feb  7 03:24:54 2008  1202351094     1698 ==================================
Thu Feb  7 03:24:55 2008  1202351095     2320 ===============================================
Thu Feb  7 03:24:56 2008  1202351096     3652 ==========================================================================
Thu Feb  7 03:24:57 2008  1202351097     3332 ===================================================================
Thu Feb  7 03:24:58 2008  1202351098     2014 =========================================
Thu Feb  7 03:24:59 2008  1202351099     1160 =======================
Thu Feb  7 03:25:00 2008  1202351100     4188 =====================================================================================
Thu Feb  7 03:25:01 2008  1202351101     2480 ==================================================
Thu Feb  7 03:25:02 2008  1202351102     1945 =======================================
Thu Feb  7 03:25:03 2008  1202351103     1471 ==============================
Thu Feb  7 03:25:04 2008  1202351104     2724 =======================================================
Thu Feb  7 03:25:05 2008  1202351105     3090 ===============================================================
Thu Feb  7 03:25:06 2008  1202351106     3360 ====================================================================
Thu Feb  7 03:25:07 2008  1202351107     4902 ====================================================================================================
Thu Feb  7 03:25:08 2008  1202351108      698 ==============
Thu Feb  7 03:25:09 2008  1202351109     1612 ================================
Thu Feb  7 03:25:10 2008  1202351110     4547 ============================================================================================
Thu Feb  7 03:25:11 2008  1202351111     2651 ======================================================
Thu Feb  7 03:25:12 2008  1202351112     1513 ==============================
Thu Feb  7 03:25:13 2008  1202351113        0
Thu Feb  7 03:25:14 2008  1202351114        0
Thu Feb  7 03:25:15 2008  1202351115        0
Thu Feb  7 03:25:16 2008  1202351116        0
Thu Feb  7 03:25:17 2008  1202351117        1
Thu Feb  7 03:25:18 2008  1202351118        0
Thu Feb  7 03:25:19 2008  1202351119        0
Thu Feb  7 03:25:20 2008  1202351120        0
Thu Feb  7 03:25:21 2008  1202351121        0
Thu Feb  7 03:25:22 2008  1202351122        0
Thu Feb  7 03:25:23 2008  1202351123        0
Thu Feb  7 03:25:24 2008  1202351124        0
Thu Feb  7 03:25:25 2008  1202351125        0
Thu Feb  7 03:25:26 2008  1202351126        0
Thu Feb  7 03:25:27 2008  1202351127        0
Thu Feb  7 03:25:28 2008  1202351128        0
Thu Feb  7 03:25:29 2008  1202351129
Totals:
1202351086 - 1202351128    50064</pre>
<p>Este important setarea unei valori bune pentru  <code>--after</code> înainte de a recupera toate fişierele, sau vor fi recuperate prea multe fişiere.</p>
<h3>Jurnalul</h3>
<p>Jurnalul este un fişier format dintr-un număr fix de blocuri. Inodeul lui este <code>EXT3_JOURNAL_INO</code>, care de obicei este 8. Inodeul actual poate fi şi el găsit în superbloc:</p>
<pre>$ ext3grep $IMAGE --superblock | grep 'Inode number of journal file'
Inode number of journal file: 8</pre>
<p>şi mărimea i se poate afla listând inodeul 8:</p>
<pre>$ ext3grep $IMAGE --print --inode 8
Number of groups: 75
Loading group metadata... done
Minimum / maximum journal block: 1115 / 35026
Loading journal descriptors... done
Journal transaction 4381435 wraps around, some data blocks might have been lost of this transaction.
Number of descriptors in journal: 30258; min / max sequence numbers: 4379495 / 4382264

Hex dump of inode 8:
0000 | 80 81 00 00 00 00 00 08 00 00 00 00 62 07 57 46 | ............b.WF
0010 | 62 07 57 46 00 00 00 00 00 00 01 00 10 01 04 00 | b.WF............
0020 | 00 00 00 00 08 00 00 00 5b 04 00 00 5c 04 00 00 | ........[...\...
0030 | 5d 04 00 00 5e 04 00 00 5f 04 00 00 60 04 00 00 | ]...^..._...`...
0040 | 61 04 00 00 62 04 00 00 63 04 00 00 64 04 00 00 | a...b...c...d...
0050 | 65 04 00 00 66 04 00 00 67 04 00 00 68 08 00 00 | e...f...g...h...
0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

Inode is Allocated
Group: 0
Generation Id: 0
uid / gid: 0 / 0
mode: rrw-------
size: 134217728
num of links: 1
sectors: 262416 (--&gt; 34 indirect blocks).

Inode Times:
Accessed:       0
File Modified:  1180108642 = Fri May 25 17:57:22 2007
Inode Modified: 1180108642 = Fri May 25 17:57:22 2007
Deletion time:  0

Direct Blocks: 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126
Indirect Block: 1127
Double Indirect Block: 2152</pre>
<p>unde puteţi observa că dimensiunea jurnalului meu este de 134217728 bytes, sau 32768 de blocuri. Primele 12 blocuri sunt afişate direct în inode: blocurile 1115 &#8211; 1126. Apoi un bloc indirect este plasat în 1127. Acest bloc indirect poate conţine 1024 de numere de blocuri fiecare urmând direct blocul indirect (1128 &#8211; 2151). Apoi inodeul indică un bloc indirect dublu care conţine 31 de numere de blocuri pentru blocuri indirecte adiţionale. Numărul total de blocuri indirecte (duble / triple) este calculat să fie 34 (ştiind că un sector are 512 bytes). Aşadar, dacă totul ar fi stocat continuu, ultimul block al jurnalului ar fi 1115 + 32768 + 34 &#8211; 1 = 33916. Totuşi, jurnalul nu se încadrează în întregime în grupul 0, astfel ultimele ultimele blocuri se găsesc în grupul 1 şi headerul grupului 1 (cel mai degrabă tabela de inodeuri) este inserat undeva între blocurile jurnalului făcând ultimul bloc să fie 35025. . Pe deasupra, pot exista blocuri rele oriunde în interior. Astfel, modul corect de apropiere a jurnalului este în termenii de numere de blocuri jurnal &#8211; &#8216;journal block numbers&#8217;.</p>
<p>Primul bloc al fişierului jurnal (blocul 1115 din exemplul de mai sus) conţine superblocul jurnalului. Structura lui este definită în <code>/usr/include/linux/jbd.h</code> ca fiind <code>journal_superblock_t</code>. Ea poate fi afişată folosind :</p>
<pre>$ ext3grep $IMAGE --journal --superblock
Journal Super Block:

Signature: 0x3225106840
Block type: Superblock version 2
Sequence Number: 0
Journal block size: 4096
Number of journal blocks: 32768
Journal block where the journal actually starts: 1
Sequence number of first transaction: 4382265
Journal block of first transaction: 0
Error number: 0
Compatible Features: 0
Incompatible features: 1
Read only compatible features: 0
Journal UUID: 0xe3 0x88 0xd9 0x09 0x94 0xca 0x43 0x95 0x9b 0x53 0xac 0x2c 0xd8 0xe0 0x3d 0x25
Number of file systems using journal: 1
Location of superblock copy: 0
Max journal blocks per transaction: 0
Max file system blocks per transaction: 0
IDs of all file systems using the journal:
1. 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Minimum / maximum journal block: 1115 / 35026
Loading journal descriptors... done
Journal transaction 4381435 wraps around, some data blocks might have been lost of this transaction.
Number of descriptors in journal: 30258; min / max sequence numbers: 4379495 / 4382264</pre>
<p>Aici se poate observa că jurnalul începe de fapt la Journal Block Number 1, şi ultimul bloc este Journal Block Number 32768. Acestea nu sunt deci la fel cu numere de bloc ale sistemului de fişiere. Se pot afla numerele de bloc reale, astfel</p>
<pre>$ ext3grep $IMAGE --journal --journal-block 1
[...]
Group: 0
Block 1116 belongs to the journal.
[...]</pre>
<p>care arată că Journal Block Number 1 este blocul 1116 din sistemul de fişiere.</p>
<p>Jurnalul este umplut cu &#8220;Transactions&#8221; care au un număr secvenţial crescător. Dacă sfârşitul jurnalului este atins, scriind continuu de la început, umplând în jur. If the end of the journal is reached, writing continuous at the start, wrapping around. Aşadar, dacă un sistem de fişiere este demontat curat, atunci la următoarea montare scrierea începe mereu de la început (cred).</p>
<p>O singură tranzacţie constă din una sau mai multe &#8220;Descriptors&#8221;. Ultimul descriptor al tranzacţiei este un &#8220;Commit Block&#8221;, semnalând că tranzacţia s+a terminat cu succes iar datele din descriptori anteriori au fost scrise pe disc. Mai există încă 2 tipuri de descriptori: blocuri de revocare şi blocuri conţinând &#8220;tags&#8221;. Un bloc de revocare este umplut cu numere de blocuri care ar trebui să fie (sau sunt) nealocate de această tranzacţie. Un tag este o structură care atribuie blocuri secvenţiale de jurnal (nu blocuri ale sistemului de fişiere) la blocurile sistemului de fişiere: următoarele blocuri de jurnal conţin datele care ar fi trebuit să fie scrise (au fost scrise) în blocul dar de pe sistemul de fişiere.</p>
<p>Aceasta face ca &#8220;tags&#8221; în particular, interesante pentru noi: ele conţin copii ale datelor care au fost scrise pe disc în trecut, incluzând inodeurile vechi.</p>
<h3>Exemplu de recuperare manuală</h3>
<p>În exemplul următor vom recupera manual un fişier mic. Rezultatul afişat este dat doar parţial pentru a economisi spaţiu şi a face exemplul cât mai citibil.</p>
<p>Folosind <code>ext3grep $IMAGE --ls --inode</code> găsim numele fişierului pe care dorim să îl recuperăm:</p>
<pre>$ ext3grep $IMAGE --ls --inode 2 | grep carlo
   3  end d  195457  D 1202352103 Thu Feb  7 03:41:43 2008  drwxr-xr-x  carlo

$ ext3grep $IMAGE --ls --inode 195457 | grep ' bin$' | head -n 1
  34   35 d  309540  D 1202352104 Thu Feb  7 03:41:44 2008  drwxr-xr-x  bin

$ ext3grep $IMAGE --ls --inode 309540 | grep start_azureus
   9   10 r  309631  D 1202351093 Thu Feb  7 03:24:53 2008  rrwxr-xr-x  start_azureus</pre>
<p>evident, inode numărul 309631 este şters şi nu avem numere de bloc pentru acest fişier:</p>
<pre>$ ext3grep $IMAGE --print --inode 309631
[...]
Inode is Unallocated
Group: 19
Generation Id: 2771183319
uid / gid: 1000 / 1000
mode: rrwxr-xr-x
size: 0
num of links: 0
sectors: 0 (--&gt; 0 indirect blocks).

Inode Times:
Accessed:       1202350961 = Thu Feb  7 03:22:41 2008
File Modified:  1202351093 = Thu Feb  7 03:24:53 2008
Inode Modified: 1202351093 = Thu Feb  7 03:24:53 2008
Deletion time:  1202351093 = Thu Feb  7 03:24:53 2008

Direct Blocks:</pre>
<p>Aşadar, vom încerca să căutăm o copie mai veche a lui în jurnal. Mai întâi, găsim blocul sistemului de fişiere care conţine acest inode:</p>
<pre>$ ext3grep $IMAGE --inode-to-block 309631 | grep resides
Inode 309631 resides in block 622598 at offset 0xf00.</pre>
<p>Apoi găsim toţi descriptorii jurnalului care se referă la blocul 622598:</p>
<pre>$ ext3grep $IMAGE --journal --block 622598
[...]
Journal descriptors referencing block 622598:
4381294 26582
4381311 28693
4381313 28809
4381314 28814
4381321 29308
4381348 30676
4381349 30986
4381350 31299
4381374 32718
4381707 1465
4381709 2132
4381755 2945
4381961 4606
4382098 6073
4382137 6672
4382138 7536
4382139 7984
4382140 8931</pre>
<p>Aceasta înseamnă că tranzacţia cu numărul secvenţial 4381294 are o copie a blocului 622598 în blocul 26582 şi asa mai departe. Cel mai mare număr de secvenţă de jos, ar trebui să fie ultimele date scrise pe disc şi deci blocul 8931 ar trebui să fie identic cu blocul curent 622598. Pentru a găsi ultima copie neştearsă trebuie pornit de jos în sus.</p>
<p>dacă încercaţi scrierea unui astfel de bloc, ext3grep recunoaşte că este un bloc dintr-o tabelă de inodes şi va afişa conţinutul tuturor celor 32 de inodes din ea. Noi dorim să vedem doar inode cu numărul 309631; astfel că folosimt un grep inteligent:</p>
<pre>$ ext3grep $IMAGE --print --block 8931 | grep -A15 'Inode 309631'
--------------Inode 309631-----------------------
Generation Id: 2771183319
uid / gid: 1000 / 1000
mode: rrwxr-xr-x
size: 0
num of links: 0
sectors: 0 (--&gt; 0 indirect blocks).

Inode Times:
Accessed:       1202350961 = Thu Feb  7 03:22:41 2008
File Modified:  1202351093 = Thu Feb  7 03:24:53 2008
Inode Modified: 1202351093 = Thu Feb  7 03:24:53 2008
Deletion time:  1202351093 = Thu Feb  7 03:24:53 2008

Direct Blocks:</pre>
<p>Acesta este într-adevăr identic cu ce am văzut în blocul 622598. Apoi urmează să ne uităm la numerele secvenţiale mai mici până când găsim unul cu 0 Deletion time. Primul găsit (de jos în sus) este blocul 6073:</p>
<pre>$ ext3grep $IMAGE --print --block 6073 | grep -A15 'Inode 309631'
--------------Inode 309631-----------------------
Generation Id: 2771183319
uid / gid: 1000 / 1000
mode: rrwxr-xr-x
size: 40
num of links: 1
sectors: 8 (--&gt; 0 indirect blocks).

Inode Times:
Accessed:       1202350961 = Thu Feb  7 03:22:41 2008
File Modified:  1189688692 = Thu Sep 13 15:04:52 2007
Inode Modified: 1189688692 = Thu Sep 13 15:04:52 2007
Deletion time:  0

Direct Blocks: 645627</pre>
<p>Ce este mai sus este automat generat şi poate fi făcut mult mai repede folosind în linia de comandă opţiunea  <code>--show-journal-inodes</code>. Această opţiune va găsi blocul de care aparţine inodeul, apoi găseşte toate copiile ale acelui bloc în jurnal, şi afişează în cele din urmă doar inodeul cerut din fiecare bloc gasit (fiecare conţinând 32 de inoduri, după cum ştiţi) eliminând dublurile:</p>
<pre>$ ext3grep $IMAGE --show-journal-inodes 309631
Number of groups: 75
Minimum / maximum journal block: 1115 / 35026
Loading journal descriptors... done
Journal transaction 4381435 wraps around, some data blocks might have been lost of this transaction.
Number of descriptors in journal: 30258; min / max sequence numbers: 4379495 / 4382264
Copies of inode 309631 found in the journal:

--------------Inode 309631-----------------------
Generation Id: 2771183319
uid / gid: 1000 / 1000
mode: rrwxr-xr-x
size: 0
num of links: 0
sectors: 0 (--&gt; 0 indirect blocks).

Inode Times:
Accessed:       1202350961 = Thu Feb  7 03:22:41 2008
File Modified:  1202351093 = Thu Feb  7 03:24:53 2008
Inode Modified: 1202351093 = Thu Feb  7 03:24:53 2008
Deletion time:  1202351093 = Thu Feb  7 03:24:53 2008

Direct Blocks:

--------------Inode 309631-----------------------
Generation Id: 2771183319
uid / gid: 1000 / 1000
mode: rrwxr-xr-x
size: 40
num of links: 1
sectors: 8 (--&gt; 0 indirect blocks).

Inode Times:
Accessed:       1202350961 = Thu Feb  7 03:22:41 2008
File Modified:  1189688692 = Thu Sep 13 15:04:52 2007
Inode Modified: 1189688692 = Thu Sep 13 15:04:52 2007
Deletion time:  0

Direct Blocks: 645627</pre>
<p>Fişierul este într-adevăr mic: doar un bloc. Copiem acest bloc cu dd cum s-a arătat mai devreme:</p>
<div>
<pre>$ dd if=$IMAGE bs=4096 count=1 skip=645627 of=block.645627
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.0166104 seconds, 247 kB/s</pre>
</div>
<p>şi apoi edităm fişierul pentru a elimina zerourile sau copiem primii 40 de bytes (mărimea dată a fişierului) :</p>
<div>
<pre>$ dd if=block.645627 bs=1 count=40 of=start_azureus
40+0 records in
40+0 records out
40 bytes (40 B) copied, 0.000105397 seconds, 380 kB/s

$ cat start_azureus
cd /usr/src/azureus/azureus
./azureus &amp;</pre>
</div>
<p>Recuperat!</p>
<p>Observaţi că este posibil să vedeţi toţi descriptorii unei tranzacţii date. Tranzacţia pe care am folosit-o să recuperăm acest fişier a fost 4382098. Tranzacţia completă poate fi observată cu :</p>
<pre>$ ext3grep $IMAGE --journal-transaction 4382098
[...]
Prev / Current / Next sequences numbers: 4382097 4382098 4382099
Transaction was NOT COMMITTED!
TAG: 6074=851971 6073=622598 6072=393218 6071=393395 6070=393231 6069=393409 6068=393240 6067=393371 6066=622596
REVOKE: 506451
TAG: 6056=393217 6057=1 6058=393273 6059=393232 6060=403879 6061=393216 6062=491520 6063=506302 6064=0 6065=393219</pre>
<p>Aici observaţi, de exemplu, TAG-ul <code>6072=393218</code>, însemnând că blocul 6072 conţine o copie (veche) a blocului 393218. Nu ştiu de ce este scris că tranzacţia nu a fost terminată (pare puţin probabil). Este posibil ca blocul de decizie (commit block) să fi fost suprascris şi această tranzacţie veche a jurnalului nu mai este efectiv completă.</p>
<h3>Recuperarea fişierelor</h3>
<p>Desigur, ar fi enervant sî recuperăm fişiere mai mari, care sunt pe mai multe blocuri, în acest mod; lasaţi-mă să recuperez manual mii de fişiere ! Aşadar tot ce s-a prezentat mai sus poate fi automatizat. Oricum, dacă recuperaţi 50.000 de fişiere atunci nu este efectiv nici o metodă să verificaţi dacă a funcţionat mai ales dacă au fost recuperate MAI MULTE fişiere decât aţi fi dorit; va fi greu să recuperaţi tot. Ar trebui să aveţi grijă să recuperaţi fişierele cât mai exact cu putinţă.</p>
<p>nu est enevoie de atâta grijă pentru a recupera un singur fişier, e destul să trimiteţi pathul la  <code>ext3grep</code>:</p>
<pre>$ ext3grep $IMAGE --restore-file carlo/bin/start_kvm
[...]
Restoring carlo/bin/start_kvm

$ cat RESTORED_FILES/carlo/bin/start_kvm
#! /bin/sh
cd /usr/src/qgt/src
./host-linux 192.168.2.4 &amp;
cd /opt/kvm/winXPpro
sudo modprobe kvm_intel
sudo kvm -m 384 -hda vdisk6GB.img -cdrom /dev/cdrom -localtime -std-vga -net nic,vlan=0,model=rtl8139 -net tap,vlan=0
#-snapshot # -daemonize
killall -9 host-linux</pre>
<p>Observaţi că  aceasta a creat directorul  <code>RESTORED_FILES/carlo/bin</code> în directorul curent pentru a putea recupera acest fişier. Mai observaţi şi că, dacă <code>RESTORED_FILES/carlo/bin/start_kvm</code> există deja în directorul curent atunci  <em>NU</em> a fost suprascris!</p>
<p>Pentru ca acestea să funcţioneze va trebui prima dată să executaţi pasul  1 şi 2  al analizării discului pe care  <code>ext3grep</code> o face (vedeţi mai jos) .</p>
<p>Este posibil să se descarce toate numele de fişiere pe care <code>ext3grep</code> le poate găsi, folosind în linia de comandă opţiunea <code>--dump-names</code>:</p>
<pre>$ ext3grep $IMAGE --dump-names
carlo
carlo/.Trash
carlo/.Xauthority
carlo/.Xauthority-c
carlo/.Xauthority-l
carlo/.Xauthority-n
carlo/.alsaplayer
carlo/.alsaplayer/alsaplayer.m3u
carlo/.alsaplayer/config
[...]
carlo/www/xcw/.svn/tmp/wcprops
carlo/www/xcw/index.html
carlo/www/xmlwrapp-0.5.0.tar.gz
lost+found
lost+found/1st level admin borders (states_provinces)
lost+found/1st level admin names (states_provinces)
lost+found/2002 - cloud cover (0-10%)
[...]</pre>
<p>Fişierele care vor ajunge în  <code>lost+found</code> sunt fişiere pentru care nu s-a găsit un director (dar care incă au o copie la inode în jurnal). Cel mai sigur acestea sunt fişiere care au fost şterse cu mult timp în urmă şi pot fi aruncate, oricum.</p>
<p>După ce sunteţi satisfăcuţi de afişarea  tuturor <code>--dump-names</code>, puteţi înlocui  <code>--dump-names</code> cu  <code>--restore-all</code>, care va determina <code>--restore-file</code> să fie apelată pentru fiecare nume de fişier afişat de <code>--dump-names</code>.  După cum am spus înainte, este foarte indicat să se folosească foarte bine opţiunea  <code>--after</code> în linia de comandă pentru a evita ca  <code>ext3grep</code> să încerce recuperarea fisierelor care efectiv sunt prea vechi. Observaţi că în acest moment rezultatul pentru <code>--dump-names</code> este nefiltrat,  iar  <code>--restore-file</code> (<code>--restore-all</code>) <em>DOAR</em> foloseşte opţiunea  <code>--after</code> în linia de comandă.</p>
<p>De exemplu,</p>
<pre>$ time ext3grep $IMAGE --restore-all --after=1202351117
Only show/process deleted entries if they are deleted on or after Thu Feb  7 03:25:17 2008.
[...]
Loading md5.ext3grep.stage2... done
Not undeleting "carlo/.Trash" because it was deleted before 1202351117 (32767)
Not undeleting "carlo/.Xauthority" because it was deleted before 1202351117 (32767)
[...]
Cannot find an undeleted inode for file "carlo/.azureus/logs/save/1176594823051_alerts_1.log".
[...]
Restoring carlo/bin/startx
[...]
real	0m3.079s
user	0m1.332s
sys	0m1.744s</pre>
<p>unde <code>carlo/bin/startx</code> este singurul fiţier recuperat. A fost  <em>ultimul</em> fişier care a fost şters şi am setat valoarea opţiunii <code>--after</code> la o secundă înainte. Observaţi că este logic să fie ultimul fişier dacă am pornit X folosind acest script; astfel, era „în folosire” până am repornit.</p>
<p>Considerând că a verificat peste 50.000 de fişiere de p eo partiţie de 10GB, cele 3,1 secunde scoase inseamnă extrem de repede; acest lucru fiind cauzat de diverşi factori: 1) Prima dată când este rulat <code>ext3grep</code> face o analiză completă a partiţiei şi scrie rezultatele într-un fişier cache ( în 2 paşi, pasul 1 şi pasul 2). Aceşti paşi trebuie facuţi o singură dată. 2) Deoarece doar un singur fişier a trebuit sa fie recuperat, nu a fost nevoie de prea mult spaţiu pe disc (pe lângă asta, eu am 4 GB de RAM – deci orice era nevoie era deja în cache). 3) Am un procesor rapid. Programul a folosit totuşi 100% CPU în aceste 3,1 secunde. Încercând să recuperez multe fişiere se poate bloca accesul la disc, dar totuşi se rezolvă destul de repede (puteţi să staţi şi să aşteptaţi).</p>
<h3>Pasul  1</h3>
<p>Pasul 1 scrie fişierele cache în  <code>DEVICE.ext3grep.stage1</code>, unde  <code>DEVICE</code> este înlocuit cu numele dispozitivului  (de exemplu, dacă <code>$IMAGE</code> este <code>/dev/hda2</code>, atunci  <code>DEVICE</code> este  <code>hda2</code>). Puţine pot merge rău în pasul 1: doar scanează tot discul si găseşte toate blocurile care par să conţină un director.</p>
<p>Formatul fişierelor cache din pasul 1 este :</p>
<div>
<pre>$ cat md5.ext3grep.stage1
# Stage 1 data for md5.
# Inodes and directory start blocks that use it for dir entry '.'.
# INODE : BLOCK [BLOCK ...]
2 : 1109 6592 9312
11 : 1110
195457 : 415744
195468 : 2916 4732 17783 403469
195469 : 403470
[...]
929633 : 1885254
929659 : 1885280
# Extended directory blocks.
1178
1179
1182
[...]
1884516</pre>
</div>
<p>În prima parte, pe prima coloană sunt inodes, urmate de un spaţiu, urmat de o coloană urmată de o listă de numere de blocuri separate prin spaţii care folosesc acel inode ca intrare cu numele „.” . Evident, poate fi doar un singur director care foloseşte acest inode, deci <code>ext3grep</code> trebuie să determine care din aceste numere de blocuri este ultimul care a fost cel real. A doua parte listează toate numerele de bloc care conţin blocurile extinse de director, cel existent, blocurile de director care nu sunt primele blocuri şi nu conţin intrarea de director „.”. Nu se ştie cui director îi aparţin neavând inodeul original. În Pasul 2 <code>ext3grep</code> va încerca să găsească cări director îi aparţin.</p>
<h3>Pasul 2</h3>
<p>Acest pas, executat de funcţia  <code>init_directories()</code>, conţine în general codul heuristic. Întâi determină care blocuri sunt cu adevărat blcurile de start ale directorului, apoi atribuie fiecare bloc extins de director unui astfel de director (a se vedea şi TODO, mai jos). Ca rezultat este posibil atribuirea unui path fiecărui inode (de director). În sfârşit, acest rezultat este scris într-un fişier cache (<code>DEVICE.ext3grep.stage2</code>). În cazul în care ceva merge foarte rău aici, puteţi fi în stare să o rezolvaţi editând acest fişier (eliminând numere incorecte sau adăugând numerele corecte de bloc), oricum, nu adăugaţi sau eliminaţi comentarii: <code>ext3grep</code> va deveni confuz dacă schimbaţi fişierul prea mult.</p>
<h3>Localizarea bazei de date</h3>
<p>Mă tem că am folosit încă ceva pe lângă datele de pe partiţie pentru a recupera fişierele: încă mai am partiţia  <code>/var</code> deci încă mai am baza de date <code>locate</code> (în <code>/var/cache/locate/locatedb</code>). Am folosit-o pentru a face o listă cu toate numele de fişiere care au fost şterse şi am scrs-o într-un fişier  <code>locate_output</code>, cu formatul :</p>
<div>
<pre>carlo
carlo/.Trash
carlo/.Xauthority
[...]</pre>
</div>
<p>în alte cuvinte cu acelaşi format precum output-ul  <code>--dump-names</code>. Acest fişier este deschis şi folosit de către funcţia <code>load_locate_data</code>, în fişierul sursă  <code>locate.cc</code>, care umple  <code>filename_to_locatepath_map</code>. Această hartă este ulterior folosită de funcţia <code>parent_directory</code> pentru a face o ghicire educativă corecta asupra directorului părinte căruia îi aparţine un fişier dat.</p>
<p>Chiar şi atunci, deoarece fişierul meu de bază de date de locaţii nu era complet, a trebui să adaug manual hack-uri. În special, este posibil adăugarea unei liste codate hardcoded de expresii normale în <code>locate.cc</code> care determină returnarea unui director părinte specific. Totuşi, am mai codat hardcoded traducerea a 3 numere de blocuri (director) la &#8220;<code>lost+found</code>&#8220;. Probabil este nevoie de reglajul / hackul acestei părţi de cod dacă doriţi succesul unei recuperări corecte a datelor în directorul corect.</p>
<p>Dacă vedeţi mesaje pe formular:</p>
<pre>Could not find an inode for extended directory at BLOCKNR, disregarding it's contents.</pre>
<p>citiţi vă rog  <a href="http://groups.google.com/group/ext3grep/msg/370b2a31a37a66fd" target="_blank"> acest post </a> în întregime pentru mai multe informaţii.</p>
<h2>Hard linkurile în plus</h2>
<p>Deoarece inodeurile sunt refolosite, se întâmplă des ca o intrare veche de director (a unui fişier şters, a unui director şters, sau într-un bloc director care nu mai este folosit) să indice un inode care este acum folosit de altcineva. Dacă acel altcineva este de acelaşi tip (amandouă fişiere normale) atunci nu există nici o metodă de a le distinge de hardlink: două fişiere folosind acelaşi inode. Ca rezultat, recuperarea aduce multe hardlinkuri eronate.</p>
<p>Pentru a face pau uşoară curăţarea acestora, <code>ext3grep</code> oferă opţiunea în linia de comandă <code>--show-hardlinks</code>.</p>
<pre>$ ext3grep $IMAGE --show-hardlinks
[...]
Inode 309562:
  carlo/bin/pc++ (309540)
  carlo/bin/pcc (309540)
  carlo/bin/pcc.unlock (309540)
Inode 702474:
  carlo/projects/libcwd/libcwd/.svn/entries (700387)
  carlo/projects/libcwd/libcwd/testsuite/tst_flush.o (700609)
[...]</pre>
<p>Aici, hardlinkurile pentru inodeul 309562 sunt corecte. Hardlinkul pentru inodeul 702474 este greşit şi unul din fişiere ar trebui şters. După ce aţi determinat manual care fişier este eronat şi l-aţi şters, va reapărea dacă reluaţi comanda. Doar acele hardlinkuri sunt raportate dacă încă există în directorul output: puteţi folosi doar <code>--show-hardlinks</code> <em>după</em> ce aţi rulat <code>--restore-all</code>, sau nu va rezulta nici un output deoarece nu există un fişier output.</p>
<h2>TODO</h2>
<p>Programul a fost scris <em>în timp ce </em> învăţam cum funcţionează ext3. Prima funcţie nu depinde astfel de ceea ce am scris mai târziu. Un avantaj este acela că aceste funcţionalităţi sunt mai rapide şi vor merge chiar dacă codul scris după este greşit; mai există şi multe down-to-earth, pe care le puteţi folosi pentru a verifica ce anume se întâmplă exact fără a depinde de codul mult mai complex (şi heuristic) adăugat mai târziu. Oricum, sunt şi dezavantaje: codul de filtrare pe care l-am scris pentru <code>--ls</code> nu este folosit de codul scris mai târziu care utilizează <code>--dump-names</code> şi  <code>--restore-all</code>. De asemenea , Pasul 2 este rezolvat fără a folosi jurnalul aşa cum e posibil folosind codul scris mai târziu. Nu este uşoară această schimbare deoarece acel cod foloseşte rezultatele din pasul 2. Cred că un algoritm mai bun pentru găsirea blocurilor corecte pentru ultima copie a directorului va fi la fel cu ce am făcut pentrua-mi recupera fişierele: găsind ultimul inode neşters al acelui director din jurnal. Totuşi el nu funcţionează aşa acum.</p>
<h2>Opţiuni pentru linia de comandă</h2>
<p>Toate opţiunile de linii de comandă sunt scrise mai jos folosind  opţiunea <code>--help</code>:</p>
<pre>$ ext3grep $IMAGE --help
Usage: ext3grep [options] [--] device-file
Options:
  --version, -[vV]       Print version and exit successfully.
  --help,                Print this help and exit successfully.
  --superblock           Print contents of superblock in addition to the rest.
                         If no action is specified then this option is implied.
  --print                Print content of block or inode, if any.
  --ls                   Print directories with only one line per entry.
                         This option is often needed to turn on filtering.
  --accept filen         Accept 'filen' as a legal filename.
                         Can be used multiple times.
  --journal              Show content of journal.
  --show-path-inodes     Show the inode of each directory component in paths.

Filters:
  --group grp            Only process group 'grp'.
  --directory            Only process directory inodes.
  --after dtime          Only entries deleted on or after 'dtime'.
  --before dtime         Only entries deleted before 'dtime'.
  --deleted              Only show/process deleted entries.
  --allocated            Only show/process allocated inodes/blocks.
  --unallocated          Only show/process unallocated inodes/blocks.
  --reallocated          Do not suppress entries with reallocated inodes.
                         Inodes are considered 'reallocated' if the entry
                         is deleted but the inode is allocated, but also when
                         the file type in the dir entry and the inode are
                         different.
  --zeroed-inodes        Do not suppress entries with zeroed inodes. Linked
                         entries are always shown, regardless of this option.
  --depth depth          Process directories recursively up till a depth
                         of 'depth'.
Actions:
  --inode-to-block ino   Print the block that contains inode 'ino'.
  --inode ino            Show info on inode 'ino'.
                         If --ls is used and the inode is a directory, then
                         the filters apply to the entries of the directory.
                         If you do not use --ls then --print is implied.
  --block blk            Show info on block 'blk'.
                         If --ls is used and the block is the first block
                         of a directory, then the filters apply to entries
                         of the directory.
                         If you do not use --ls then --print is implied.
  --histogram=[atime|ctime|mtime|dtime|group]
                         Generate a histogram based on the given specs.
                         Using atime, ctime or mtime will change the
                         meaning of --after and --before to those times.
  --journal-block jblk   Show info on journal block 'jblk'.
  --journal-transaction seq
                         Show info on transaction with sequence number 'seq'.
  --dump-names           Write the path of files to stdout.
                         This implies --ls but suppresses it's output.
  --search-start str     Find blocks that start with the fixed string 'str'.
  --search str           Find blocks that contain the fixed string 'str'.
  --search-inode blk     Find inodes that refer to block 'blk'.
  --search-zeroed-inodes Return allocated inode table entries that are zeroed.
  --inode-dirblock-table dir
                         Print a table for directory path 'dir' of directory
                         block numbers found and the inodes used for each file.
  --show-journal-inodes ino
                         Show copies of inode 'ino' still in the journal.
  --restore-file 'path'  Will restore file 'path'. 'path' is relative to root
                         of the partition and does not start with a '/' (it
                         must be one of the paths returned by --dump-names).
                         The restored directory, file or symbolic link is
                         created in the current directory as ./'path'.
  --restore-all          As --restore-file but attempts to restore everything.
                         The use of --after is highly recommended because the
                         attempt to restore very old files will only result in
                         them being hard linked to a more recently deleted file
                         and as such polute the output.
  --show-hardlinks       Show all inodes that are shared by two or more files.</pre>
<p>New functionality was more or less added top down, so this also gives a historic overview of how the program was written.</p>
<p><a name="0.1_button"> </a></p>
<h2><a name="0.1_button">Donations</a></h2>
<h2><a name="0.1_button">Descărcări</a></h2>
<p><a name="0.1_button">Acesta este linkul pentru site+ul proiectului ext3grep: </a><a href="http://groups.google.com/group/ext3grep/web/ext3grep-source-code-and-overview" target="_blank">http://groups.google.com/group/ext3grep/web/ext3grep-source-code-and-overview</a>.</p>
<p>Vă sfătuiesc să vă alăturaţi acestui grup şi să citiţi arhiva de comentarii:  <a href="http://groups.google.com/group/ext3grep/topics?gvc=2" target="_blank">the archives</a> of the mailinglist.</p>
<p>Pentru a citi arhiva pe email daca aveţi un cont gmail:</p>
<p><a href="http://groups.google.com/group/ext3grep/subscribe" target="_blank">http://groups.google.com/group/ext3grep/subscribe</a></p>
<div>Copyright © 2008 Carlo Wood</div>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/07/cum-sa-recuperezi-fisierele-sterse-de-pe-o-partitie-ext3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rezumat Beerfest 13 iunie 2009</title>
		<link>http://www.arlug.ro/2009/06/rezumat-beerfest-13-iunie-2009/</link>
		<comments>http://www.arlug.ro/2009/06/rezumat-beerfest-13-iunie-2009/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:17:46 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>
		<category><![CDATA[fedoraproject.ro]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=413</guid>
		<description><![CDATA[Beerfestul din 13 iunie a fost organizat cu ocazia lansării versiunii 11  Fedora. Ne-am întâlnit într-un număr destul de mare, aproximativ 17, la terasa Ratio Beach de pe Ștrand. De data aceasta nu am mai încercat să ținem o agendă a ceea ce vrem să discutăm. Discuțiile au fost multe, majoritate pe „bisericuțe”. Principalele teme [...]]]></description>
			<content:encoded><![CDATA[<p>Beerfestul din 13 iunie a fost organizat cu ocazia lansării versiunii 11  Fedora. Ne-am întâlnit într-un număr destul de mare, aproximativ 17, la terasa Ratio Beach de pe Ștrand. De data aceasta nu am mai încercat să ținem o agendă a ceea ce vrem să discutăm. Discuțiile au fost multe, majoritate pe „bisericuțe”. Principalele teme de discuție (din câte am observat eu) au fost:</p>
<ul>
<li>Fedora 10 / 11 &#8211; că tot era cu ocazia lansării Fedora 11, s-au distribuit niște Fedora CD-uri Live cu Fedora 10 trimise de kid, mulțumim kid</li>
<li>forum Arad recent mutat pe mirror, diferențele între metodele de securizare (jail, virtualizare și diferențele față de virtualizarea pe freeBSD)</li>
<li>Firefox 3.5, Opera, implementări ale DOM și alte teme legate de Web Development</li>
<li>Marius Șucan ne-a spus părerea lui despre situația instrumentelor de grafică digitală sub Linux</li>
<li>am mai povestit despre FLOSS Camp-ul de astă vară, vezi <a title="FLOSS Camp 2008" href="http://camp.softwareliber.ro/2008/" target="_blank">http://camp.softwareliber.ro/2008/</a></li>
<li>ne-am mai minunat puțin de aparatul foto al lui Seba, aparat care a surprins aproape toate momentele beerfestului, vezi postul precedent</li>
<li>Rareș a povestit puțin despre Open Streetmap și despre încercarea lui de a face track-uri la munte în weekend-ul care urma</li>
<li>s-au împărţit breloace cu ArLUG</li>
</ul>
<p>Alte observații:</p>
<ul>
<li>a fost un alt beerfest cu prezență feminină (3)</li>
<li>numărul de participanți a fost probabil puțin mai mare decât la ultimul beerfest</li>
<li>ca de obicei majoritatea participanților nu consumau bere</li>
<li>au fost gogoşi (<a title="Gogoşi la ArLUG beerfest" href="http://poze.arlug.ro/main.php?g2_itemId=525" target="_blank">vezi pozele</a>)</li>
<li>s-a discutat și despre alte teme în afară de Linux: filme și cărți (Călinuțu și Mihai Șucan), sfârșit de a 12-banchet-bac (eu și fetele), obiective foto-australia-munte (Seba, Rareș, Moni).</li>
</ul>
<p>În concluzie a fost o întâlnire foarte reușită, sper să avem mai multe acum că începe vara și în general atmosfera se mai relaxează (școli, examene, licențe, etc.).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/06/rezumat-beerfest-13-iunie-2009/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Beerfest ArLUG</title>
		<link>http://www.arlug.ro/2009/06/beerfest-arlug-2/</link>
		<comments>http://www.arlug.ro/2009/06/beerfest-arlug-2/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:25:07 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=397</guid>
		<description><![CDATA[De pe listă citire:

Pentru ca inca mai sunt persoane carora nu le este clar unde ne intalnim. A ramas pe Sambata, 13.06.2009 ora 18:00, la terasa Ratio de pe strand (langa podul din spatele primariei). Nu va fie teama (celor noi) ca nu o sa ne recunoastem, tot ce trebuie sa faceti e sa va [...]]]></description>
			<content:encoded><![CDATA[<p>De pe listă citire:</p>
<blockquote>
<p>Pentru ca inca mai sunt persoane carora nu le este clar unde ne intalnim. A ramas pe Sambata, 13.06.2009 ora 18:00, la terasa Ratio de pe strand (langa podul din spatele primariei). Nu va fie teama (celor noi) ca nu o sa ne recunoastem, tot ce trebuie sa faceti e sa va holbati dupa tricourile cu ArLUG. Daca cei de la accu nu gresesc, Sambata o sa fie vreme numai buna de baut o bere la terasa. http://www.accuweather.com/world-forecast-details.asp?partner=forecastfox&#038;traveler=0&#038;fday=5&#038;locCode=EUR|RO|RO002|ARAD&#038;metric=1</p>
<p>Pana acum s-au anuntat:</p>
<p>Subsemnatul +1, Calinutu, Radu, Nexxu, Nicolae, Lau, Manu, Adi Vesa, Mihai.</p></blockquote>
<p>Mai pun și o hartă ca să eliminăm orice dubiu asupra locației (zoom puțin ca să apară toate numele).<br />
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://www.openstreetmap.org/export/embed.html?bbox=21.320972,46.173065,21.326395,46.175988&#038;layer=mapnik" style="border: 1px solid black"></iframe><br /><small><a href="http://www.openstreetmap.org/?lat=46.1745265&#038;lon=21.3236835&#038;zoom=18&#038;layers=B000FTFTT">View Larger Map</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/06/beerfest-arlug-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArLUG Beerfest</title>
		<link>http://www.arlug.ro/2009/04/arlug-beerfest/</link>
		<comments>http://www.arlug.ro/2009/04/arlug-beerfest/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 17:51:59 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/2009/04/arlug-beerfest/</guid>
		<description><![CDATA[Prezenta:
Rareș
Calinutzu
Seba
Manu
Ioan
DarckLau
Nexxu
Arpy
Silviu
Meli
Adrian Vesa
]]></description>
			<content:encoded><![CDATA[<p>Prezenta:<br />
Rareș<br />
Calinutzu<br />
Seba<br />
Manu<br />
Ioan<br />
DarckLau<br />
Nexxu<br />
Arpy<br />
Silviu<br />
Meli<br />
Adrian Vesa</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/04/arlug-beerfest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.04 release party &#8211; live</title>
		<link>http://www.arlug.ro/2009/04/ubuntu-904-release-party-live/</link>
		<comments>http://www.arlug.ro/2009/04/ubuntu-904-release-party-live/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 16:01:50 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=354</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><object id="utv_o_322919" height="326" width="400" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param value="http://www.ustream.tv/flash/live/653274" name="movie" /><param value="true" name="allowFullScreen" /><param value="always" name="allowScriptAccess" /><param value="transparent" name="wmode" /><param value="viewcount=true&amp;autoplay=false&amp;brand=embed&amp;" name="flashvars" /><embed name="utv_e_218829" id="utv_e_209572" flashvars="viewcount=true&amp;autoplay=false&amp;brand=embed&amp;" height="320" width="400" allowfullscreen="true" allowscriptaccess="always" wmode="transparent" src="http://www.ustream.tv/flash/live/653274" type="application/x-shockwave-flash" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/04/ubuntu-904-release-party-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Întâlnire cu ocazia lansării Ubuntu 9.04</title>
		<link>http://www.arlug.ro/2009/04/intalnire-cu-ocazia-lansarii-ubuntu-904/</link>
		<comments>http://www.arlug.ro/2009/04/intalnire-cu-ocazia-lansarii-ubuntu-904/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 12:03:18 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Beerfest]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=346</guid>
		<description><![CDATA[În 23 aprilie 2009, ora 18 la localul Perla (malul Mureșului) va avea loc o întâlnire cu ocazia lansării noii versiuni a Ubuntu: Ubuntu 9.04, cu numele de cod Jaunty Jackalope. Sunt așteptați să vină toți cei dornici de a afla despre Linux și despre noua versiune a Ubuntu.
]]></description>
			<content:encoded><![CDATA[<p>În 23 aprilie 2009, ora 18 la localul Perla (malul Mureșului) va avea loc o întâlnire cu ocazia lansării noii versiuni a Ubuntu: Ubuntu 9.04, cu numele de cod Jaunty Jackalope. Sunt așteptați să vină toți cei dornici de a afla despre Linux și despre noua versiune a Ubuntu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/04/intalnire-cu-ocazia-lansarii-ubuntu-904/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArLUG mirror oficial de release-uri la Ubuntu</title>
		<link>http://www.arlug.ro/2009/02/arlug-mirror-oficial-de-release-uri-la-ubuntu/</link>
		<comments>http://www.arlug.ro/2009/02/arlug-mirror-oficial-de-release-uri-la-ubuntu/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 20:21:43 +0000</pubDate>
		<dc:creator>Manuel R. Ciosici</dc:creator>
				<category><![CDATA[Comunitate]]></category>
		<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[mirror]]></category>

		<guid isPermaLink="false">http://www.arlug.ro/?p=279</guid>
		<description><![CDATA[Sunt obosit așa că o să las imaginea să vorbească singură.
]]></description>
			<content:encoded><![CDATA[<p>Sunt obosit așa că o să las imaginea să vorbească singură.</p>
<div id="attachment_280" class="wp-caption aligncenter" style="width: 452px"><a href="http://www.ubuntu.com/getubuntu/download"><img class="size-full wp-image-280" title="Imagine care arată că ArLUG a devenit mirror oficial pentru Ubuntu, atât arhive cât și lansări" src="http://www.arlug.ro/wp-content/uploads/2009/02/arlug_mirror.png" alt="arlug_mirror" width="442" height="257" /></a><p class="wp-caption-text">Imagine care arată că ArLUG a devenit mirror oficial pentru Ubuntu, atât arhive cât și lansări</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.arlug.ro/2009/02/arlug-mirror-oficial-de-release-uri-la-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
