Executable eLyKseeR Docker image
Fast ramp-up with our Docker image for Coq/OCaml development of eLyKseeR.
This Docker image contains just the compiled command line programs of eLyKseeR to run backups and file restore on your computer.
Visit Docker Hub: https://hub.docker.com/r/codieplusplus/elykseer-ml-binaries
Pull the image
There are images for Intel/AMD CPUs:
ARCH=amd64
docker pull codieplusplus/elykseer-ml-binaries:${ARCH}
or, ARM (aarch64) processors like on the newer Macs M[123]:
ARCH=arm64
docker pull codieplusplus/elykseer-ml-binaries:${ARCH}
$ARCH
indicates the platform (arm64 | amd64)
Preparations
We are using Docker volumes to store chunks and meta data independent of the container's lifecycle. Create these volumes, if not already present:
docker volume list
docker volume create elykseer_db
docker volume create elykseer_chunks
Running a backup
Let's start with defining some settings:
SRCDIR=/Users/alex/Documents
TGTDIR=/tmp/test_restore
mkdir -vp ${TGTDIR}
$SRCDIR
points to a directory that will be mounted read-only into the container at/data
; this will be the data to backup$TGTDIR
points to a directory which will contain the restored files
And, then run a container that will not be persisted after we leave it:
docker run -it --rm \
-v elykseer_db:/home/coq/elykseer.db \
-v elykseer_chunks:/home/coq/elykseer.chunks \
--mount type=bind,source="${SRCDIR}",target=/data,readonly \
--mount type=bind,source="${TGTDIR}",target=/restore \
codieplusplus/elykseer-ml-binaries:${ARCH}
For a first run, check that the permissions on these directories in the container are similar to these:
coq@1ab703a5a27c:~$ ls -ld elykseer.chunks elykseer.db
drwxrwsr-x 210 root coq 4096 May 16 22:15 elykseer.chunks
drwxrwsr-x 3 root coq 4096 May 15 09:44 elykseer.db
# if necessary change with:
sudo chgrp coq elykseer.chunks elykseer.db
sudo chmod g+ws elykseer.chunks elykseer.db
We are located in the home directory of user coq
where we set the identifier of our backups:
coq@c7d5c065ca31:~$ MYID=test
Let's start the shallow backup of only the files directly under /data
:
coq@c7d5c065ca31:~$ lxr_backup -v -x ${HOME}/elykseer.chunks -d ${HOME}/elykseer.db -n 16 -i $MYID -D /data/
done.
prepend '-R' to the argument '-D' to have the backup recurse into subdirectories
List meta data
A backup outputs encrypted chunks but also meta data which we can inspect:
coq@c7d5c065ca31:~$ irmin list
DIR test
coq@c7d5c065ca31:~$ irmin list $MYID
DIR relfiles
DIR relkeys
coq@c7d5c065ca31:~$ irmin list $MYID/relfiles
DIR 07
DIR 0e
DIR 2f
DIR 3a
DIR 3e
DIR 63
DIR aa
DIR fa
DIR fc
coq@c7d5c065ca31:~$ irmin list $MYID/relfiles/63
FILE 726563f83800d7c5d8ab76fbc71e2d38ba060df36a417eb9615bd3759380a699
Let's have a look at one of them using jq
to format the output:
coq@c7d5c065ca31:~$ irmin get test/relfiles/63/726563f83800d7c5d8ab76fbc71e2d38ba060df36a417eb9615bd3759380a699 | jq
{
"version": {
"major": "0",
"minor": "9",
"build": "11"
},
"fileinformation": {
"fname": "/data/something.dat",
"fhash": "726563f8..9380a699",
"fsize": "64798",
"fowner": "1000",
"fpermissions": "644",
"fmodified": "2022-07-31 17:51:59",
"fchecksum": "9e76dd4b..2973fe25"
},
"blocks": [
{
"blockid": "1",
"bchecksum": "b0ebf725..b4ff33d5",
"blocksize": "32768",
"filepos": "0",
"blockaid": "35d5411f..5653bff3",
"blockapos": "182033"
},
{
"blockid": "2",
"bchecksum": "82f178b5..e533c0bf",
"blocksize": "32030",
"filepos": "32768",
"blockaid": "35d5411f..5653bff3",
"blockapos": "150003"
}
]
}
The file has been backup in two blocks. The checksums of all blocks and the original file are remembered to decide later on a subsequent backup which parts of the file changed.
Restore a file
From the encrypted chunks and the saved meta data this file can be restored:
coq@c7d5c065ca31:~$ lxr_restore -v -x ${HOME}/elykseer.chunks -d ${HOME}/elykseer.db -i $MYID -o /restore/ /data/something.dat
INFO restoring file /data/Pergola.dxf from 2 blocks
restored 1 files with 64798 bytes in total
done.