Skip to content

Commit bc69ac8

Browse files
ramdisk support
1 parent 0534f14 commit bc69ac8

6 files changed

Lines changed: 124 additions & 26 deletions

File tree

bacchus.sh

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@ PrintOptions()
2525
printf 'Source directory: %s\n' "$BCS_SOURCE"
2626
printf 'Destination directory: %s\n' "$BCS_DEST"
2727
printf 'Base name for archive: %s\n' "$BCS_BASENAME"
28-
printf 'Use ramdisk for intermediate dirs: %s\n' "$BCS_RAMDISK"
29-
30-
if [ "$BCS_COMPRESS" == "on" ]; then
31-
if [ "$BCS_COMPRESDIR" != "." ]; then
32-
printf 'Intermediate compression directory: %s\n' "$BCS_COMPRESDIR"
33-
fi
28+
if [ "$BCS_COMPRESS" == "on" ] || [ -n "$BCS_PASSWORD" ]; then
29+
printf 'Use ramdisk for intermediate dirs: %s\n' "$BCS_RAMDISK"
3430
else
35-
printf 'Compression: disabled\n'
31+
printf 'Use ramdisk for intermediate dirs: disabled\n'
32+
fi
33+
34+
if [ "$BCS_COMPRESS" == "on" ] && [ "$BCS_RAMDISK" == "off" ]; then
35+
printf 'Intermediate compression directory: %s\n' "$BCS_COMPRESDIR"
36+
fi
37+
if [ "$BCS_COMPRESS" == "off" ]; then
38+
printf 'Compression: disabled\n'
3639
fi
3740

3841
if [ -z "$BCS_PASSWORD" ]; then
@@ -58,6 +61,9 @@ ConfirmStart()
5861
read -rsp "Press enter to begin..." confirm
5962
printf '\n\n'
6063
fi
64+
if [ "$BCS_COMPRESS" == "off" ] || [ -z "$BCS_PASSWORD" ]; then
65+
BCS_RAMDISK="off"
66+
fi
6167
}
6268

6369
Backup()
@@ -67,7 +73,7 @@ Backup()
6773
printf '|| Running Bacchus backup operation ||\n'
6874
printf ' ====================================\n'
6975
PrintOptions
70-
if [ "$BCS_TARDIR" != "." ]; then
76+
if [ "$BCS_RAMDISK" == "off" ] && ([ "$BCS_COMPRESS" == "on" ] || [ -n "$BCS_PASSWORD" ]); then
7177
printf 'Intermediate tar directory: %s\n' "$BCS_TARDIR"
7278
fi
7379
printf 'Volume size for archive: %s\n' "$BCS_VOLUMESIZE"
@@ -83,7 +89,7 @@ Restore()
8389
printf '|| Running Bacchus restore operation ||\n'
8490
printf ' =====================================\n'
8591
PrintOptions
86-
if [ "$BCS_DECRYPTDIR" != "." ] && [ -n "$BCS_PASSWORD" ]; then
92+
if [ -n "$BCS_PASSWORD" ] && [ "$BCS_RAMDISK" == "off" ]; then
8793
printf 'Intermediate decryption directory: %s\n' "$BCS_DECRYPTDIR"
8894
fi
8995
printf '\n'

scripts/bacchus-backup-new-volume.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
# Utilizes these environment variables:
99
# BCS_DEST - location to store final volumes
1010
# BCS_COMPRESDIR - Intermediate area to store compressed volume
11+
# BCS_COMPRESS - Boolean enabling compression
1112
# BCS_PASSWORD - Password to encrypt backup archive volumes
1213
#
1314
# NOTE: If no password is supplied (as BCS_PASSWORD environment var),

