Commit cd286c0

mo khan <mo@mokhan.ca>
2021-07-25 23:19:12
improve formatting of paper
1 parent 09c756a
Changed files (1)
doc/my-paper.md
@@ -1,4 +1,4 @@
-# An Introduction to the Zettabyte File System (ZFS)
+# An Introduction to the ZFS
 
 ## 0. Abstract
 
@@ -14,22 +14,22 @@ In order to properly understand the relative importance of file systems, one
 has to place them in their historical context. Relevant events start taking
 place well before the first file system was built [3]:
 
-* 1977: FAT: Marc McDonald designs and implements the 8 bit file system. [4]
+* 1977: FAT: Marc McDonald designs/implements a 8-bit file system. [4]
 * 1980: FAT12: Tim Paterson extends FAT to 12 bits. [4]
 * 1984: FAT16: Cluster addresses were increased to 16-bit. [4]
 * 1993: NTFS: Microsoft develops a proprietary journaling file system. [5]
-* 1993: ext2: Rémy Card designs a replacement for the extended file system (ext) for the Linux kernel. [9]
-* 1994: XFS: Silicon Graphics, Inc releases a high-performance 64-bit journaling file system named XFS. [12]
+* 1993: ext2: Rémy Card designs a replacement for the ext. [9]
+* 1994: XFS: Silicon Graphics releases a 64-bit journaling file system. [12]
 * 1996: FAT32: Microsoft designs FAT32 which uses 32-bit cluster addresses.
 * 1998: HFS+: Apple Inc. develops the HFS Plus journaling file system. [6]
-* 19xx: HFS: Apple Inc. develops the proprietary Hierarchical File System [7]
+* 19xx: HFS: Apple Inc. develops the Hierarchical File System [7]
 * 2001: ZFS: Zettabyte file system is released as part of Sun Microsystems Solaris operating system.  [14]
 * 2001: ext3: ext2 is extended to support journaling. [10]
 * 2008: ext4: fourth extended file system is a journaling file system for Linux, developed as the successor to ext3. [11]
 * 2009: btrfs: B-tree file system is introduced into the Linux kernel. [13]
 * 2017: APFS: macOS replaces HFS+ with Apple File System (APFS)
 
-## Traditional File Systems
+## 2. Traditional File Systems
 
 Traditionally, file system administration of file systems and disk can be
 difficult, slow, and error prone. Adding more storage to an existing file
@@ -55,34 +55,34 @@ possible system errors.
 ```plaintext
   Traditional file system block diagram [1]
 
-  ----------------------------
-  |                          |
-  |      System Call         |
-  |                          |
-  ----------------------------
-       |Vnode interface|
-  ----------------------------
-  |                          |
-  |                          |
-  |      File System         |
-  |                          |
-  |                          |
-  ----------------------------
-   | logical device, offset|
-  ----------------------------
-  |                          |
-  |      Volume Manager      |
-  |                          |
-  ----------------------------
-   | physical device, offset|
-  ----------------------------
-  |                          |
-  |       Device Driver      |
-  |                          |
-  ----------------------------
+              ----------------------------
+              |                          |
+              |      System Call         |
+              |                          |
+              ----------------------------
+                  |Vnode interface|
+              ----------------------------
+              |                          |
+              |                          |
+              |      File System         |
+              |                          |
+              |                          |
+              ----------------------------
+              | logical device, offset|
+              ----------------------------
+              |                          |
+              |      Volume Manager      |
+              |                          |
+              ----------------------------
+              | physical device, offset|
+              ----------------------------
+              |                          |
+              |       Device Driver      |
+              |                          |
+              ----------------------------
 ```
 
-## Data Corruption
+## 3. Data Corruption
 
 Disk corruption occurs when any data access from disk does not have the expected
 contents due to some problem in the storage stack [2]. This can occur for many
@@ -97,7 +97,7 @@ that can detect corruption and recover from them such as B-Tree file system
 structures, or choosing a RAID storage setup to stripe/mirror the data across
 physical devices.
 
