progress
This commit is contained in:
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -o pipefail
|
||||
|
||||
echo "*** START $0 ${*}"
|
||||
|
||||
# ------- Settings
|
||||
MAX_AGE_DAYS=1
|
||||
|
||||
SourceHost=hl-storage.cvtt.vpn
|
||||
SourceDir=/works/qcow2/shrunk
|
||||
|
||||
DownloadTgtDir=/opt/vm_drive/shrunk
|
||||
|
||||
# ------- Settings
|
||||
|
||||
download_latest() {
|
||||
local ssh_opts=(
|
||||
-o StrictHostKeyChecking=accept-new
|
||||
)
|
||||
|
||||
local rsync_rsh="ssh -o StrictHostKeyChecking=accept-new"
|
||||
|
||||
local FindCmd=(
|
||||
ssh
|
||||
"${ssh_opts[@]}"
|
||||
"$SourceHost"
|
||||
find "$SourceDir"
|
||||
-type f
|
||||
"-mtime -${MAX_AGE_DAYS}"
|
||||
"-printf '%P\0'"
|
||||
)
|
||||
|
||||
local RsyncCmd=(
|
||||
rsync
|
||||
-avh
|
||||
--progress
|
||||
--partial
|
||||
--append-verify
|
||||
-n
|
||||
--from0
|
||||
--files-from=-
|
||||
"-e $rsync_rsh"
|
||||
"${SourceHost}:${SourceDir}/"
|
||||
"${DownloadTgtDir}/"
|
||||
)
|
||||
|
||||
echo "-------------------"
|
||||
echo "Running:"
|
||||
set -x
|
||||
"${FindCmd[@]}" | "${RsyncCmd[@]}"
|
||||
{ set +x; } 2>/dev/null
|
||||
}
|
||||
|
||||
echo "-------------------"
|
||||
echo "Downloading files from ${SourceHost}:${SourceDir}"
|
||||
download_latest
|
||||
echo "-------------------"
|
||||
echo "Download completed"
|
||||
|
||||
echo "*** DONE: ${0} ${*}"
|
||||
Executable
+115
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env bash
|
||||
set -o pipefail
|
||||
|
||||
echo "*** START $0 ${*}"
|
||||
|
||||
# ------- Settings
|
||||
MAX_AGE_DAYS=1
|
||||
|
||||
SourceHost=office-oleg-02.cvtt.vpn
|
||||
SourceDir=/localdisk/backup/qcow2
|
||||
|
||||
DownloadTgtDir=/mnt/host_usb3/qcow2
|
||||
|
||||
ShrunkDir=/mnt/host_usb3/qcow2/shrunk
|
||||
TmpDir=/mnt/host_usb3/tmp
|
||||
# ------- Settings
|
||||
|
||||
download_latest() {
|
||||
local ssh_opts=(
|
||||
-o StrictHostKeyChecking=accept-new
|
||||
)
|
||||
|
||||
local rsync_rsh="ssh -o StrictHostKeyChecking=accept-new"
|
||||
|
||||
local FindCmd=(
|
||||
ssh
|
||||
"${ssh_opts[@]}"
|
||||
"$SourceHost"
|
||||
find "$SourceDir"
|
||||
-type f
|
||||
"-mtime -${MAX_AGE_DAYS}"
|
||||
"-printf '%P\0'"
|
||||
)
|
||||
|
||||
local RsyncCmd=(
|
||||
rsync
|
||||
# -n
|
||||
-avh
|
||||
--progress
|
||||
--partial
|
||||
--append-verify
|
||||
--from0
|
||||
--files-from=-
|
||||
"-e $rsync_rsh"
|
||||
"${SourceHost}:${SourceDir}/"
|
||||
"${DownloadTgtDir}/"
|
||||
)
|
||||
|
||||
echo "-------------------"
|
||||
echo "Running:"
|
||||
set -x
|
||||
"${FindCmd[@]}" | "${RsyncCmd[@]}"
|
||||
{ set +x; } 2>/dev/null
|
||||
}
|
||||
|
||||
compress_qcow2_file() {
|
||||
local file=${1}
|
||||
local out_file=${2}
|
||||
|
||||
mkdir -p "${ShrunkDir}"
|
||||
mkdir -p "${TmpDir}"
|
||||
|
||||
local ShrunkFile="${out_file}.shrunk"
|
||||
|
||||
echo "Sparsifying file ${file}..."
|
||||
local Cmd="/usr/bin/virt-sparsify"
|
||||
Cmd+=" --check-tmpdir=fail"
|
||||
Cmd+=" --tmp=${TmpDir}"
|
||||
Cmd+=" --compress"
|
||||
if [[ ! -t 1 ]]; then
|
||||
Cmd+=" -q"
|
||||
fi
|
||||
Cmd+=" ${file} ${ShrunkFile}"
|
||||
echo "${Cmd}"
|
||||
${Cmd}
|
||||
|
||||
if [ ${?} -ne 0 ] ; then
|
||||
echo "Compression failed. Removing ${ShrunkFile}"
|
||||
rm "${ShrunkFile}"
|
||||
return 255
|
||||
else
|
||||
filesz=$(stat -c %s "${file}")
|
||||
if [ "${filesz}" == "0" ]; then
|
||||
return 254
|
||||
fi
|
||||
cfilesz=$(stat -c %s "${ShrunkFile}")
|
||||
|
||||
ratio=$((cfilesz * 100 / filesz))
|
||||
echo "Compression is successful. Compression ratio is ${ratio}%"
|
||||
fi
|
||||
echo "*** DONE: $file -> $ShrunkFile"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
echo "-------------------"
|
||||
echo "Downloading files from ${SourceHost}:${SourceDir}"
|
||||
download_latest
|
||||
# exit
|
||||
echo "-------------------"
|
||||
echo "Download completed"
|
||||
|
||||
for qcow2_file in "${DownloadTgtDir}"/*.qcow2; do
|
||||
shrunk_file="${ShrunkDir}/$(basename "${qcow2_file}")"
|
||||
compress_qcow2_file "${qcow2_file}" "${shrunk_file}"
|
||||
if [ ${?} -ne 0 ] ; then
|
||||
echo "ERROR: File ${qcow2_file} compression FAILED"
|
||||
else
|
||||
echo "SUCCESS: File ${qcow2_file} is compressed to ${shrunk_file}"
|
||||
echo "Removing file ${qcow2_file} ..."
|
||||
rm "${qcow2_file}"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "*** DONE $0 ${*}"
|
||||
Reference in New Issue
Block a user