scripts/bacchus-backup.sh

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
# Utilizes these environment variables:
1717
# BCS_SOURCE - Directory to backup
1818
# BCS_DEST - directory location of archive files
19-
# BCS_BASENAME - Base filename for backup archive, appending
20-
# incremental backup volume number
19+
# BCS_BASENAME - Base filename for backup archive
20+
# BCS_VOLUMESIZE - Size of each volume in kB
21+
# BCS_RAMDISK - Boolean enabling ramdisk
2122
# BCS_TARDIR - Intermediate area for tar
2223
# BCS_COMPRESDIR - Intermediate area to store compressed volume
23-
# BCS_VOLUMESIZE - Size of each volume in kB
24+
# BCS_COMPRESS - Boolean enabling compression
25+
# BCS_VERBOSETAR - Tar shows target filenames backed up
2426
# BCS_PASSWORD - Password to encrypt backup archive volumes
2527
#
2628
# NOTE: If no password is supplied (as BCS_PASSWORD environment var),
@@ -30,6 +32,11 @@ scriptdir=$(dirname "$_")
3032

3133
Cleanup()
3234
{
35+
if [[ "$BCS_RAMDISK" == "on" ]]; then
36+
sync
37+
umount "$BCS_TMPFILE".ramdisk
38+
rmdir "$BCS_TMPFILE".ramdisk
39+
fi
3340
if [[ "$BCS_TMPFILE" == *"tmp"* ]]; then
3441
rm -rf "$BCS_TMPFILE"
3542
fi
@@ -40,6 +47,22 @@ trap Cleanup EXIT
4047

4148
if [ "$BCS_COMPRESS" == "off" ] && [ -z "$BCS_PASSWORD" ]; then
4249
BCS_TARDIR="$BCS_DEST"
50+
else
51+
if [ "$BCS_RAMDISK" == "on" ]; then
52+
ramdisk_size=0
53+
if [ "$BCS_COMPRESS" == "on" ]; then
54+
ramdisk_size="$((ramdisk_size + BCS_VOLUMESIZE))"
55+
fi
56+
if [ -n "$BCS_PASSWORD" ]; then
57+
ramdisk_size="$((ramdisk_size + BCS_VOLUMESIZE))"
58+
fi
59+
ramdisk_dir="$BCS_TMPFILE".ramdisk
60+
ramdisk_size="$(( ((ramdisk_size * 1024) + ((BCS_VOLUMESIZE * 1024) / 100)) ))"
61+
mkdir -p "$ramdisk_dir"
62+
mount -t tmpfs -o size="$ramdisk_size" tmpfs "$ramdisk_dir"
63+
BCS_COMPRESDIR="$ramdisk_dir"
64+
BCS_TARDIR="$ramdisk_dir"
65+
fi
4366
fi
4467

4568
if [ "$BCS_VERBOSETAR" == "on" ]; then
@@ -61,5 +84,5 @@ esac
6184
export TAR_VOLUME=$(expr "$vol" + 1)
6285
export TAR_SUBCOMMAND="-c"
6386
export TAR_FD="none"
64-
"$scriptdir"/bacchus-backup-new-volume.sh "$BCS_DEST" "$BCS_COMPRESDIR"
87+
"$scriptdir"/bacchus-backup-new-volume.sh
6588
printf '\n'

scripts/bacchus-restore-new-volume.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@
77
#
88
# Utilizes these environment variables:
99
# BCS_SOURCE - Directory location of archive files
10+
# BCS_BASENAME - Base filename for backup archive
1011
# BCS_DECRYPTDIR - Intermediate area to store unencrypted volume
1112
# BCS_COMPRESDIR - Intermediate area to store uncompressed volume
13+
# BCS_COMPRESS - Boolean enabling compression
1214
# BCS_PASSWORD - Password to encrypt backup archive volumes
1315
#
1416
# NOTE: If no password is supplied (as BCS_PASSWORD environment var),
1517
# Bacchus does not unencrypt backup, and operation will fail if
1618
# archive was backed up as encrypted
1719

18-
name=$(expr "$TAR_ARCHIVE" : '\(.*\)-.*')
20+
tararchivedir=$(dirname "$TAR_ARCHIVE")
21+
name=$(expr $(basename "$TAR_ARCHIVE") : '\(.*\)-.*')
1922
vol="${name:-$TAR_ARCHIVE}"-"$TAR_VOLUME"
2023
filename="${vol##*/}"
2124
oldname="${TAR_ARCHIVE##*/}"
@@ -61,7 +64,8 @@ fi
6164
case "$TAR_FD" in
6265
none) exit 0
6366
;;
64-
*) echo "${name:-$TAR_ARCHIVE}"-"$TAR_VOLUME" >&"$TAR_FD"
67+
# *) echo "${name:-$TAR_ARCHIVE}"-"$TAR_VOLUME" >&"$TAR_FD"
68+
*) echo "$tararchivedir/$BCS_BASENAME".tar-"$TAR_VOLUME" >&"$TAR_FD"
6569
esac
6670