-## ZFS File System
+## 4. ZFS File System
 
 The Zettabyte File System (ZFS) is a file system developed at Sun Microsystems.
 ZFS was originally implemented in the Solaris operating system and was intended
@@ -113,44 +113,44 @@ the file system and volume manager to simplify administration and utilizes
 128 bit block addresses to be able to address vast amounts of data.
 
 ```plaintext
-  ZFS Block diagram [1]
-
-  --------------------------------
-  |                              |
-  |        System Call           |
-  |                              |
-  --------------------------------
-         | Vnode interface |
-  --------------------------------
-  |                              |
-  |    ZFS POSIX Layer (ZPL)     |
-  |                              |
-  --------------------------------
-    | dataset, object, offset |
-  --------------------------------
-  |                              |
-  |  Data Management Unit (DMU)  |
-  |                              |
-  --------------------------------
-      | data virtual address |
-  --------------------------------
-  |                              |
-  | Storage Pool Allocator (SPA) |
-  |                              |
-  --------------------------------
-     | physical device, offset |
-  --------------------------------
-  |                              |
-  |       Device Driver          |
-  |                              |
-  --------------------------------
+              ZFS Block diagram [1]
+
+              --------------------------------
+              |                              |
+              |        System Call           |
+              |                              |
+              --------------------------------
+                    | Vnode interface |
+              --------------------------------
+              |                              |
+              |    ZFS POSIX Layer (ZPL)     |
+              |                              |
+              --------------------------------
+                | dataset, object, offset |
+              --------------------------------
+              |                              |
+              |  Data Management Unit (DMU)  |
+              |                              |
+              --------------------------------
+                  | data virtual address |
+              --------------------------------
+              |                              |
+              | Storage Pool Allocator (SPA) |
+              |                              |
+              --------------------------------
+                | physical device, offset |
+              --------------------------------
+              |                              |
+              |       Device Driver          |
+              |                              |
+              --------------------------------
 ```
 
 1. The device driver exports a block device to the SPA
 1. The SPA handles:
-  * block allocation and I/O
-  * exports virtual addresses
-  * allocates and frees blocks to the DMU
+    * block allocation and I/O
+    * exports virtual addresses
+    * allocates and frees blocks to the DMU
 1. The DMU turns virtual addresses block into a transactional object for the ZPL
 1. The ZPL implements a POSIX file system on top of the DMU objects and exports
    vnode operations to the system call layer.
@@ -171,19 +171,19 @@ Separating the checksum from the data ensures that the data can be checked for
 integrity using a checksum located in the parent.
 
 ```plaintext
-          -------
-         |   |   | uberblock (has checksum of itself)
-         |___|___|
-         |___|___|
-          /     \
-    -------      -------
-   |   |   |    |   |   |
-   |___|___|    |___|___|
-   |___|___|    |___|___|
-    /     \      /     \
- -----  -----  -----  -----
- |   |  |   |  |   |  |   |
- -----  -----  -----  -----
+                     -------
+                    |   |   | uberblock (has checksum of itself)
+                    |___|___|
+                    |___|___|
+                      /     \
+                -------      -------
+              |   |   |    |   |   |
+              |___|___|    |___|___|
+              |___|___|    |___|___|
+                /     \      /     \
+            -----  -----  -----  -----
+            |   |  |   |  |   |  |   |
+            -----  -----  -----  -----
 
 [1]
 ```
@@ -205,7 +205,7 @@ The DMU keeps the on-disk data consistent at all times by treating all blocks as
 copy-on-write. All data in the pool is part of a tree of indirect blocks, with
 the data blocks as the leaves of the tree.
 
-## ZFS Observations
+## 5. ZFS Observations
 
 A 2010 analysis [2] of ZFS by Yupa Zhang et al. observed the following:
 
@@ -241,7 +241,7 @@ Memory corruption
 > as a goal. File system should not only provide protection against disk
 > corruptions, but also aim to protect data from memory corruptions.
 
-## 5. Conclusion
+## 6. Conclusion
 
 The original goals stated for the ZFS project were to address concerns related
 to many file systems of that generation such as data integrity, simple