From 055b4d7d761cf3f92d617ac88665c96a930d2965 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Fri, 27 Jun 2025 00:45:36 +0100 Subject: [PATCH] feat(backup): add support for multiple compression methods in backup process --- lgsm/modules/command_backup.sh | 41 +++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/lgsm/modules/command_backup.sh b/lgsm/modules/command_backup.sh index 2c8f4bcda..e8612638f 100644 --- a/lgsm/modules/command_backup.sh +++ b/lgsm/modules/command_backup.sh @@ -110,23 +110,48 @@ fn_backup_create_lockfile() { trap fn_backup_trap INT } +fn_select_compression() { + if command -v zstd > /dev/null 2>&1; then + compress_prog="zstd" + compress_ext="tar.zst" + compress_flag="--zstd" + elif command -v pigz > /dev/null 2>&1; then + compress_prog="pigz" + compress_ext="tar.gz" + compress_flag="--use-compress-program=pigz" + elif command -v gzip > /dev/null 2>&1; then + compress_prog="gzip" + compress_ext="tar.gz" + compress_flag="--gzip" + else + compress_prog="" + compress_ext="tar" + compress_flag="" + fi +} + # Compressing files. fn_backup_compression() { - # Tells how much will be compressed using rootdirduexbackup value from info_distro and prompt for continue. + fn_select_compression + fn_print_info "A total of ${rootdirduexbackup} will be compressed." - fn_script_log_info "A total of ${rootdirduexbackup} will be compressed: ${backupdir}/${backupname}.tar.gz" - fn_print_dots "Backup (${rootdirduexbackup}) ${backupname}.tar.gz, in progress ..." - fn_script_log_info "Backup ${rootdirduexbackup} ${backupname}.tar.gz, in progress" + fn_script_log_info "A total of ${rootdirduexbackup} will be compressed: ${backupdir}/${backupname}.${compress_ext}" + fn_print_dots "Backup (${rootdirduexbackup}) ${backupname}.${compress_ext}, in progress ..." + fn_script_log_info "Backup ${rootdirduexbackup} ${backupname}.${compress_ext}, in progress" excludedir=$(fn_backup_relpath) - # Check that excludedir is a valid path. if [ ! -d "${excludedir}" ]; then fn_print_fail_nl "Problem identifying the previous backup directory for exclusion." fn_script_log_fail "Problem identifying the previous backup directory for exclusion" core_exit.sh fi - tar --use-compress-program=pigz -hcf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" --exclude "${tmpdir}" ./. + if [ -n "${compress_flag}" ]; then + tar ${compress_flag} -hcf "${backupdir}/${backupname}.${compress_ext}" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" --exclude "${tmpdir}" ./. + else + tar -hcf "${backupdir}/${backupname}.${compress_ext}" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" --exclude "${tmpdir}" ./. + fi + exitcode=$? if [ "${exitcode}" -ne 0 ]; then fn_print_fail_eol @@ -136,8 +161,8 @@ fn_backup_compression() { fn_script_log_fail "Starting backup" else fn_print_ok_eol - fn_print_ok_nl "Completed: ${italic}${backupname}.tar.gz${default}, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')" - fn_script_log_pass "Backup created: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')" + fn_print_ok_nl "Completed: ${italic}${backupname}.${compress_ext}${default}, total size $(du -sh "${backupdir}/${backupname}.${compress_ext}" | awk '{print $1}')" + fn_script_log_pass "Backup created: ${backupname}.${compress_ext}, total size $(du -sh "${backupdir}/${backupname}.${compress_ext}" | awk '{print $1}')" alert="backup" alert.sh fi