\relax \@writefile{toc}{\contentsline {section}{\numberline {0.1}Status Of This Document}{5}} \@writefile{toc}{\contentsline {chapter}{\numberline {1}Overview}{6}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {1.1}Disorganized List of Features}{6}} \@writefile{toc}{\contentsline {section}{\numberline {1.2}Where to get it}{7}} \newlabel{where}{{1.2}{7}} \@writefile{toc}{\contentsline {section}{\numberline {1.3}Support}{7}} \@writefile{toc}{\contentsline {section}{\numberline {1.4}Contributing}{7}} \@writefile{toc}{\contentsline {chapter}{\numberline {2}Goals}{8}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {2.1}First Phase Goals}{8}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}Backup Server}{8}} \@writefile{toc}{\contentsline {section}{\numberline {2.2}Second Phase Goals}{9}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}`Transparent' or `Overlay' Filesystem}{9}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.2}Quota Support}{9}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.3}Variable-length Hashing}{10}} \newlabel{hash-fubar}{{2.2.3}{10}} \@writefile{toc}{\contentsline {section}{\numberline {2.3}Non-Goals}{10}} \newlabel{not-goals}{{2.3}{10}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}Source Code Repository}{10}} \@writefile{toc}{\contentsline {chapter}{\numberline {3}Terminology}{11}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {3.1}Files}{11}} \@writefile{toc}{\contentsline {section}{\numberline {3.2}Host Filesystem or Physical Filesystem}{11}} \@writefile{toc}{\contentsline {chapter}{\numberline {4}System Architecture}{12}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {chapter}{\numberline {5}Database Operations}{13}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{primitives}{{5}{13}} \@writefile{toc}{\contentsline {section}{\numberline {5.1}Metadata Operations}{13}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.1}POSIX Metadata Operations}{13}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1.2}{\tt fakefs}{} Metadata Operations}{14}} \@writefile{toc}{\contentsline {section}{\numberline {5.2}Data Operations}{14}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.1}POSIX Data Operations}{14}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2.2}{\tt fakefs}{} Data Operations}{15}} \@writefile{toc}{\contentsline {chapter}{\numberline {6}Berkeley DB: The Least of the Evil}{16}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {6.1}DB: Database Babysitting}{16}} \@writefile{toc}{\contentsline {section}{\numberline {6.2}Running out of Space}{16}} \@writefile{toc}{\contentsline {section}{\numberline {6.3}If programmers built cars\dots }{17}} \@writefile{toc}{\contentsline {section}{\numberline {6.4}Interactions between Transaction and non-Transaction Environment}{17}} \@writefile{toc}{\contentsline {section}{\numberline {6.5}{\tt LD\_{}PRELOAD}{} Hacking}{17}} \@writefile{toc}{\contentsline {chapter}{\numberline {7}Database Contents and Organization}{19}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Database}{{7}{19}} \@writefile{toc}{\contentsline {section}{\numberline {7.1}Tactics}{19}} \newlabel{db-tact}{{7.1}{19}} \@writefile{toc}{\contentsline {section}{\numberline {7.2}Physical Filesystem Requirements and Limitations}{19}} \@writefile{toc}{\contentsline {section}{\numberline {7.3}Non-Limitations}{20}} \@writefile{toc}{\contentsline {section}{\numberline {7.4}Directory Structure}{20}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.1}{\tt db}}{20}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.2}{\tt log}}{20}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.3}{\tt data}}{20}} \@writefile{toc}{\contentsline {subsubsection}{{\tt data/main}}{20}} \@writefile{toc}{\contentsline {subsubsection}{{\tt data/plugins}}{20}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4.4}{\tt blobs}}{20}} \newlabel{blob-naming}{{7.4.4}{20}} \@writefile{toc}{\contentsline {section}{\numberline {7.5}Types}{21}} \newlabel{db-types}{{7.5}{21}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.1}Inode ({\tt I})}{21}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.2}Epoch ({\tt E})}{21}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.3}$(Inode, Epoch)${}}{21}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.4}Hash ({\tt H})}{22}} \newlabel{hashtype}{{7.5.4}{22}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.5}Stat ({\tt S})}{22}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.5.6}Reference ({\tt R})}{23}} \@writefile{toc}{\contentsline {section}{\numberline {7.6}Tables}{23}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.1}Ownership Tables}{23}} \@writefile{toc}{\contentsline {subsubsection}{{\tt masters}}{23}} \@writefile{toc}{\contentsline {subsubsection}{{\tt slaves}}{23}} \@writefile{toc}{\contentsline {subsubsection}{{\tt clients}}{24}} \@writefile{toc}{\contentsline {subsubsection}{{\tt cache-closed}}{24}} \@writefile{toc}{\contentsline {subsubsection}{{\tt cache-open}}{24}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.2}Namespace Tables}{24}} \@writefile{toc}{\contentsline {subsubsection}{{\tt roots}}{24}} \@writefile{toc}{\contentsline {subsubsection}{{\tt pie-in}}{24}} \@writefile{toc}{\contentsline {subsubsection}{{\tt ie-pin}}{25}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.6.3}Other Tables}{25}} \@writefile{toc}{\contentsline {subsubsection}{{\tt freei}}{25}} \@writefile{toc}{\contentsline {paragraph}{F (Free)}{25}} \@writefile{toc}{\contentsline {paragraph}{R (Reserved)}{25}} \@writefile{toc}{\contentsline {subsubsection}{{\tt epochs}}{25}} \@writefile{toc}{\contentsline {subsubsection}{{\tt misc}}{25}} \@writefile{toc}{\contentsline {paragraph}{Key: Last-Inode}{26}} \@writefile{toc}{\contentsline {paragraph}{Key: FirstGC}{26}} \@writefile{toc}{\contentsline {paragraph}{Key: LastGC}{26}} \@writefile{toc}{\contentsline {section}{\numberline {7.7}Cache}{26}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.7.1}{\tt inode}}{26}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.7.2}{\tt hash}}{26}} \@writefile{toc}{\contentsline {chapter}{\numberline {8}File Insertion}{27}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{file-insert}{{8}{27}} \@writefile{toc}{\contentsline {subsection}{\numberline {8.0.3}Score Objects}{29}} \@writefile{toc}{\contentsline {subsection}{\numberline {8.0.4}Plan Objects}{29}} \@writefile{toc}{\contentsline {subsection}{\numberline {8.0.5}Representation Search}{29}} \@writefile{toc}{\contentsline {chapter}{\numberline {9}Configuration}{31}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Extensions}{{9}{31}} \@writefile{toc}{\contentsline {section}{\numberline {9.1}{\tt fakefs.conf} configuration file}{31}} \newlabel{fakefs-conf}{{9.1}{31}} \@writefile{toc}{\contentsline {section}{\numberline {9.2}Non-Extensions}{31}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.2.1}{\tt source} {\sl CONFIG}}{31}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.2.2}{\tt load} {\sl PLUGIN}}{31}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.2.3}{\tt plugin} {\sl PLUGIN} {\tt command\dots {}}}{31}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.2.4}{\tt umask} {\sl MASK}}{32}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.2.5}{\tt dirhash} {\sl DEPTH SIZE}}{32}} \newlabel{dirhash}{{9.2.5}{32}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.2.6}{\tt paranoid} {\sl WHAT ON/OFF}}{32}} \newlabel{paranoid-readback}{{9.2.6}{32}} \@writefile{toc}{\contentsline {subsubsection}{{\tt paranoid storage} {\sl ON/OFF}}{32}} \@writefile{toc}{\contentsline {subsubsection}{{\tt paranoid retrieval} {\sl ON/OFF}}{32}} \@writefile{toc}{\contentsline {subsubsection}{{\tt paranoid duplicates} {\sl ON/OFF}}{32}} \@writefile{toc}{\contentsline {section}{\numberline {9.3}Garbage Collection Policy}{33}} \newlabel{garbage}{{9.3}{33}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.3.1}Garbage Collection Scheduling Policies}{33}} \@writefile{toc}{\contentsline {subsubsection}{Resource-Demand Garbage Collection Scheduling}{33}} \newlabel{resource-demand}{{9.3.1}{33}} \@writefile{toc}{\contentsline {subsubsection}{Interval Garbage Collection Scheduling}{33}} \@writefile{toc}{\contentsline {subsubsection}{Manually Initiated Garbage Collection Scheduling}{33}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.3.2}Garbage Collection Coverage Policies}{34}} \@writefile{toc}{\contentsline {subsubsection}{Nothing is Garbage}{34}} \@writefile{toc}{\contentsline {subsubsection}{Everything is Garbage}{34}} \@writefile{toc}{\contentsline {subsubsection}{Only Superceded Inodes are Garbage}{34}} \@writefile{toc}{\contentsline {section}{\numberline {9.4}Hash Functions}{34}} \newlabel{hashes}{{9.4}{34}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.4.1}{\tt hash algorithm} {\sl FUNCTION}}{34}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.4.2}{\tt hash length} {\sl LENGTH}}{34}} \@writefile{toc}{\contentsline {section}{\numberline {9.5}File Transformation, Storage, and Retrieval}{34}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.5.1}{\tt transform} {\sl ALGORITHM INPUT-TYPE OUTPUT-TYPE}}{35}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.5.2}{\tt endpoints} {\sl INPUT-TYPE OUTPUT-TYPE}}{35}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.5.3}{\tt storage} {\sl METHOD}}{35}} \@writefile{toc}{\contentsline {section}{\numberline {9.6}Cache Configuration}{35}} \newlabel{cache-config}{{9.6}{35}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.6.1}{\tt cache directory} {\sl DIRECTORY}}{35}} \@writefile{toc}{\contentsline {subsection}{\numberline {9.6.2}{\tt cache size} {\sl SIZE}}{36}} \@writefile{toc}{\contentsline {chapter}{\numberline {10}Storage and Retrieval Methods}{37}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {10.1}{\tt berkeley}}{37}} \@writefile{toc}{\contentsline {section}{\numberline {10.2}{\tt file}}{37}} \@writefile{toc}{\contentsline {section}{\numberline {10.3}External Reference}{37}} \@writefile{toc}{\contentsline {chapter}{\numberline {11}Transform Algorithms}{39}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {11.1}{\tt zlib} and {\tt bzlib}}{39}} \@writefile{toc}{\contentsline {section}{\numberline {11.2}{\tt filter} Meta-Transform}{39}} \@writefile{toc}{\contentsline {subsection}{\numberline {11.2.1}Compression Filter Transforms}{40}} \@writefile{toc}{\contentsline {subsection}{\numberline {11.2.2}Encryption Filter Transforms}{40}} \@writefile{toc}{\contentsline {section}{\numberline {11.3}Delta Transforms}{40}} \@writefile{toc}{\contentsline {subsection}{\numberline {11.3.1}{\tt delta} Transform}{40}} \@writefile{toc}{\contentsline {section}{\numberline {11.4}Mux/Demux Transforms}{41}} \@writefile{toc}{\contentsline {subsection}{\numberline {11.4.1}Split Transform}{41}} \@writefile{toc}{\contentsline {chapter}{\numberline {12}{\tt fakedmd}{}: Database Manager Daemon}{42}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{dmd}{{12}{42}} \@writefile{toc}{\contentsline {section}{\numberline {12.1}Startup Procedure}{42}} \newlabel{fakefs-lock}{{12.1}{42}} \@writefile{toc}{\contentsline {subsection}{\numberline {12.1.1}{\tt libfakefs} launches {\tt fakedmd}{}}{42}} \@writefile{toc}{\contentsline {subsection}{\numberline {12.1.2}{\tt fakedmd}{} acquires {\tt fakefs}{} master exclusive lock}{42}} \@writefile{toc}{\contentsline {subsection}{\numberline {12.1.3}Berkeley DB Startup}{42}} \@writefile{toc}{\contentsline {subsection}{\numberline {12.1.4}Cache Startup}{43}} \@writefile{toc}{\contentsline {subsection}{\numberline {12.1.5}Plugin Startup}{43}} \@writefile{toc}{\contentsline {subsubsection}{{\tt file} Storage Method Cleanup: Added Files}{43}} \newlabel{ext-file-log}{{12.1.5}{43}} \@writefile{toc}{\contentsline {subsubsection}{{\tt file} Storage Method Cleanup: Deleted Files}{44}} \@writefile{toc}{\contentsline {chapter}{\numberline {13}{\tt libfakefs}: Application Interface}{46}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {chapter}{\numberline {14}{\tt LD\_{}PRELOAD}{}}{47}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{Preload}{{14}{47}} \@writefile{toc}{\contentsline {section}{\numberline {14.1}File-Descriptor Juggling}{47}} \@writefile{toc}{\contentsline {section}{\numberline {14.2}{\tt fakefsd}: Database Proxy Server}{47}} \newlabel{fakefsd}{{14.2}{47}} \@writefile{toc}{\contentsline {section}{\numberline {14.3}{\tt fork}, {\tt vfork}, {\tt clone}, {\tt pthread\_{}create}, and Friends}{48}} \@writefile{toc}{\contentsline {section}{\numberline {14.4}{\tt rename} Optimization}{48}} \newlabel{posix-rename}{{14.4}{48}} \@writefile{toc}{\contentsline {section}{\numberline {14.5}What to do about {\tt statfs}?}{48}} \@writefile{toc}{\contentsline {subsection}{\numberline {14.5.1}Complications of {\tt fakefs}{}}{48}} \@writefile{toc}{\contentsline {subsection}{\numberline {14.5.2}Proposals}{50}} \@writefile{toc}{\contentsline {chapter}{\numberline {15}{\tt fakefs-nfsd}: NFS Server}{51}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {chapter}{\numberline {16}Garbage Collection}{52}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {16.1}{\tt fakegcd}: Garbage Collector Daemon}{52}} \newlabel{fakegcd}{{16.1}{52}} \@writefile{toc}{\contentsline {section}{\numberline {16.2}Ownership of Data}{52}} \@writefile{toc}{\contentsline {chapter}{\numberline {17}FIXMEs}{53}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }}