mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-11-25 23:53:17 +00:00
Backup a stripped-down version of gravity.db after each pihole -g run
Signed-off-by: DL6ER <dl6er@dl6er.de>
This commit is contained in:
parent
112b961762
commit
6ff30f7294
1 changed files with 31 additions and 3 deletions
34
gravity.sh
34
gravity.sh
|
@ -58,6 +58,7 @@ gravityDBfile_default="/etc/pihole/gravity.db"
|
||||||
gravityTEMPfile="${GRAVITYDB}_temp"
|
gravityTEMPfile="${GRAVITYDB}_temp"
|
||||||
gravityDIR="$(dirname -- "${gravityDBfile}")"
|
gravityDIR="$(dirname -- "${gravityDBfile}")"
|
||||||
gravityOLDfile="${gravityDIR}/gravity_old.db"
|
gravityOLDfile="${gravityDIR}/gravity_old.db"
|
||||||
|
gravityBCKfile="${gravityDIR}/gravity_backup.db"
|
||||||
|
|
||||||
# Generate new SQLite3 file from schema template
|
# Generate new SQLite3 file from schema template
|
||||||
generate_gravity_database() {
|
generate_gravity_database() {
|
||||||
|
@ -86,6 +87,15 @@ gravity_build_tree() {
|
||||||
echo -e "${OVER} ${TICK} ${str}"
|
echo -e "${OVER} ${TICK} ${str}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Rotate gravity backup files
|
||||||
|
rotate_gravity_backup() {
|
||||||
|
for i in {9..1}; do
|
||||||
|
if [ -f "${gravityBCKfile}.${i}" ]; then
|
||||||
|
mv "${gravityBCKfile}.${i}" "${gravityBCKfile}.$((i + 1))"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Copy data from old to new database file and swap them
|
# Copy data from old to new database file and swap them
|
||||||
gravity_swap_databases() {
|
gravity_swap_databases() {
|
||||||
str="Swapping databases"
|
str="Swapping databases"
|
||||||
|
@ -101,10 +111,28 @@ gravity_swap_databases() {
|
||||||
oldAvail=false
|
oldAvail=false
|
||||||
if [ "${availableBlocks}" -gt "$((gravityBlocks * 2))" ] && [ -f "${gravityDBfile}" ]; then
|
if [ "${availableBlocks}" -gt "$((gravityBlocks * 2))" ] && [ -f "${gravityDBfile}" ]; then
|
||||||
oldAvail=true
|
oldAvail=true
|
||||||
mv "${gravityDBfile}" "${gravityOLDfile}"
|
cp "${gravityDBfile}" "${gravityOLDfile}"
|
||||||
else
|
|
||||||
rm "${gravityDBfile}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Drop the gravity and antigravity tables + subsequent VACUUM the current
|
||||||
|
# database for compaction
|
||||||
|
output=$({ printf ".timeout 30000\\nDROP TABLE IF EXISTS gravity;\\nDROP TABLE IF EXISTS antigravity;\\nVACUUM;\\n" | pihole-FTL sqlite3 -ni "${gravityDBfile}"; } 2>&1)
|
||||||
|
status="$?"
|
||||||
|
|
||||||
|
if [[ "${status}" -ne 0 ]]; then
|
||||||
|
echo -e "\\n ${CROSS} Unable to clean current database for backup\\n ${output}"
|
||||||
|
rotate=false
|
||||||
|
else
|
||||||
|
# If multiple gravityBCKfile's are present (appended with a number), rotate them
|
||||||
|
# We keep at most 10 backups
|
||||||
|
rotate_gravity_backup
|
||||||
|
|
||||||
|
# Move the old database to the backup location
|
||||||
|
mv "${gravityDBfile}" "${gravityBCKfile}.1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Move the new database to the correct location
|
||||||
mv "${gravityTEMPfile}" "${gravityDBfile}"
|
mv "${gravityTEMPfile}" "${gravityDBfile}"
|
||||||
echo -e "${OVER} ${TICK} ${str}"
|
echo -e "${OVER} ${TICK} ${str}"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue