Skip to content

Commit

Permalink
Add README.md
Browse files Browse the repository at this point in the history
Add LICENSE.md
cout970 committed Aug 24, 2024
1 parent 83ce2f9 commit ac563ce
Showing 2 changed files with 89 additions and 0 deletions.
7 changes: 7 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Copyright 2024 cout970

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
82 changes: 82 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# InnerFS

InnerFS is a command line utility to mount with FUSE a virtual file system that uses a sqlite database to store metadata
and a storage backend to store the file contents.

Several use cases can benefit from InnerFS:

- Store files in S3 with encryption and deduplication
- Keep all files in a single file, while still being able to access them as if they were in a directory
- Store files in a SQL database that allows querying with SQL to generate statistics or performing complex searches
- Reduce storage space by deduplicating and compressing files
- Provide ease access to files while keeping them encrypted, allowing to safely sync the encrypted files to the cloud

### Backend

Filesystem: Is the most basic backend, stores files in the specific path.

Sqlar: Stores files in a SQLite database, see [sqlar](https://sqlite.org/sqlar.html) for more information.

S3: Stores files in an S3 compatible storage.

### Features

- File de-duplication based on content
- File encryption with AES-256-GCM
- Metadata sqlite database that can be queried with SQL
- File name mangling with the content SHA512 hash

### Usage

- Generate a configuration file

```bash
innerfs generate-config
```

Will generate a configuration file `config.yml` in the current directory.

- Mount the filesystem

```bash
innerfs mount
```

Will mount the filesystem in the path specified in the configuration file. To unmount the filesystem use `umount` with
the mount point.

- Nuke all data

```bash
innerfs nuke
```

Will remove all data from the filesystem, including the metadata database. Handle with care.

- Export index as JSON/YAML

```bash
innerfs export-index --format json
```

Will generate a JSON file with a hierarchical representation of the filesystem (without the file contents).

- Export files

```bash
innerfs export-files --path ./output --format zip
```

Will export all files in the filesystem to the specified path in the specified format. Supports `zip`, `tar`
and `directory`.

### Configuration

The default configuration file contains comments that explain the options, can be seen [here](./src/default_config.yml).

### Planned features

- [ ] File compression
- [ ] File verification
- [ ] Sync between instances
- [ ] Encryption of the metadata database

0 comments on commit ac563ce

Please sign in to comment.