6771
exit 0

scripts/bacchus-restore.sh

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
# Utilizes these environment variables:
1717
# BCS_SOURCE - directory location of archive files
1818
# BCS_DEST - directory location of archive files
19-
# BCS_BASENAME - base filename for restore archive, appending
20-
# incremental archive volume number
19+
# BCS_BASENAME - Base filename for backup archive
20+
# BCS_VOLUMESIZE - Used LOCALLY here, not from environment
21+
# BCS_RAMDISK - Boolean enabling ramdisk
2122
# BCS_DECRYPTDIR - Intermediate area to store unencrypted volume
2223
# BCS_COMPRESDIR - Intermediate area to store uncompressed volume
24+
# BCS_COMPRESS - Boolean enabling compression
25+
# BCS_VERBOSETAR - Tar shows target filenames backed up
2326
# BCS_PASSWORD - Password to encrypt backup archive volumes
2427
#
2528
# NOTE: If no password is supplied (as BCS_PASSWORD environment var),
@@ -30,6 +33,11 @@ scriptdir=$(dirname "$_")
3033

3134
Cleanup()
3235
{
36+
if [[ "$BCS_RAMDISK" == "on" ]]; then
37+
sync
38+
umount "$BCS_TMPFILE".ramdisk
39+
rmdir "$BCS_TMPFILE".ramdisk
40+
fi
3341
if [[ "$BCS_TMPFILE" == *"tmp"* ]]; then
3442
rm -rf "$BCS_TMPFILE"
3543
fi
@@ -38,6 +46,56 @@ Cleanup()
3846
BCS_TMPFILE=$(mktemp -u /tmp/baccus-XXXXXX)
3947
trap Cleanup EXIT
4048

49+
if [ "$BCS_COMPRESS" == "off" ] && [ -z "$BCS_PASSWORD" ]; then
50+
BCS_TARDIR="$BCS_DEST"
51+
else
52+
if [ "$BCS_RAMDISK" == "on" ]; then
53+
source="$BCS_SOURCE"/"$BCS_BASENAME".tar
54+
ramdisk_size_tmpdir="$BCS_TMPFILE".ramdisk_size
55+
mkdir "$ramdisk_size_tmpdir"
56+
57+
if [ "$BCS_COMPRESS" == "on" ]; then
58+
source="$source".gz
59+
fi
60+
61+
if [ -n "$BCS_PASSWORD" ]; then
62+
if [ "$BCS_COMPRESS" == "on" ]; then
63+
destination="$ramdisk_size_tmpdir"/"$BCS_BASENAME".tar.gz
64+
else
65+
destination="$ramdisk_size_tmpdir"/"$BCS_BASENAME".tar
66+
fi
67+
echo "$BCS_PASSWORD" | gpg -qd --batch --cipher-algo AES256 --compress-algo none --passphrase-fd 0 --no-mdc-warning -o "$destination" "$source".gpg
68+
source="$destination"
69+
fi
70+
71+
if [ "$BCS_COMPRESS" == "on" ]; then
72+
destination="$ramdisk_size_tmpdir"/"$BCS_BASENAME".tar
73+
pigz -9cd "$source" > "$destination"
74+
#gzip -9cd "$source" > "$destination"
75+
source="$destination"
76+
fi
77+
78+
BCS_VOLUMESIZE=$(stat -c %s "$source")
79+
BCS_VOLUMESIZE=$(( BCS_VOLUMESIZE / 1024 ))
80+
rm -rf "$ramdisk_size_tmpdir"
81+
82+
ramdisk_size=0
83+
if [ "$BCS_COMPRESS" == "on" ]; then
84+
ramdisk_size="$((ramdisk_size + BCS_VOLUMESIZE))"
85+
fi
86+
if [ -n "$BCS_PASSWORD" ]; then
87+
ramdisk_size="$((ramdisk_size + BCS_VOLUMESIZE))"
88+
fi
89+
ramdisk_dir="$BCS_TMPFILE".ramdisk
90+
ramdisk_size="$(( ((ramdisk_size * 1024) + ((BCS_VOLUMESIZE * 1024) / 100)) ))"
91+
mkdir -p "$ramdisk_dir"
92+
mount -t tmpfs -o size="$ramdisk_size" tmpfs "$ramdisk_dir"
93+
BCS_COMPRESDIR="$ramdisk_dir"
94+
BCS_DECRYPTDIR="$ramdisk_dir"
95+
BCS_TARDIR="$ramdisk_dir"
96+
fi
97+
fi
98+
4199
# process first (possibly only) backup volume
42100
echo "$BCS_BASENAME".tar
43101

source/bacchus.m4

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@ PrintOptions()
2525
printf 'Source directory: %s\n' "$BCS_SOURCE"
2626
printf 'Destination directory: %s\n' "$BCS_DEST"
2727
printf 'Base name for archive: %s\n' "$BCS_BASENAME"
28-
printf 'Use ramdisk for intermediate dirs: %s\n' "$BCS_RAMDISK"
29-
30-
if [[ "$BCS_COMPRESS" == "on" ]]; then
31-
if [[ "$BCS_COMPRESDIR" != "." ]]; then
32-
printf 'Intermediate compression directory: %s\n' "$BCS_COMPRESDIR"
33-
fi
28+
if [[ "$BCS_COMPRESS" == "on" ]] || [[ -n "$BCS_PASSWORD" ]]; then
29+
printf 'Use ramdisk for intermediate dirs: %s\n' "$BCS_RAMDISK"
3430
else
35-
printf 'Compression: disabled\n'
31+
printf 'Use ramdisk for intermediate dirs: disabled\n'
32+
fi
33+
34+
if [[ "$BCS_COMPRESS" == "on" ]] && [[ "$BCS_RAMDISK" == "off" ]]; then
35+
printf 'Intermediate compression directory: %s\n' "$BCS_COMPRESDIR"
36+
fi
37+
if [[ "$BCS_COMPRESS" == "off" ]]; then
38+
printf 'Compression: disabled\n'
3639
fi
3740

3841
if [[ -z "$BCS_PASSWORD" ]]; then
@@ -58,6 +61,9 @@ ConfirmStart()
5861
read -rsp "Press enter to begin..." confirm
5962
printf '\n\n'
6063
fi
64+
if [[ "$BCS_COMPRESS" == "off" ]] || [[ -z "$BCS_PASSWORD" ]]; then
65+
BCS_RAMDISK="off"
66+
fi
6167
}
6268

6369
Backup()
@@ -67,7 +73,7 @@ Backup()
6773
printf '|| Running Bacchus backup operation ||\n'
6874
printf ' ====================================\n'
6975
PrintOptions
70-
if [[ "$BCS_TARDIR" != "." ]]; then
76+
if [[ "$BCS_RAMDISK" == "off" ]] && ([[ "$BCS_COMPRESS" == "on" ]] || [[ -n "$BCS_PASSWORD" ]]); then
7177
printf 'Intermediate tar directory: %s\n' "$BCS_TARDIR"
7278
fi
7379
printf 'Volume size for archive: %s\n' "$BCS_VOLUMESIZE"
@@ -83,7 +89,7 @@ Restore()
8389
printf '|| Running Bacchus restore operation ||\n'
8490
printf ' =====================================\n'
8591
PrintOptions
86-
if [[ "$BCS_DECRYPTDIR" != "." ]] && [[ -n "$BCS_PASSWORD" ]]; then
92+
if [[ -n "$BCS_PASSWORD" ]] && [[ "$BCS_RAMDISK" == "off" ]]; then
8793
printf 'Intermediate decryption directory: %s\n' "$BCS_DECRYPTDIR"
8894
fi
8995
printf '\n'

0 commit comments

Comments
 (0)