Off-line Direct Disk Access System CSE 237A Alan Del Tredici adeltred@ucsd.edu
Motivation Number of portable digital devices increasing Audio recorders Cameras Currently, data transferred to PC for Editing Storage / media transfer Network portal Requires 1. Boot PC 2. Transfer the data 3. Shut down PC
Proposed Solution Direct transfer to disk without booting PC Offline Access Module
Project Goals Demonstrate off-line disk access procedure Write data to disk Without standard file I/O calls Without corrupting existing data Retrieve data via standard file I/O Proof-of-concept stage is software only
Development Choices Chose to use Linux as native OS Widely used, source code available, and free! Use “Second Extended File System” (Ext2) Unix-style file system De facto standard for Linux Basis from which other file systems extend
Development Choices (cont.) Make use of disk partitions Make 1 large disk look like several small Provides efficiency, modularity In Linux, floppy-disk accessed just like a hard-disk partition Use floppy disk as test target No change in concept Safer for development!
Off-line Access Strategy: 1. Directly access disk to determine existing file system configuration 2. Add data, maintaining file system structure. 3. When booted, Linux will find the data
Development Approaches Write code to directly access disk Linux has strong protection – user can’t access hardware! Linux provides raw block read/write calls… Want access to device in terms of file-system components This is provided by libext2fs. Basic functions to access file system structures Still requires us to know how to use the pieces
Ext2 – Partition Components Boot sector 1 or more Groups Super block Group descriptor Block usage map I-node usage map I-node table Data blocks Redundant copies Disk is an array of “blocks” – organized by these conventions
Ext2 – Boot Sector Boot sector 1 or more Groups Boot code Super block Group descriptor Block usage map I-node usage map I-node table Data blocks Boot code May be unused Partition tables List start of partitions
Ext2 – Super Block Boot sector 1 or more Groups Basic parameters Group descriptor Block usage map I-node usage map I-node table Data blocks Basic parameters Block size (1 kB typ) Block counts Version info
Ext2 – Group Descriptor Boot sector 1 or more Groups Super block Group descriptor Block usage map I-node usage map I-node table Data blocks Map & table locations Handy counters
Ext2 – Usage Maps Boot sector 1 or more Groups Super block Group descriptor Block usage map I-node usage map I-node table Data blocks Bit-maps where each bit indicates used/unused item A 1 kB block holds 8k bits Supports 8,192 entries
Ext2 – Index nodes (i-nodes) Boot sector 1 or more Groups Super block Group descriptor Block usage map I-node usage map I-node table Data blocks Ext2 i-node = 128 bytes struct ext2_inode { U32 size U32 Block count U32 Time stamps : U32 Block pointer[0] U32 Block pointer[1] U32 Block pointer[11] U32 Indirect block pointer U32 2x-indirect block pointer U32 3x-indirect block pointer }
Ext2 – I-node Block Pointers
Ext2 – Data Blocks Boot sector 1 or more Groups Super block Group descriptor Block usage map I-node usage map I-node table Data blocks All remaining blocks in the group
Off-line Access Example Initialized Disk: I-node table: 23 blocks Root directory: Directory is a type of ‘file’ Index to other i-nodes by name Root = i-node #2 “lost+found” reserve: 12 blocks Block map I-node map Group data Super block Boot block : 2 3 1 4 5 27 28 40 41 29 1439 I-node table Root directory “lost+found” 1st free data block
Off-line Access Steps Read configuration information Super block Block size (1 kbyte) I-node count (184 on fd) Block count (1440 on fd) Group block Location of maps Location of i-node table Block map I-node map Group data Super block Boot block : 2 3 1 4 5 27 28 40 41 29 1439 I-node table Root directory “lost+found” 1st free data block
File Creation Read the i-node and block maps Find the next available i-node and data block Block map I-node map Group data Super block Boot block : 2 3 1 4 5 27 28 40 41 29 1439 I-node table Root directory “lost+found” 1st free data block
File Creation (continued) Add entry to specified directory File name File type I-node number Perform i-node “accounting” Mark bit in i-node map Block map I-node map Group data Super block Boot block : 2 3 1 4 5 27 28 40 41 29 1439 I-node table Root directory “lost+found” 1st free data block
File Creation (continued) Write data to data blocks Update i-node with block numbers Allocate indirect blocks from data block area as needed Block map I-node map Group data Super block Boot block : 2 3 1 4 5 27 28 40 41 29 1439 I-node table Root directory “lost+found” Our data!
File Creation (continued) Finish configuring the i-node Set permissions Size of data written Time stamp When Linux reads this file system, our data will appear! Block map I-node map Group data Super block Boot block : 2 3 1 4 5 27 28 40 41 29 1439 I-node table Root directory “lost+found” Our data!
Accomplishments Met the technical objectives Data stored to hard disk without file I/O calls Linux can later retrieve data Documented pertinent Ext2 operation Extracted details from source code & by testing Created working proof-of-concept application Available on web site: http://ieng9.ucsd.edu/~adeltred/offline_access.htm
Future Work Test on hard disk with large files Implement on stand-alone hardware Atmel AT89C5132: A mass storage device controlling data exchange between various Flash modules, HDD and CD-ROM.
Off-line Disk Access Questions?
Off-line Disk Access Thank you!