Ferret File System: Difference between revisions

From Woozle Writes Code
Jump to navigation Jump to search
No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Conceptual Design==
{{fmt/title|FFS: why doesn't this already exist?}}
==Overview==
[[Ferret File System]] (FFS) is actually two ideas which can work together or separately: ''storage agnosticism'' and ''file format agnosticism''.
[[Ferret File System]] (FFS) is actually two ideas which can work together or separately: ''storage agnosticism'' and ''file format agnosticism''.
===Storage Agnosticism===
Traditional filesystems present "drives" or "volumes" that more or less correspond to physical devices, each with its own invariable maximum capacity. This is the metaphor used across all interfaces, including user (GUI, CLI) and application (API).


FFS presents the user with a single storage space that unifies all storage to which the system has access but tracks the availability characteristics of each file. Immediately obvious attributes include:
Ideally it should probably be implemented as a layer between {a very simplified node-file system (files have no names, folders, or meta, just volume-unique IDs) plus volume-database} and {a filesystem API} which would be compatible with most modern software but with additional features.
* '''location''': What is the physical or metaphorical "place" from which a file is being accessed?
** '''Examples''': a particular device, a LAN, a building, "the internet"
* '''frequency''': How often does the file need to be accessed from that location?
** '''Examples''':
*** archival storage (rarely accessed)
*** social media archive (may vary dynamically)
*** local work (needed a lot by one or more devices, less in demand elsewhere)
*** playing media (immediate read access; write access can be slower or restricted; make local temporary copy)
* '''criticality''': How important is it to make sure that this file is not lost?
** This can range from "temporary copy" to "mission-critical".
* '''versioning''': On what schedule/scheme (if any) should old versions of this file be kept?


Ideally, FFS would determine the attributes of each file based on usage-patterns, but this will be done by a separate agent. There will also be an interface by which to set the initial (expected) availability attributes as well as to override the agent's algorithmic determinations.
For nearer-term practical purposes, though, since I don't yet know how to roll my own filesystem :D, it looks possible to implement most of the utility of this concept as a userland application.
 
==Pages==
FFS will move files around as needed to accommodate changing needs, as usage shifts and storage-device-space availability changes (due to being filled up, becoming unreliable, or other characteristics). It will also keep more extra copies, on different storage devices, of more critical data.
* [[/concept]]: conceptual design (for the ''big'' concept)
===File Format Agnosticism===
* [[/design]]: technical bits
Traditional filesystems make certain assumptions about what metadata they need to track for each file – typically: creation date, modification date, file "extension" – which leaves applications to figure out how to present additional metadata they may need to store. This results in a proliferation of "file formats" which need to be understood in order to access that metadata or alter the file's contents without making it unusable.
* [[/app]]: as a userland application (the ''small'' concept)
 
==Archives==
FFS provides a mechanism for storing arbitrary semantic metadata, and a template system for repackaging that data back into a canonical file-format when needed. This allows applications and end-users to much more easily read and modify existing metadata as well as adding their own.
* [[/v0.1]] aka FileFerret: an earlier iteration of the idea, with some code
 
''writing in progress''
==as an Application==
Alternatively, these concepts can be implemented as a userland/desktop application rather than a core filesystem feature. This should make it possible to gain the benefits of these services without investing as much development time, allowing them to be tested and refined before being attempted as a kernel-level service.
 
The application would scan a given set of folders, recording in a database every file found and logging any changes noted. Each file-record would include:
* full path/name
* timestamps
* file size
* file ownership, system attributes, etc.
* contents fingerprint (hash, presumed to be unique)
 
During each scan, file entries would be checked against the DB by both hash and filespec, to identify changed contents or renaming. Every file found would be logged, along with any changes noted (i.e. anytime there is a partial match with an existing file, the current file will be logged as a modification of that file).
 
There would also be semantic data tables, to allow users to enter arbitrary information about each file.

Latest revision as of 21:57, 7 July 2024

FFS: why doesn't this already exist?

Overview

Ferret File System (FFS) is actually two ideas which can work together or separately: storage agnosticism and file format agnosticism.

Ideally it should probably be implemented as a layer between {a very simplified node-file system (files have no names, folders, or meta, just volume-unique IDs) plus volume-database} and {a filesystem API} which would be compatible with most modern software but with additional features.

For nearer-term practical purposes, though, since I don't yet know how to roll my own filesystem :D, it looks possible to implement most of the utility of this concept as a userland application.

Pages

  • /concept: conceptual design (for the big concept)
  • /design: technical bits
  • /app: as a userland application (the small concept)

Archives

  • /v0.1 aka FileFerret: an earlier iteration of the idea, with some code