Work in progress, simply using github to better track progress at the moment.
This project will aim to implement a file-level content-addressed backing store that can be mounted, imported, exported, shared, and used as an additional storage engine for container systems.
ctrfs is designed to be the engine for read/write container file systems. It is specialized for containers by observing the following special requirements of container images.
- There is a high degree of data duplication between layers of different images.
- Data is deduplicated at the block level across all layers/images
- Pushing/pulling to registry is done at the file level using content addressing with metadata stored separately
- Overlay copy-up can be slow on file systems that do not support reflinks (check/measure this)
- Persistent data structures are used and data is "copied-up" a single block at a time
- Only dirty blocks need to be written back to central storage on commit.
- Image building is the most common reason to write to the container layer.
- There is no journaling
- fsync calls are ignored by default
- All writes are asynchronous and written only to cache sychronously
- Important persistant data used by a container should be written to a separate volume
- ctrfs also fixes some compatibility issues
- Hardlinks work as expected after committing
Other notes
- Tree data will be content addressed
- Hardlinks are supported through special inode remapping structures