Commit cd286c0
Changed files (1)
doc
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