mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 21:35:45 +02:00
Add bash wrapper
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
This commit is contained in:
parent
1303fb9da8
commit
a384cd976a
93
scripts/beesd
Executable file
93
scripts/beesd
Executable file
@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /usr/bin/beesd
|
||||||
|
|
||||||
|
## Helpful functions
|
||||||
|
INFO(){ echo "INFO:" "$@"; }
|
||||||
|
ERRO(){ echo "ERROR:" "$@"; exit 1; }
|
||||||
|
|
||||||
|
## Global vars
|
||||||
|
export BEESHOME BEESSTATUS
|
||||||
|
export WORK_DIR CONFIG_DIR
|
||||||
|
export CONFIG_FILE
|
||||||
|
export UUID AL16M
|
||||||
|
|
||||||
|
readonly AL16M="$((16*1024*1024))"
|
||||||
|
readonly CONFIG_DIR=/etc/bees/
|
||||||
|
|
||||||
|
## Pre checks
|
||||||
|
{
|
||||||
|
[ ! -d "$CONFIG_DIR" ] && ERRO "Missing: $CONFIG_DIR"
|
||||||
|
[ "$UID" == "0" ] || ERRO "Must be runned as root"
|
||||||
|
}
|
||||||
|
|
||||||
|
command -v bees &> /dev/null || ERRO "Missing 'bees' command"
|
||||||
|
|
||||||
|
## Parse args
|
||||||
|
UUID="$1"
|
||||||
|
case "$UUID" in
|
||||||
|
*-*-*-*-*)
|
||||||
|
FILE_CONFIG=""
|
||||||
|
for file in "$CONFIG_DIR"/*.conf; do
|
||||||
|
[ ! -f "$file" ] && continue
|
||||||
|
if grep -q "$UUID" "$file"; then
|
||||||
|
INFO "Find $UUID in $file, use as conf"
|
||||||
|
FILE_CONFIG="$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[ ! -f "$FILE_CONFIG" ] && ERRO "No config for $UUID"
|
||||||
|
source "$FILE_CONFIG"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "beesd <btrfs_uuid>"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
INFO "Check: BTRFS UUID exists"
|
||||||
|
if [ ! -d "/sys/fs/btrfs/$UUID" ]; then
|
||||||
|
ERRO "Can't find BTRFS UUID: $UUID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
INFO "Check: Disk exists"
|
||||||
|
if [ ! -b "/dev/disk/by-uuid/$UUID" ]; then
|
||||||
|
ERRO "Missing disk: /dev/disk/by-uuid/$UUID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
INFO "WORK DIR: $WORK_DIR"
|
||||||
|
mkdir -p "$WORK_DIR" || exit 1
|
||||||
|
|
||||||
|
INFO "MOUNT DIR: $MNT_DIR"
|
||||||
|
mkdir -p "$MNT_DIR" || exit 1
|
||||||
|
|
||||||
|
umount_w(){ mountpoint -q "$1" && umount -l "$1"; }
|
||||||
|
force_umount(){ umount_w "$MNT_DIR"; }
|
||||||
|
trap force_umount SIGINT SIGTERM EXIT
|
||||||
|
|
||||||
|
mount -osubvolid=5 /dev/disk/by-uuid/$UUID "$MNT_DIR" || exit 1
|
||||||
|
|
||||||
|
if [ ! -d "$BEESHOME" ]; then
|
||||||
|
INFO "Create subvol $BEESHOME for store bees data"
|
||||||
|
btrfs sub cre "$BEESHOME"
|
||||||
|
else
|
||||||
|
btrfs sub show "$BEESHOME" &> /dev/null || ERRO "$BEESHOME MUST BE A SUBVOL!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check DB size
|
||||||
|
{
|
||||||
|
DB_PATH="$BEESHOME/beeshash.dat"
|
||||||
|
touch "$DB_PATH"
|
||||||
|
OLD_SIZE="$(du -b "$DB_PATH" | sed 's/\t/ /g' | cut -d' ' -f1)"
|
||||||
|
NEW_SIZE="$DB_SIZE"
|
||||||
|
if (( "$NEW_SIZE"%AL16M > 0 )); then
|
||||||
|
ERRO "DB_SIZE Must be multiple of 16M"
|
||||||
|
fi
|
||||||
|
if (( "$OLD_SIZE" != "$NEW_SIZE" )); then
|
||||||
|
INFO "Resize db: $OLD_SIZE -> $NEW_SIZE"
|
||||||
|
[ -f "$BEESHOME/beescrawl.$UUID.dat" ] && rm "$BEESHOME/beescrawl.$UUID.dat"
|
||||||
|
truncate -s $NEW_SIZE $DB_PATH
|
||||||
|
fi
|
||||||
|
chmod 700 "$DB_PATH"
|
||||||
|
}
|
||||||
|
|
||||||
|
bees $MNT_DIR
|
||||||
|
exit 0
|
28
scripts/beesd.conf.sample
Normal file
28
scripts/beesd.conf.sample
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
## Config for Bees: /etc/bees/beesd.conf.sample
|
||||||
|
## https://github.com/Zygo/bees
|
||||||
|
## It's a default values, change it, if needed
|
||||||
|
|
||||||
|
# Which FS will be used
|
||||||
|
UUID=5d3c0ad5-bedf-463d-8235-b4d4f6f99476
|
||||||
|
|
||||||
|
## System Vars
|
||||||
|
# Change carefully
|
||||||
|
WORK_DIR=/run/bees/
|
||||||
|
MNT_DIR="$WORK_DIR/mnt/$UUID"
|
||||||
|
BEESHOME="$MNT_DIR/.beeshome"
|
||||||
|
BEESSTATUS="$WORK_DIR/$UUID.status"
|
||||||
|
|
||||||
|
## Bees DB size
|
||||||
|
# Hash Table Sizing
|
||||||
|
# sHash table entries are 16 bytes each
|
||||||
|
# (64-bit hash, 52-bit block number, and some metadata bits)
|
||||||
|
# Each entry represents a minimum of 4K on disk.
|
||||||
|
# unique data size hash table size average dedup block size
|
||||||
|
# 1TB 4GB 4K
|
||||||
|
# 1TB 1GB 16K
|
||||||
|
# 1TB 256MB 64K
|
||||||
|
# 1TB 16MB 1024K
|
||||||
|
# 64TB 1GB 1024K
|
||||||
|
#
|
||||||
|
# Size MUST be power of 16M
|
||||||
|
DB_SIZE=$((64*$AL16M)) # 1G in bytes
|
Loading…
x
Reference in New Issue
Block a user