<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-916105947301644833</id><updated>2026-04-25T08:19:27.974-07:00</updated><title type='text'>Ext2read - View ext2/3/4 partitions from Windows</title><subtitle type='html'>This Application can be used to view Ext2/3/4 partitions from windows.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-916105947301644833.post-7744746656690676048</id><published>2010-04-11T15:38:00.001-07:00</published><updated>2017-10-30T08:26:15.159-07:00</updated><title type='text'>Ext2read 2.2 released. Now with LVM2 and EXT4 support</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
we are pleased to announce a new version of our ext2read project&lt;br /&gt;
&lt;br /&gt;
FEATURES:&lt;br /&gt;
Simple UI designed using QT4.&lt;br /&gt;
View/Read Ext2/ext3/ext4 partitions.&lt;br /&gt;
Linux LVM2 Support.&lt;br /&gt;
Ext4 Large File support (untested).&lt;br /&gt;
Recursively Copy the entire folder or even /&lt;br /&gt;
Support for external USB disks.&lt;br /&gt;
Support for disk and filesystem &amp;nbsp;images. For eg. Wubi users can just&lt;br /&gt;
open their root.disk file through this program.&lt;br /&gt;
LRU based Block cache for faster access.&lt;br /&gt;
Unicode support.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;If you find any bugs, have any questions or comments. Please let us know.&lt;br /&gt;
&lt;br /&gt;
The executables and sources can be downloaded from http://ext2read.sf.net&lt;br /&gt;
&lt;br /&gt;
If any of you are interested in joing this project, you can join the&lt;br /&gt;
mailing list and discuss. Join from here&lt;br /&gt;
https://lists.sourceforge.net/lists/listinfo/ext2read-devel&lt;br /&gt;
&lt;br /&gt;
Enjoy reading your files.&lt;br /&gt;
&lt;br /&gt;
NOTE: This program must be run as Administrator. right click the file&lt;br /&gt;
and select run as Administrator.&lt;br /&gt;
This is not a transparent file system driver jusr a user space tool.&lt;br /&gt;
The LVM2 metadata can be complex because of the wide variety of configuration posibilities. All configurations has not been tested. If Lvm2 does not work in your system, please file a bug with your LVM2 metadata.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/7744746656690676048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ext2read.blogspot.com/2010/04/ext2read-22-released-now-with-lvm2-and.html#comment-form' title='91 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/7744746656690676048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/7744746656690676048'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/2010/04/ext2read-22-released-now-with-lvm2-and.html' title='Ext2read 2.2 released. Now with LVM2 and EXT4 support'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>91</thr:total></entry><entry><id>tag:blogger.com,1999:blog-916105947301644833.post-988987766100737512</id><published>2010-04-04T18:21:00.001-07:00</published><updated>2017-10-30T08:26:31.326-07:00</updated><title type='text'>Ext2read 2.1 released</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px;&quot;&gt;we are pleased to announce a new version of our ext2read project&lt;br /&gt;
which we created 6 years ago.&amp;nbsp;we were motivated to redsign and rework the project after i installed&lt;br /&gt;
the new ubuntu karmic. By default it used Ext4&amp;nbsp;file system with Extent feature enabled. we could not find any tools&amp;nbsp;to read ext4 filesystems from windows . So we went&amp;nbsp;ahead and wrote this program.&lt;br /&gt;
&lt;br /&gt;
FEATURES:&lt;br /&gt;
Simple UI designed using QT4.&lt;br /&gt;
View/Read Ext2/3/4 partitions.&lt;br /&gt;
Recursively Copy the entire folder or even /&lt;br /&gt;
Support for external USB disks.&lt;br /&gt;
Support for disk and filesystem &amp;nbsp;images. For eg. Wubi users can just&lt;br /&gt;
open their root.disk file through this program.&lt;br /&gt;
LRU based Block cache for faster access.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;If you find any bugs, have any questions or comments. Please let us know.&lt;br /&gt;
&lt;br /&gt;
The executables and sources can be downloaded from&amp;nbsp;&lt;a href=&quot;http://ext2read.sf.net/&quot; style=&quot;color: #406480;&quot; target=&quot;_blank&quot;&gt;http://ext2read.sf.net&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If any of you are interested in joing this project, you can join the&lt;br /&gt;
mailing list and discuss. Join from here&lt;br /&gt;
&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/ext2read-devel&quot; style=&quot;color: #406480;&quot; target=&quot;_blank&quot;&gt;https://lists.sourceforge.net/&lt;wbr&gt;&lt;/wbr&gt;lists/listinfo/ext2read-devel&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy reading your files.&lt;br /&gt;
&lt;br /&gt;
NOTE: This program must be run as Administrator. right click the file&lt;br /&gt;
and select run as Administrator.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-size: 13px;&quot;&gt;This is not a transparent file system driver jusr a user space tool.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/988987766100737512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ext2read.blogspot.com/2010/04/ext2read-21-released.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/988987766100737512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/988987766100737512'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/2010/04/ext2read-21-released.html' title='Ext2read 2.1 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-916105947301644833.post-159734740708337649</id><published>2010-03-31T15:37:00.000-07:00</published><updated>2017-10-30T08:26:49.787-07:00</updated><title type='text'>How Ext4 Extents Work?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
How Ext4 Extents Work?&lt;br /&gt;
&lt;br /&gt;
Earlier Ext2 and Ext3 had the limitation on the size of the file. It used 32 bit block number to&amp;nbsp;access the data blocks. So that limited the maximum size of file to be 2^32 * blocksize(eg. 4k**) =&amp;nbsp;16TB*. Also the access time for large Files were slow because in had to go through lots of&amp;nbsp;indirection.Ext4 Filesystem can support very large files it has 48 bits to adress a block. Also its&amp;nbsp;uses extents to store data so access time is faster for large files.&lt;br /&gt;
&lt;br /&gt;
The information for the data blocks are stored in the i_data of the inode structure. In a system&amp;nbsp;without Extents, the first 12 entries contains the block numbers of the first 12 blocks of data. Then&lt;br /&gt;
&amp;nbsp;it contains the block number for the Indirect blocks. That block contains the array of block numbers&amp;nbsp;which point to the data. Similarly, there is Double indirect block and triple indirect block. So if&amp;nbsp;we need to get the data from a very large file, we need to go through those indirection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How to determine if the Filesystem uses Extents or indirect Mapping?&lt;br /&gt;
&lt;br /&gt;
To determine whether the inode has extent based mapping or indirect mapping. We need to look at the&amp;nbsp;EXT2_EXTENTS_FL bit in the i_flags in inode structure. The root directory always has the indirect&amp;nbsp;mapping instead of the block mapping.&lt;br /&gt;
&lt;br /&gt;
What does the Ext4 Extents Data Structure Look like and where it is stored?&lt;br /&gt;
&lt;br /&gt;
In extenxt based block mapping, the i_data of inode contains Extent structures. &amp;nbsp;There is a extent&amp;nbsp;header, Extent and Extent index. The following structures define those structures.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* This is the extent on-disk structure.&lt;br /&gt;
&amp;nbsp;* It&#39;s used at the bottom of the tree.&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
struct ext4_extent {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t ee_block; /* first logical block extent covers */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t ee_len; /* number of blocks covered by extent */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t ee_start_hi; /* high 16 bits of physical block */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t ee_start_lo; /* low 32 bits of physical block */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* This is index on-disk structure.&lt;br /&gt;
&amp;nbsp;* It&#39;s used at all the levels except the bottom.&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
typedef struct ext4_extent_idx {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t &amp;nbsp;ei_block; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* index covers logical blocks from &#39;block&#39; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t &amp;nbsp;ei_leaf_lo; &amp;nbsp; &amp;nbsp; /* pointer to the physical block of the next *&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * level. leaf or next index could be there */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;ei_leaf_hi; &amp;nbsp; &amp;nbsp; /* high 16 bits of physical block */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp; ei_unused;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&amp;nbsp;* Each block (leaves and indexes), even inode-stored has header.&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
typedef struct ext4_extent_header {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_magic; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* probably will support different formats */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_entries; &amp;nbsp; &amp;nbsp; /* number of valid entries */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_max; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* capacity of store in entries */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint16_t &amp;nbsp;eh_depth; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* has tree real underlying blocks? */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t &amp;nbsp;eh_generation; &amp;nbsp;/* generation of the tree */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
(NOTE: They are stored as little endean and Linux code has __le32 types used)&lt;br /&gt;
&lt;br /&gt;
The Extent is implemented as a B+ Tree. Only the leaf nodes has the Extent Structure. Others have&amp;nbsp;Extent Index Structure.&amp;nbsp;The extent information starts with the header and then either Extent or Extent Index.In the i_data&amp;nbsp;there is only space for header and 3 more Extent structures. If more extent information needs to be&amp;nbsp;stored, than whole bocks with extent index structures are used. In the non leaf nodes, extent index&amp;nbsp;structures are used. It contains the block number of the block where next level of nodes are stored.&lt;br /&gt;
The logic can be described by the following 2 figures.&lt;br /&gt;
&lt;br /&gt;
(Please click the images to see full image)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTagPMwL6TeWp_TxDMyyMypj91iHoZLkbvKzjpLyVJMYdyJFWw37pEM_8t62f_b2pf5fUBM8U6EyT-gezRT7TnzFPfRHRJxRqf03XVMUrpIfUsVntpIUz2hSkvEm0OfxB8Z11R1b2jNJkW/s1600/extent-i_block.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTagPMwL6TeWp_TxDMyyMypj91iHoZLkbvKzjpLyVJMYdyJFWw37pEM_8t62f_b2pf5fUBM8U6EyT-gezRT7TnzFPfRHRJxRqf03XVMUrpIfUsVntpIUz2hSkvEm0OfxB8Z11R1b2jNJkW/s640/extent-i_block.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglYG9C7Gy3zV7E1pVFOtdUfPupVvAesmswMT6nhSVyH2j80rNIZanPYNR1MGXtJBZ0NBik55HDoOuUJdrRuYtXBkPSq19qVr0WWN47WB2e8QDsA3Dhr08wvBAvScXD0lkhukEscgwmUOE/s1600/extent-idx.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglYG9C7Gy3zV7E1pVFOtdUfPupVvAesmswMT6nhSVyH2j80rNIZanPYNR1MGXtJBZ0NBik55HDoOuUJdrRuYtXBkPSq19qVr0WWN47WB2e8QDsA3Dhr08wvBAvScXD0lkhukEscgwmUOE/s640/extent-idx.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The eh_magic field in the header is always 0xf30a (little endean).&lt;br /&gt;
The eh_entries field determines the no of valid extents in that extent array.&lt;br /&gt;
The eh_depth is the depth of the B+ tree. if the depth is 0, the extents in that array are always&amp;nbsp;extent structures and not the extent index structures.&lt;br /&gt;
&lt;br /&gt;
I have implemented this feature in ext2read project (http://ext2read.sf.net).It hasn&#39;t been tested yet though for very large files.&amp;nbsp;The Ext4 also uses HTree for directory entries. I am currently studying it and implementing.&lt;br /&gt;
&lt;br /&gt;
Please let me know if you have any questions.&lt;br /&gt;
Manish Regmi (regmi dot manish at gmail dot com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/159734740708337649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ext2read.blogspot.com/2010/03/how-ext4-extents-work-earlier-ext2-and.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/159734740708337649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/159734740708337649'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/2010/03/how-ext4-extents-work-earlier-ext2-and.html' title='How Ext4 Extents Work?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTagPMwL6TeWp_TxDMyyMypj91iHoZLkbvKzjpLyVJMYdyJFWw37pEM_8t62f_b2pf5fUBM8U6EyT-gezRT7TnzFPfRHRJxRqf03XVMUrpIfUsVntpIUz2hSkvEm0OfxB8Z11R1b2jNJkW/s72-c/extent-i_block.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-916105947301644833.post-6357441217275023045</id><published>2010-03-15T08:56:00.000-07:00</published><updated>2010-03-15T08:56:12.988-07:00</updated><title type='text'>Ext4 and LVM support</title><content type='html'>It looks like the application does not work with Ext4 partitions. I am currently working on Ext4 and LVM support. I am completely redesigning the GUI now With QT4. Stay tuned....</content><link rel='replies' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/6357441217275023045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ext2read.blogspot.com/2010/03/ext4-and-lvm-support.html#comment-form' title='458 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/6357441217275023045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/6357441217275023045'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/2010/03/ext4-and-lvm-support.html' title='Ext4 and LVM support'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>458</thr:total></entry><entry><id>tag:blogger.com,1999:blog-916105947301644833.post-5042700424792862152</id><published>2010-03-12T11:35:00.000-08:00</published><updated>2010-03-12T11:35:42.998-08:00</updated><title type='text'>Ext2read Documentation</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: 12px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h2 style=&quot;color: #333333; font-family: &#39;Trebuchet MS&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: 1.6em; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; text-decoration: none;&quot;&gt;Documentation&lt;/h2&gt;&lt;div class=&quot;entry&quot; style=&quot;line-height: 1.4em;&quot;&gt;Every operating system provides facility for the persistent storage and management of data. Those data are stored in a container called files. For this purpose the operating system provides a file system that allows users to organize, manipulate and access the files.&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;To provide an efficient and convenient access to the files, the operating system imposes one or more file systems to allow data to be stored. Linux uses Ext2 (Second Extended File System) file system (it also supports tens of other file systems like fat, ntfs e.t.c.). Recently the ext2 file system has journaling support and called Ext3 file system (though the most data structures are same).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;This tutorial will try to show you what is inside the hard disk. What is inside the Ext2/3 file system? And how our program works?&lt;a href=&quot;http://ext2read.sourceforge.net/old/hdisk.htm&quot; style=&quot;color: #0066cc; text-decoration: none;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://ext2read.sourceforge.net/old/hdisk.htm&quot; style=&quot;color: #0066cc; text-decoration: none;&quot;&gt;&lt;/a&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal; line-height: normal;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;h2 style=&quot;color: #333333; font-family: &#39;Trebuchet MS&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: 1.6em; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; text-decoration: none;&quot;&gt;Inside Hard Disk&lt;/h2&gt;&lt;/b&gt;This part of the text will tell you the organization of the hard disk, how the partition information is stored in a dos/windows based systems. This text will also tell us how to retrieve the data from the disk and how ext2read does that.&lt;a href=&quot;http://ext2read.sourceforge.net/old/ext2fs.htm&quot; style=&quot;color: #0066cc; text-decoration: none;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Trebuchet MS&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: x-large;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 19px; line-height: normal;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 12px; font-weight: normal; line-height: 16px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: normal;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry&quot; style=&quot;line-height: 1.4em;&quot;&gt;Hard Disks are the most popular storage devices. We cannot imagine a computer without a hard disk. Hard disks offer high capacity and low costs.&lt;br /&gt;
&lt;strong&gt;The organization of disk.&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.5in;&quot;&gt;In a disk, the data is stored in the surface of a circular disc called platters. The platters are double sided and the data is read by a read/write head. So, there are two heads per platter. There are many of them and each of them is divided into circular rings called tracks. The collection of tracks that are exactly above or below the other tracks is called a cylinder. Again each track is divided into a number of sectors (usually 64). Thus, sectors are the smallest addressable unit in disk. The disk can also be viewed as a large array of sectors.&lt;/div&gt;&lt;strong&gt;Addressing the disk sectors.&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.5in;&quot;&gt;The data in the disk can be addressed in mainly two ways. They are the CHS addressing and the LBA addressing.&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.5in;&quot;&gt;The CHS (cylinder/head/sector) addressing uses the exact cylinder number, sector number and the head number to address a disk. The PC bios rely on this technique for booting the OS. The bios interrupt 0×13 function 0×2 (for details see Ralph brown’s interrupt list) can be used to read the disk using CHS addressing.&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.5in;&quot;&gt;In the LBA (logical block addressing), the disk is viewed as a large array of sectors. The sector to address is number of sectors from the starting of disk. The first sector is 0. For reading the disk using LBA we use bios interrupt 0×13, function 0×42 (also called IBM’s int 13 extensions).&lt;/div&gt;&lt;strong&gt;Reading the disk sectors&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;The disk sectors can be in many ways. Firstly, we can use the Operating System’s system call facility like open (), read () etc. Secondly, we can use IO instructions to read and write the IO ports of the disk (0×1f0 – 0×1f7 for 1&lt;sup&gt;st&lt;/sup&gt;&amp;nbsp;IDE). And thirdly using the bios (or DOS) interrupts.&lt;/div&gt;&lt;strong&gt;Reading disk sectors from Dos&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;We can use bios interrupts to read the sectors in real mode OS like DOS. After inserting the values in the general purpose registers (function no. in AX, ) we call int 0×13. After returning from interrupt it will fill the buffer by sector’s content.&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;A C language example.&lt;/div&gt;BOOL ReadSect(BYTE disk, int nsects,DWORD lsects,void* data)&lt;br /&gt;
&lt;div style=&quot;text-indent: 0.25in;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;union REGS iregs, oregs;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;struct SREGS sregs;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.h.ah = 0×02;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.h.al = nsects;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.x.bx = FP_OFF (data);&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;sregs.es = FP_SEG (data);&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.h.ch = (BYTE) track;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.h.cl = (BYTE) sector;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.h.dh = (BYTE) head;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;iregs.h.dl = disk;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;int86x (0×13, &amp;amp;iregs, &amp;amp;iregs, &amp;amp;sregs);&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;if (iregs.x.cflag)&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;Return FALSE;&lt;/div&gt;&lt;div style=&quot;margin-left: 0.25in; text-indent: 0.75in;&quot;&gt;Else&lt;/div&gt;&lt;div style=&quot;margin-left: 0.75in; text-indent: 0.75in;&quot;&gt;Return TRUE;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;The above method has limitations of reading up to 1034 cylinders so we should use extend read method. See our source code for details. Bios and DOS interrupt details can be found on Ralph Brown’s interrupt list.&lt;/div&gt;&lt;strong&gt;Reading sectors from UNIX and Windows.&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;In UNIX (and UNIX like systems) everything is file, so a disk is a file and is identified by a block device file /dev/hda (varies according to UNIX implementation). It can be Opened, read written and seeked as a simple file.&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;In Windows (NT), reading disk is similar to UNIX. The disk is identified as \\\\.\\PhysicalDrive0 and partitions as \\\\.\\c:. We simply open a file using CreateFile()(win32 API), read using ReadFile(), and seek using SetFilePointer(). Here are the examples.&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;/* Unix Implementation (User mode)*/&lt;/div&gt;BOOL ReadSect(BYTE disk, int nsects,DWORD lsects,void* data)&lt;br /&gt;
{&lt;br /&gt;
int desc;&lt;br /&gt;
desc = open(“/dev/hda”, O_READ); /* file name differs from one implementation to other */&lt;br /&gt;
lseek (desc, lsects*512, SEEK_SET);&lt;br /&gt;
read (desc, data, nsects*512);&lt;br /&gt;
}&lt;br /&gt;
&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;/* Windows Implementation */&lt;/div&gt;BOOL ReadSect(BYTE disk, int nsects,DWORD lsects,void* data)&lt;br /&gt;
{&lt;br /&gt;
&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;HANDLE hDevice;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;DWORD dummy;&lt;/div&gt;&lt;div style=&quot;margin-left: 1in;&quot;&gt;hDevice = CreateFile(“////.//PhysicalDrive0”, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL);&lt;/div&gt;if(!hDevice)&lt;br /&gt;
&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;return FALSE;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;SetFilePointer(hDevice, (lsects*512), NULL, FILE_BEGIN);&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;if(!ReadFile(hDevice, data, (512*nsects), &amp;amp;dummy, NULL))&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;return FALSE;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;CloseHandle(hDevice);&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;Return TRUE;&lt;/div&gt;}&lt;br /&gt;
&lt;strong&gt;The Partition structure&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;In Dos like system, the partition table entry is stored in a data structure called Master Boot Record (MBR). MBR is the most important data structure in the disk. It lies on the first sector of the disk and is created by disk partitioning programs like fdisk. It is the most critical part of the disk. If it is damaged or erased accidentally, all the data will be lost.&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;The MBR structure contains of three parts: the master boot code, partition table and the signature. The master boot code is a small program which scans the partition table for the active partition, finds the starting sector of the active partition, loads the boot sector from the active partition to the memory and transfers the execution flow to the loaded code.&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;The last two bytes of the MBR is a magic number ‘0×55AA’ which is called the signature.&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;The information of the partitions lies in the Partition table entry. It starts at 446 bytes and is 64 bytes long. It contains 4 partition table entries each 16 bytes long. Thus, there can be only four primary partitions in a disk. The fields of the partition structure are given below in the form of C structure.&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;Struct partition {&lt;/div&gt;&lt;div style=&quot;margin-left: 0.5in; text-indent: 0.5in;&quot;&gt;BYTE bootIndicator;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;BYTE startingHead;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;unsigned startingSector :6;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;unsigned startingCylinder:10;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;BYTE systemId;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;BYTE endingHead;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;unsigned endingSector:6;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;unsigned endingCylinder:10;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;DWORD relativeSectors;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;DWORD totalSectors;&lt;/div&gt;&lt;div style=&quot;text-indent: 0.5in;&quot;&gt;};&lt;/div&gt;&lt;ul style=&quot;list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0in; margin-left: 0px; margin-top: 0in; padding-bottom: 0px; padding-left: 10px; padding-right: 0px; padding-top: 0px; text-indent: -10px;&quot; type=&quot;disc&quot;&gt;&lt;li style=&quot;margin-bottom: 8px; margin-left: 10px; margin-right: 0px; margin-top: 7px;&quot;&gt;bootIndicator (offset 0×01be):- The boot indicator tells if the partition is active or not. The value of 0×80 denotes active and 0×00 inactive (There must be only one active partition).&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px; margin-left: 10px; margin-right: 0px; margin-top: 7px;&quot;&gt;startingHead (offset 0×01bf), startingSector (offset 0×01c1), startingCylinder (offset 0×01c3):- The startingHead, startingSector and startingCylinder gives the starting position of the partition in chs mode.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px; margin-left: 10px; margin-right: 0px; margin-top: 7px;&quot;&gt;systemId (offset 0×01c2):- This field gives the type of the partition. E.g. 0×83 for ext2 partition.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px; margin-left: 10px; margin-right: 0px; margin-top: 7px;&quot;&gt;endingHead (offset 0×01c4), endingSector (offset 0×01c5), endingCylinder (offset 0×01c6):- These fields give the ending position of the partition.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px; margin-left: 10px; margin-right: 0px; margin-top: 7px;&quot;&gt;RelativeSectors (offset 0×01c6):- Offset from the beginning of the disk in sectors.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px; margin-left: 10px; margin-right: 0px; margin-top: 7px;&quot;&gt;totalSectors (offset 0×01ca):- The total sectors in the partition.&lt;/li&gt;
&lt;/ul&gt;Among the four primary partitions one is the extended partition and contains the logical partitions. The Partition Table Entry in the Extended Partition points to the MBR like structure called the Extended Boot Record (EBR). There is a EBR for each logical partition. Among the four Partition table entry, first entry points to the boot sector of the logical partition. Second entry points to the EBR of the second logical partition. Thus, the logical partitions are the linked lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;a href=&quot;http://ext2read.sourceforge.net/old/ext2fs.htm&quot; style=&quot;color: #0066cc; text-decoration: none;&quot;&gt;&lt;/a&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal; line-height: normal;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;h2 style=&quot;color: #333333; font-family: &#39;Trebuchet MS&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: 1.6em; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; text-decoration: none;&quot;&gt;Inside Ext2/3 File System&lt;/h2&gt;&lt;/b&gt;This part of the text will describe about the layout of the ext2/3 file systems and the data structures it uses. We will also look how ext2read uses those data.&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Trebuchet MS&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: x-large;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 19px; line-height: normal;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 12px; font-weight: normal; line-height: 16px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: normal;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry&quot; style=&quot;line-height: 1.4em;&quot;&gt;In the MBR/EBR the value for the Ext2/Ext3 partition is ‘0×83’. The Ext2/Ext3 file system contains several data structures for keeping the file system information. These data structures are also known as metadata structures. The important data structures contained in the Ext2/Ext3 File System are boot block, super block, descriptor table and inode table.&lt;br /&gt;
&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;The Boot Block&lt;/strong&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The boot block of the Ext2/Ext3 filesystem is 1024 bytes long and does not contain any useful information (as far as I know. I would like to know if it contains any.).&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;The Super Block&lt;/strong&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The Super Block contains the information of the whole file system. It contains and the metadata like size, total inodes e.t.c. The Ext2/Ext3 super block has the following components.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;struct EXT2_SUPER_BLOCK&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;{&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_inodes_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_blocks_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_r_blocks_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_free_blocks_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_free_inodes_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_first_data_block;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_log_block_size;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_log_frag_size;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_blocks_per_group;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_frags_per_group;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_inodes_per_group;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_mtime;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_wtime;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_mnt_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 1in; text-indent: -1in;&quot;&gt;WORD s_max_mnt_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_magic;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_state;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_pad;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_minor_rev_level;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_lastcheck;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_checkinterval;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_creator_os;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_rev_level;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_def_resuid;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_def_regid;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;/* for EXT2_DYNAMIC_REV superblocks only */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_first_ino;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_inode_size;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_block_group_nr;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_feature_compat;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_feature_incompat;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_feature_ro_compat;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;BYTE s_uuid[16];&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;char s_volume_name[16];&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;char s_last_mounted[64];&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_algorithm_usage_bitmap;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;BYTE s_prealloc_blocks;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;BYTE s_prealloc_dir_blocks;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD s_padding1;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD s_reserved[204];&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;};&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_inodes_count :- Stores the total no of inodes.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_blocks_count:- Stores the total no of blocks.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_r_blocks_count:- Stores the total no of blocks reserved for exclusive use of superuser.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_free_blocks_count:- Stores the total no of free blocks.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_free_inodes_count:- Stores the total no of free inodes in the file System.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_first_data_block:- Position of the first data block.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_log_block_size:- used to compute logical block size in bytes. E.g if it is 1, block size is 1024. if it is 2, block size is 2048.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_log_frag_size:- used to compute logical fragment size.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_blocks_per_group:- Total number of blocks contained in the group.(see groups later.).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_frags_per_group:- Total number of fragments in a group.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_inodes_per_group:- Total number of inodes in a group.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_mtime:- Time at which the last mount was performed. The time is stored in UNIX format as defined by posix.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_wtime:- Time at which the last write was performed. The time is stored in UNIX format as defined by posix.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_mnt_count:- The total number of time the fs system has been mounted in r/w mode without having checked. The Linux OS uses this value to automatically check the file system when the specified time reaches. The Specified time is s_max_mnt_count.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_max_mnt_count:- The max no of times the fs can be mounted in r/w mode before a check must be done.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_magic:- A number that identifies the file System. (eg. 0xef53 for ext2).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_state; Gives the state of fs (eg. 0×001 is Unmounted cleanly). The Linux OS uses this value to determine.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_pad:- Unused.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_minor_rev_level:- Contains the minor number for the revision level.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_lastcheck; The time of last File System check performed.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_checkinterval; The max possible time between checks on the file system.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_creator_os:- Owner Operating System of the file system. (linux=0, hurd=1, masix=2, FreeBSD=3, Lites=4 etc.).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_rev_level:- Revision level of the file system. (0 -&amp;gt; original format, 1 -&amp;gt; v2 format with dynamic inode sizes.).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_def_resuid:- Default uid for reserved blocks.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_def_regid:- Default gid for reserved blocks.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_first_ino:- First non-reserved inode.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_inode_size:- Size of inode structure.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_block_group_nr:- Block group no of this super block. There is another Super Block in File System for the rescue of damaged file system.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_feature_compat:- Compatible feature set.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_feature_incompat:- Incompatible feature set.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_feature_ro_compat:- Read only compatible feature set.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_uuid:- 128-bit uuid for volume.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_volume_name:- volume name (e.g. /, /boot etc.).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;s_last_mounted:- Directory where last mounted.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Reading the super block is pretty easy. Just read the starting sector +2 of the filesystem.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Group Descriptor&lt;/strong&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The ext2/ext3 file system is divided into groups called block group. The number of groups can be derived from the formula, block_group = s_blocks_count/s_blocks_per_group.&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The attributes of the group is identified by group descriptor. There is an array of group descriptors describing each group. The group descriptor table can be found at the first block (block-1) following the superblock structure of the file system (block no starts from 0.). The structure of the group descriptor is as follows.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;struct EXT2_GROUP_DESC&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;{&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD bg_block_bitmap;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD bg_inode_bitmap;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD bg_inode_table;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD bg_free_blocks_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD bg_free_inodes_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD bg_used_dirs_count;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD bg_pad;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD bg_reserved[3];&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;};&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_block_bitmap:- The block which contains the block bitmap for the group.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_inode_bitmap:- The block contains the inode bitmap for the group.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_inode_table:- The block contains the inode table first block (the starting block of the inode table.).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_free_blocks_count:- Number of free blocks in the group.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_free_inodes_count:- Number of free inodes in the group.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_used_dirs_count:- Number of inodes allocated to the directories.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_pad:- Padding (reserved).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;bg_reserved:- Reserved.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Block Bitmap&lt;/strong&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The block bitmap represents the status of each block. It shows that the block is used (1) or free (0). E.g. 1001… show block 1 is used, block 2 is free, block 3 is free etc. Its correct location can be found by looking at bg_block_bitmap.&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;It is used to determine which block is free and which is used. It is used when making or copying files (Ext2read does not currently support writing to file system.).&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Inode Bitmap&lt;/strong&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The Inode Bitmap works in the similar way as the block bitmap. The inode bitmap represents the status of each inode. It determines whether the inode is used (1) or free (0). E.g. 1001… show inode 0 is used, inode 1 is free, inode 2 is free etc. Its correct location can be found by looking at bg_inode_bitmap.&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Inode Table&lt;/strong&gt;&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;In Ext2/Ext3 file system, each file is identified by an inode. Each file has its own inode entry. The File Systems a table of all the inodes in the file system called the inode table. Furthermore, each block group has its own inode table. The starting location for the inode table can be identified by looking at bg_inode_table.&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The inode gives the attributes like mode, size, uid, creation time etc. of the file.&lt;/div&gt;&lt;div align=&quot;justify&quot; class=&quot;MsoNormal&quot;&gt;The structure of the inode is as follows.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;struct EXT2_INODE&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;{&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD i_mode; /* File mode */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD i_uid; /* Low 16 bits of Owner Uid */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_size; /* Size in bytes */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_atime; /* Access time */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_ctime; /* Creation time */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_mtime; /* Modification time */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_dtime; /* Deletion Time */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD i_gid; /* Low 16 bits of Group Id */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD i_links_count; /* Links count */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_blocks; /* Blocks count */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_flags; /* File flags */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD osd1; /* OS dependent 1 */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_block[EXT2_N_BLOCKS];/* Pointers to blocks */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_generation; /* File version (for NFS) */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_file_acl; /* File ACL */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_dir_acl; /* Directory ACL */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD i_faddr; /* Fragment address */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;BYTE l_i_frag; /* Fragment number */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;BYTE l_i_fsize; /* Fragment size */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD i_pad1;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD l_i_uid_high; /* these 2 fields */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;WORD l_i_gid_high; /* were reserved2[0] */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;DWORD l_i_reserved2;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;};&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_mode:-&lt;/strong&gt;&amp;nbsp;It describes the format and the access rights of the file. The result obtained by masking the value with EXT2_S_IFMT(0xF000) gives the file type. When it is masked with EXT2_IRWXU(0×01c0) gives the user access, when it is masked with EXT2_IRWX(0×0038) gives group access and when masked with EXT2_IRWXO(0×0007) gives others rights.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_uid:-&lt;/strong&gt;&amp;nbsp;The id of the owner.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_size:-&amp;nbsp;&lt;/strong&gt;The size of the file in bytes.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_atime:-&amp;nbsp;&lt;/strong&gt;The last access time of the file. The time is number of seconds since 1st january 1970.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_ctime:-&lt;/strong&gt;&amp;nbsp;The creation time of the file. The time is number of seconds since 1st january 1970.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_mtime:-&amp;nbsp;&lt;/strong&gt;The last modification time of the file. The time is number of seconds since 1st january 1970.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_dtime:-&lt;/strong&gt;&amp;nbsp;deletion time of the file. The time is number of seconds since 1st january 1970.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_gid:-&lt;/strong&gt;&amp;nbsp;The group associated with this file.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_links_count:-&lt;/strong&gt;&amp;nbsp;The number of times the inode is refered to.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_blocks:-&amp;nbsp;&lt;/strong&gt;The number of blocks reserved for the file. The block is not the size of the block but the sector size ie. 512 bytes.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;i_flags:- The behaviour flags of the file system.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;osd1:-&amp;nbsp;&lt;/strong&gt;The OS dependent value.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_block:-&amp;nbsp;&lt;/strong&gt;This array is used to locate the data of the file. The first twelve entries are the direct data blocks ie, they point directly to the data.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The 13th field is the indirect block. It points to the block which has the address of data blocks. The block holds 1 block of entries.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The 14th field is the bi- indirect block. It points to the block holding indirect entries.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The 15th field is the triple indirect block. It points to the block holding bi- indirect entries.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_generation:-&lt;/strong&gt;&amp;nbsp;defines the file version. It is used by NFS.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_file_acl:-&lt;/strong&gt;&amp;nbsp;The access control flags associated with the file.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;i_dir_acl:-&amp;nbsp;&lt;/strong&gt;The access control flags associated with the directory.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The directory structure&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The data blocks of the directory points to the directory structure. The directory structure of Ext2 is:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;struct EXT2_DIR_ENTRY {&lt;br /&gt;
DWORD inode; /* Inode number */&lt;br /&gt;
WORD rec_len; /* Directory entry length */&lt;br /&gt;
WORD name_len; /* Name length */&lt;br /&gt;
char name[EXT2_NAME_LEN]; /* File name */&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;};&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;The directory entries are the array of struct EXT2_DIR_ENTRY. The size of the each structure is given by the rec_len.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;inode:- The inode number of the entry.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;rec_len:- The length of the record.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;name_len:- The length of the name of the file.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;name:- The name of the file. The string is not NULL terminated.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/5042700424792862152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ext2read.blogspot.com/2010/03/ext2read-documentation.html#comment-form' title='166 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/5042700424792862152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/5042700424792862152'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/2010/03/ext2read-documentation.html' title='Ext2read Documentation'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>166</thr:total></entry><entry><id>tag:blogger.com,1999:blog-916105947301644833.post-1606853582350100920</id><published>2010-03-12T11:31:00.001-08:00</published><updated>2010-03-12T11:31:49.981-08:00</updated><title type='text'>Ext2read 2.0</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; font-size: 12px; line-height: 16px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
The newer version of Ext2read is released. It is now an explorer like application from where you can read ext2/ext3 partitions.&lt;br /&gt;
&lt;strong&gt;&lt;a href=&quot;https://sourceforge.net/project/showfiles.php?group_id=96464&amp;amp;package_id=103072&amp;amp;release_id=437093&quot; style=&quot;color: #0066cc; text-decoration: none;&quot; title=&quot;ext2read 2.0 beta download&quot;&gt;Download the codes and executables.&lt;/a&gt;&lt;/strong&gt;</content><link rel='replies' type='application/atom+xml' href='http://ext2read.blogspot.com/feeds/1606853582350100920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ext2read.blogspot.com/2010/03/ext2read-20.html#comment-form' title='265 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/1606853582350100920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/916105947301644833/posts/default/1606853582350100920'/><link rel='alternate' type='text/html' href='http://ext2read.blogspot.com/2010/03/ext2read-20.html' title='Ext2read 2.0'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/15014625685473657023</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>265</thr:total></entry></feed>