Acknowledgments | p. xiii |
Introduction | p. 1 |
Gnu/Linux and File Systems | p. 2 |
Purpose of this Book | p. 3 |
Who Should Read this Book | p. 4 |
What You Should Know Before Reading this Book | p. 4 |
What this Book Contains | p. 4 |
How to Use this Book | p. 4 |
Where to Find More Information | p. 5 |
Suggestions, Comments | p. 5 |
Open Source--Implications For a Modern Operating System | p. 5 |
History of Linux | p. 6 |
Functionality Provided by Linux Today | p. 7 |
Novelties in the 2.4 Kernel | p. 8 |
Compiling a Kernel | p. 11 |
Source Code Tree Structure | p. 12 |
The arch/ Directory | p. 17 |
The drivers/ Directory | p. 17 |
The fs/ Directory | p. 17 |
The include/ Directory | p. 17 |
The ipc/ Directory | p. 17 |
The init/ Directory | p. 17 |
The lib/ Directory | p. 18 |
The kernel/ Directory | p. 18 |
The mm/ Directory | p. 18 |
The net/ Directory | p. 19 |
Compiling It | p. 19 |
The GNU gcc Compiler | p. 20 |
Coding Conventions | p. 20 |
Architecture Dependencies | p. 21 |
What's a File System? | p. 23 |
General Aspects of a File System | p. 24 |
The Hierarchy of the File Structure | p. 25 |
Objects in a File System | p. 28 |
Buffers, Caches, and Memory Garbage Collection | p. 29 |
The Buffer Cache | p. 29 |
The bdflush Kernel Daemon | p. 32 |
Kswapd | p. 33 |
File System Objects | p. 33 |
Files | p. 35 |
File Functions | p. 37 |
Inodes | p. 40 |
Functions on Inodes | p. 45 |
File Systems | p. 49 |
Names or dentrys | p. 52 |
Dentry Structure | p. 52 |
Dentry Functions | p. 55 |
The Linux Super-Block | p. 57 |
The Super-Block Structure | p. 57 |
Super-Block Functions | p. 60 |
Performance Issues and Optimization Strategies | p. 63 |
Raw I/O | p. 64 |
Process Resource Limits | p. 65 |
Extent-Based Allocation (General) | p. 66 |
Block-Based Allocation (General) | p. 67 |
The Transaction-Processing or Database Issue of Safety | p. 68 |
Advantages of Journaling over Non-Journaling | p. 69 |
The Linux VFS | p. 75 |
General Concepts | p. 76 |
The VFS Source Code | p. 76 |
How VFS Works | p. 78 |
Source Files include/linux/fs.h (2.4.3) | p. 86 |
Source file fs/ext2/super.c (2.4.3) | p. 113 |
Source file fs/ext2/file.c (2.4.3) | p. 130 |
Source Code open_namei() function from fs/namei.c | p. 132 |
LVM (Logical Volume Manager) | p. 137 |
Linux LVM Introduction | p. 138 |
LVM Benefits | p. 141 |
How does LVM work? | p. 141 |
LVM Internals | p. 142 |
Source Code include/linux/lvm.h | p. 146 |
RAID with Linux | p. 163 |
PCI Controllers | p. 164 |
SCSI-to-SCSI Controllers | p. 165 |
Software RAID | p. 166 |
Striping | p. 168 |
RAID 0 Configuration | p. 168 |
RAID 1 Configuration | p. 169 |
Limits Of RAID | p. 170 |
Recovering from RAID Device Failure | p. 171 |
Case A | p. 172 |
Case B | p. 173 |
The Second Extended File System (ext2) | p. 181 |
New Features | p. 182 |
Standard ext2fs Features | p. 182 |
Advanced ext2fs Features | p. 182 |
Directories | p. 183 |
Blocks | p. 184 |
The Super-Block | p. 186 |
The Ext2fs Library | p. 188 |
The Ext2fs Tools | p. 189 |
The Inode in ext2fs | p. 192 |
The ext2fs Super-block | p. 192 |
The ext2 Group Descriptor | p. 193 |
Free Blocks Count, Free Inodes Count, Used Directory Count | p. 194 |
Changing the Size of a File in an ext2 File System | p. 194 |
Group Descriptors | p. 199 |
Bitmaps | p. 200 |
Inodes | p. 200 |
Directories | p. 202 |
Allocation algorithms | p. 203 |
Error Handling | p. 204 |
Source Code include/linux/ext2_fs.h | p. 205 |
IBM's JFS Journaling File System for Linux | p. 219 |
The Main JFS Data Structures and Algorithms | p. 220 |
Super-blocks: Primary Aggregate Super-block and Secondary Aggregate Super-block | p. 220 |
Inodes | p. 220 |
Standard Administrative Utilities | p. 221 |
How JFS Is Set up at Boot Time | p. 222 |
Block Allocation Map | p. 222 |
Inode Allocation Map | p. 223 |
AG Free Inode List | p. 224 |
IAG Free List | p. 224 |
Fileset Allocation Map Inodes | p. 224 |
Design Features that Distinguish JFS from Other File Systems | p. 225 |
JFS's Further Extensive Use of B+-Trees | p. 226 |
Leaf Nodes | p. 227 |
Internal Nodes | p. 227 |
Variable Block Size | p. 228 |
Directory Organization | p. 228 |
JFS's Support for both Sparse and Dense Files | p. 228 |
Aggregates and Filesets | p. 229 |
Files | p. 229 |
Directory | p. 229 |
Logs | p. 230 |
The File Structure and Access Control | p. 230 |
ReiserFS for Linux | p. 233 |
The File System Name Space | p. 234 |
Block Alignments of File Boundaries | p. 235 |
Balanced Trees and Large File I/O | p. 236 |
Serialization and Consistency | p. 237 |
Tree Definitions | p. 238 |
Buffering and the Preserve List | p. 241 |
ReiserFS Structures | p. 241 |
Using the Tree to Optimize Layout of Files | p. 245 |
Physical Layout | p. 245 |
Node Layout | p. 245 |
Installing and Configuring ReiserFS on a Linux Kernel | p. 251 |
Linux-2.2.X Kernels | p. 251 |
Linux-2.4.0 to 2.4.2 | p. 253 |
XFS | p. 255 |
The XFS Implementation | p. 257 |
Log Manager | p. 258 |
Buffer Cache Manager | p. 259 |
Lock Manager | p. 259 |
Space Manager | p. 259 |
Attribute Manager | p. 260 |
Name Space Manager | p. 261 |
Administration of XFS File Systems | p. 262 |
XFS Structures and Methods | p. 262 |
Inode Data Structure | p. 262 |
Inode Life Cycle | p. 263 |
Inode Allocation | p. 264 |
Inode In-line Data/Extents/B-tree Root | p. 265 |
Inode locking | p. 267 |
Inode Transactions and Logging | p. 267 |
Inode Flushing | p. 268 |
Inode Recycling | p. 269 |
The XFS Super-block Structures and Methods | p. 269 |
The Super-block Buffer | p. 270 |
Super-block Management Interfaces | p. 271 |
Structures on Disk | p. 272 |
Allocation Group Header | p. 274 |
Data Block Freelist | p. 275 |
Inode Table | p. 275 |
Data and Attribute Block Representation | p. 277 |
File System Structure | p. 278 |
Buffering vs. Allocation | p. 278 |
XFS Availability and Release Caveats | p. 279 |
Working with XFS | p. 279 |
Partitioning | p. 279 |
The Software-RAID HOWTO | p. 281 |
Table of Contents | p. 282 |
Introduction | p. 283 |
Why RAID? | p. 285 |
Hardware issues | p. 288 |
RAID setup | p. 290 |
Testing | p. 302 |
Reconstruction | p. 303 |
Performance | p. 304 |
Credits | p. 306 |
References | p. 307 |
The Loopback Root Filesystem HOWTO | p. 313 |
Table of Contents | p. 314 |
Introduction | p. 315 |
Principles of Loopback Devices and Ramdisks | p. 315 |
How To Create a Loopback Root Device | p. 317 |
Booting the System | p. 324 |
Other Loopback Root Device Possibilities | p. 325 |
Linux Partition HOWTO | p. 327 |
Table of Contents | p. 328 |
Introduction | p. 328 |
What is a partition anyway? | p. 329 |
What Partitions do I need? | p. 332 |
An example | p. 336 |
How I did it on my machine | p. 337 |
Index | p. 339 |
Table of Contents provided by Syndetics. All Rights Reserved. |