Updating README

This commit is contained in:
Alex Yatskov 2015-07-13 11:45:47 +09:00
parent 9b3fcf0b8e
commit ebde317492

View File

@ -13,13 +13,19 @@ My goal was to build file system which could handle changes to file data and dir
in a simple, transparent way. I wanted to avoid storing version information in binary blobs, which are completely in a simple, transparent way. I wanted to avoid storing version information in binary blobs, which are completely
incomprehensible to the user. I strongly believed that the user should not be locked into a versioning scheme that incomprehensible to the user. I strongly believed that the user should not be locked into a versioning scheme that
prevented trivial migration or export of data. As such, versioned file data is stored in timestamped directories on a prevented trivial migration or export of data. As such, versioned file data is stored in timestamped directories on a
host file system (with minimal metadata stored in a human-readable format). host file system (with minimal metadata stored in a human-readable format). This approach is fundamentally different
from that of other tools.
Each version consists of a root node and child nodes that represent modified files or directories for that version; Each version consists of a root node and child nodes that represent modified files or directories for that version;
unmodified data is not duplicated between versions. Other information (such as records about file and directory unmodified data is not duplicated between versions. Other information (such as records about file and directory
deletions) are stored in a JSON file next to the version root. Although VFS provides a mechanism for enumerating and deletions) are stored in a JSON file next to the version root. Although VFS provides a mechanism for enumerating and
mounting specific snapshots, the user is capable of browsing the version data directly if they choose to do so. mounting specific snapshots, the user is capable of browsing the version data directly if they choose to do so.
Golang was selected as the language of choice for this project as it combines the performance and safety of a compiled
language without sacrificing the readability and maintainability of a high level scripting language such as Python.
Furthermore, the fact that Golang programs are statically linked ensures that binaries will be compatible between
various Linux distribution; recompilation is not required.
## Installation ## ## Installation ##
If you already have the Go environment and toolchain set up, you can get the latest version by running: If you already have the Go environment and toolchain set up, you can get the latest version by running:
@ -133,7 +139,7 @@ $ vfs db mp
Now let's make a couple of changes to the files and directory structure: Now let's make a couple of changes to the files and directory structure:
``` ```
$ echo こんにちは > mp/greeting.txt $ echo howdy > mp/greeting.txt
$ rm mp/pizza/pepperoni $ rm mp/pizza/pepperoni
$ touch mp/pizza/bacon $ touch mp/pizza/bacon
``` ```
@ -142,7 +148,7 @@ $ touch mp/pizza/bacon
``` ```
$ cat mp/greeting.txt $ cat mp/greeting.txt
こんにちは howdy
$ ls -R mp $ ls -R mp
mp: mp:
greeting.txt pizza/ greeting.txt pizza/
@ -215,3 +221,15 @@ cheese pepperoni
Hopefully this brief walkthrough of the system helped illustrate the basic concepts behind how VFS works. At its core, Hopefully this brief walkthrough of the system helped illustrate the basic concepts behind how VFS works. At its core,
it is a fundamentally simple system, the workings of which can be examined with any file browser and text editor. I it is a fundamentally simple system, the workings of which can be examined with any file browser and text editor. I
encourage those interested in this utility to follow this walkthrough and to ask me any questions they may have. encourage those interested in this utility to follow this walkthrough and to ask me any questions they may have.
## Limitations ##
There are a few lingering limitations of the system in its current state. While the architecture supports their
inclusion into a future version, I have not yet gotten around to taking care of this "laundry list" of items:
* Add support for file linking
* Further reduce data duplication when:
+ File is renamed
+ File attributes are modified
* Compress shadowed files
* Support for Mac OS X