diff --git a/runtime/history/HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440.json b/runtime/history/HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440.json new file mode 100644 index 0000000..ad79a78 --- /dev/null +++ b/runtime/history/HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "change", + "component": "cluster-audit", + "started_at_utc": "2026-07-24T10:28:05Z", + "finished_at_utc": "2026-07-24T10:35:45Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", + "command_sha256": "5fbf22e07d1db9c0117f8782b417423dbbd8802d6a6fa5c60cb2818b09508a5e", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "changes_made": true, + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5", + "sanitized_output_sha256": "7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "DETAIL=RUNTIME_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115\nDETAIL=DESIRED_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115\nDETAIL=SELECTED_ARCHIVE=VMID:110|PATH:/var/lib/vz/dump/vzdump-lxc-110-2026_07_24-03_30_02.tar.zst|BYTES:339140622\nDETAIL=SELECTED_ARCHIVE=VMID:112|PATH:/var/lib/vz/dump/vzdump-lxc-112-2026_07_24-03_30_11.tar.zst|BYTES:222859457\nDETAIL=SELECTED_ARCHIVE=VMID:150|PATH:/var/lib/vz/dump/vzdump-qemu-150-2026_07_24-03_30_16.vma.zst|BYTES:7016624549\nDETAIL=SELECTED_COUNT=3\nDETAIL=SELECTED_TOTAL_BYTES=7578624628\nDETAIL=DUAL_CLOUD_PROCESSING=STARTED\nDETAIL=JOB_ID=homelab-pve01-vm-local-dumps-20260724T102808Z\nDETAIL=CLOUD_A_VERIFIED_FILES=3\nDETAIL=CLOUD_B_VERIFIED_FILES=3\nDETAIL=LOCAL_PAYLOAD_DELETED_COUNT=3\nDETAIL=LOCAL_PAYLOAD_DELETED_BYTES=7578624628\nDETAIL=LOCAL_DELETE_CONFIRMATION=PASS\nDETAIL=REMAINING_ARCHIVE_COUNT=9\nDETAIL=REMAINING_ARCHIVE_BYTES=22765412937\nDETAIL=SERVICE_RESULT=SUCCESS\nDETAIL=LATEST_DUAL_CLOUD_VERIFY_DELETE=PASS\nCHANGES_MADE=YES\n" +} diff --git a/runtime/history/HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440.txt b/runtime/history/HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440.txt new file mode 100644 index 0000000..59ca780 --- /dev/null +++ b/runtime/history/HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440.txt @@ -0,0 +1,43 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440 +STATUS=OK +RC=0 +HOST=pve01 +MODE=change +COMPONENT=cluster-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +COMMAND_SHA256=5fbf22e07d1db9c0117f8782b417423dbbd8802d6a6fa5c60cb2818b09508a5e +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=true +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5 +SANITIZED_OUTPUT_SHA256=7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5 +OUTPUT_BEGIN +DETAIL=RUNTIME_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115 +DETAIL=DESIRED_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115 +DETAIL=SELECTED_ARCHIVE=VMID:110|PATH:/var/lib/vz/dump/vzdump-lxc-110-2026_07_24-03_30_02.tar.zst|BYTES:339140622 +DETAIL=SELECTED_ARCHIVE=VMID:112|PATH:/var/lib/vz/dump/vzdump-lxc-112-2026_07_24-03_30_11.tar.zst|BYTES:222859457 +DETAIL=SELECTED_ARCHIVE=VMID:150|PATH:/var/lib/vz/dump/vzdump-qemu-150-2026_07_24-03_30_16.vma.zst|BYTES:7016624549 +DETAIL=SELECTED_COUNT=3 +DETAIL=SELECTED_TOTAL_BYTES=7578624628 +DETAIL=DUAL_CLOUD_PROCESSING=STARTED +DETAIL=JOB_ID=homelab-pve01-vm-local-dumps-20260724T102808Z +DETAIL=CLOUD_A_VERIFIED_FILES=3 +DETAIL=CLOUD_B_VERIFIED_FILES=3 +DETAIL=LOCAL_PAYLOAD_DELETED_COUNT=3 +DETAIL=LOCAL_PAYLOAD_DELETED_BYTES=7578624628 +DETAIL=LOCAL_DELETE_CONFIRMATION=PASS +DETAIL=REMAINING_ARCHIVE_COUNT=9 +DETAIL=REMAINING_ARCHIVE_BYTES=22765412937 +DETAIL=SERVICE_RESULT=SUCCESS +DETAIL=LATEST_DUAL_CLOUD_VERIFY_DELETE=PASS +CHANGES_MADE=YES + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index de26548..ad79a78 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,30 +1,30 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "HOMELAB-VM-2CLOUD-FILESET-TRACE-439", + "command_id": "HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440", "status": "OK", "rc": 0, "host": "pve01", - "mode": "read-only", + "mode": "change", "component": "cluster-audit", - "started_at_utc": "2026-07-24T10:23:03Z", - "finished_at_utc": "2026-07-24T10:23:03Z", + "started_at_utc": "2026-07-24T10:28:05Z", + "finished_at_utc": "2026-07-24T10:35:45Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", - "command_sha256": "83fd063427bb5f7d0ab471a7f689bc234ac30842988be5c364a0bf8ce043f395", + "command_sha256": "5fbf22e07d1db9c0117f8782b417423dbbd8802d6a6fa5c60cb2818b09508a5e", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "changes_made": false, + "changes_made": true, "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "fbfb933d600dfcd687148901187dd377972d1044a5d915a6f8f9bc1e06e64ad1", - "sanitized_output_sha256": "fbfb933d600dfcd687148901187dd377972d1044a5d915a6f8f9bc1e06e64ad1", + "raw_evidence_sha256": "7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5", + "sanitized_output_sha256": "7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "DETAIL=SCRIPT_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115\nDETAIL=FILESET_SOURCE_BEGIN\nDETAIL=SOURCE_LINE=0026:WORK=\"$ROOT/$JOB_ID\"\nDETAIL=SOURCE_LINE=0027:mkdir -p \"$WORK\"\nDETAIL=SOURCE_LINE=0028:\nDETAIL=SOURCE_LINE=0029:FILES_TSV=\"$WORK/files.tsv\"\nDETAIL=SOURCE_LINE=0030:CHKS=\"$WORK/checksums.txt\"\nDETAIL=SOURCE_LINE=0031:MAN=\"$WORK/manifest.json\"\nDETAIL=SOURCE_LINE=0032:\nDETAIL=SOURCE_LINE=0033:: > \"$FILES_TSV\"\nDETAIL=SOURCE_LINE=0034:: > \"$CHKS\"\nDETAIL=SOURCE_LINE=0035:: > \"$LOG\"\nDETAIL=SOURCE_LINE=0036:\nDETAIL=SOURCE_LINE=0037:echo \"job_id=$JOB_ID\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0038:echo \"vmids=$VMIDS\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0039:echo \"chunk_size_bytes=$CHUNK_SIZE_BYTES\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0040:\nDETAIL=SOURCE_LINE=0041:for id in $VMIDS; do\nDETAIL=SOURCE_LINE=0042: F=\"$(find /var/lib/vz/dump -maxdepth 1 -type f \\( -name \"vzdump-qemu-${id}-*.vma.zst\" -o -name \"vzdump-lxc-${id}-*.tar.zst\" \\) -printf \"%T@ %p\\n\" 2>/dev/null | sort -n | tail -n 1 | cut -d\" \" -f2-)\"\nDETAIL=SOURCE_LINE=0043: if [ -z \"$F\" ] || [ ! -f \"$F\" ]; then\nDETAIL=SOURCE_LINE=0044: echo \"MISSING vmid=$id\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0045: BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0046: continue\nDETAIL=SOURCE_LINE=0047: fi\nDETAIL=SOURCE_LINE=0048:\nDETAIL=SOURCE_LINE=0049: BN=\"$(basename \"$F\")\"\nDETAIL=SOURCE_LINE=0050: SIZE=\"$(stat -c %s \"$F\" 2>/dev/null || echo 0)\"\nDETAIL=SOURCE_LINE=0051: MT=\"$(date -u -d \"@$(stat -c %Y \"$F\" 2>/dev/null || echo 0)\" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || echo unknown)\"\nDETAIL=SOURCE_LINE=0052: KIND=\"unknown\"\nDETAIL=SOURCE_LINE=0053: echo \"$BN\" | grep -q \"^vzdump-qemu-\" && KIND=\"qemu\"\nDETAIL=SOURCE_LINE=0054: echo \"$BN\" | grep -q \"^vzdump-lxc-\" && KIND=\"lxc\"\nDETAIL=SOURCE_LINE=0055: SHA=\"$(sha256sum \"$F\" | cut -d\" \" -f1)\"\nDETAIL=SOURCE_LINE=0056: printf \"%s %s\\n\" \"$SHA\" \"$BN\" >> \"$CHKS\"\nDETAIL=SOURCE_LINE=0057:\nDETAIL=SOURCE_LINE=0058: MODE=\"direct\"\nDETAIL=SOURCE_LINE=0059: PARTS=0\nDETAIL=SOURCE_LINE=...\nDETAIL=SOURCE_LINE=0065: mkdir -p \"$CDIR\"\nDETAIL=SOURCE_LINE=0066: echo \"SPLIT file=$BN size=$SIZE chunk_size=$CHUNK_SIZE_SPLIT dir=$CDIR\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0067: split -b \"$CHUNK_SIZE_SPLIT\" -d -a 4 \"$F\" \"$CDIR/part-\" >> \"$LOG\" 2>&1\nDETAIL=SOURCE_LINE=0068: PARTS=\"$(find \"$CDIR\" -maxdepth 1 -type f -name 'part-*' | wc -l)\"\nDETAIL=SOURCE_LINE=0069: (cd \"$CDIR\" && sha256sum part-* > chunks.sha256)\nDETAIL=SOURCE_LINE=0070: if [ \"$PARTS\" -le 0 ]; then\nDETAIL=SOURCE_LINE=0071: echo \"BAD split produced no chunks file=$BN\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0072: BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0073: fi\nDETAIL=SOURCE_LINE=0074: fi\nDETAIL=SOURCE_LINE=0075:\nDETAIL=SOURCE_LINE=0076: printf \"%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\n\" \"$id\" \"$KIND\" \"$SIZE\" \"$SHA\" \"$MT\" \"$BN\" \"$F\" \"$MODE\" \"$PARTS\" >> \"$FILES_TSV\"\nDETAIL=SOURCE_LINE=0077: COUNT=$((COUNT+1))\nDETAIL=SOURCE_LINE=0078: TOTAL=$((TOTAL+SIZE))\nDETAIL=SOURCE_LINE=0079:done\nDETAIL=SOURCE_LINE=0080:\nDETAIL=SOURCE_LINE=0081:python3 - \"$JOB_ID\" \"$NODE\" \"$TS\" \"$VMIDS\" \"$COUNT\" \"$TOTAL\" \"$CHUNKED\" \"$CHUNK_SIZE_BYTES\" \"$FILES_TSV\" > \"$MAN\" <<'PY'\nDETAIL=SOURCE_LINE=0082:import json, sys, pathlib\nDETAIL=SOURCE_LINE=0083:job,node,ts,vmids,count,total,chunked,chunk_size,tsv=sys.argv[1:]\nDETAIL=SOURCE_LINE=0084:items=[]\nDETAIL=SOURCE_LINE=0085:for line in pathlib.Path(tsv).read_text().splitlines():\nDETAIL=SOURCE_LINE=0086: p=line.split(\"\\t\")\nDETAIL=SOURCE_LINE=0087: if len(p)>=9:\nDETAIL=SOURCE_LINE=0088: items.append({\nDETAIL=SOURCE_LINE=0089: \"vmid\":p[0],\nDETAIL=SOURCE_LINE=...\nDETAIL=SOURCE_LINE=0120: CDIR=\"$CHUNK_ROOT/$JOB_ID/$bn.chunks\"\nDETAIL=SOURCE_LINE=0121: echo \"UPLOAD_CHUNKED dest=$DEST file=$bn size=$size parts=$parts\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0122: rclone mkdir \"$DEST/files/$bn.chunks\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0123: for part in \"$CDIR\"/part-*; do\nDETAIL=SOURCE_LINE=0124: [ -f \"$part\" ] || continue\nDETAIL=SOURCE_LINE=0125: pn=\"$(basename \"$part\")\"\nDETAIL=SOURCE_LINE=0126: rclone copyto \"$part\" \"$DEST/files/$bn.chunks/$pn\" --transfers 1 --checkers 4 >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0127: done\nDETAIL=SOURCE_LINE=...\nDETAIL=SOURCE_LINE=0130: echo \"UPLOAD_DIRECT dest=$DEST file=$bn size=$size\" >> \"$LOG\"\nDETAIL=SOURCE_LINE=0131: rclone copyto \"$path\" \"$DEST/files/$bn\" --transfers 1 --checkers 4 >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0132: fi\nDETAIL=SOURCE_LINE=0133: done < \"$FILES_TSV\"\nDETAIL=SOURCE_LINE=0134:\nDETAIL=SOURCE_LINE=0135: rclone copyto \"$CHKS\" \"$DEST/checksums.txt\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0136: rclone copyto \"$FILES_TSV\" \"$DEST/files.tsv\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0137: rclone copyto \"$MAN\" \"$DEST/manifest.json\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\nDETAIL=SOURCE_LINE=0138:}\nDETAIL=SOURCE_LINE=0139:\nDETAIL=SOURCE_LINE=0140:verify_one_dest() {\nDETAIL=FILESET_SOURCE_END\nDETAIL=ARCHIVES_CHANGED=NO\nDETAIL=SERVICE_STARTED=NO\nDETAIL=SECRET_VALUES_OUTPUT=NONE\nDETAIL=FILESET_TRACE=PASS\nCHANGES_MADE=NO\n" + "output": "DETAIL=RUNTIME_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115\nDETAIL=DESIRED_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115\nDETAIL=SELECTED_ARCHIVE=VMID:110|PATH:/var/lib/vz/dump/vzdump-lxc-110-2026_07_24-03_30_02.tar.zst|BYTES:339140622\nDETAIL=SELECTED_ARCHIVE=VMID:112|PATH:/var/lib/vz/dump/vzdump-lxc-112-2026_07_24-03_30_11.tar.zst|BYTES:222859457\nDETAIL=SELECTED_ARCHIVE=VMID:150|PATH:/var/lib/vz/dump/vzdump-qemu-150-2026_07_24-03_30_16.vma.zst|BYTES:7016624549\nDETAIL=SELECTED_COUNT=3\nDETAIL=SELECTED_TOTAL_BYTES=7578624628\nDETAIL=DUAL_CLOUD_PROCESSING=STARTED\nDETAIL=JOB_ID=homelab-pve01-vm-local-dumps-20260724T102808Z\nDETAIL=CLOUD_A_VERIFIED_FILES=3\nDETAIL=CLOUD_B_VERIFIED_FILES=3\nDETAIL=LOCAL_PAYLOAD_DELETED_COUNT=3\nDETAIL=LOCAL_PAYLOAD_DELETED_BYTES=7578624628\nDETAIL=LOCAL_DELETE_CONFIRMATION=PASS\nDETAIL=REMAINING_ARCHIVE_COUNT=9\nDETAIL=REMAINING_ARCHIVE_BYTES=22765412937\nDETAIL=SERVICE_RESULT=SUCCESS\nDETAIL=LATEST_DUAL_CLOUD_VERIFY_DELETE=PASS\nCHANGES_MADE=YES\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index f9570d5..59ca780 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,113 +1,43 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HOMELAB-VM-2CLOUD-FILESET-TRACE-439 +COMMAND_ID=HOMELAB-VM-LATEST-2CLOUD-VERIFY-DELETE-440 STATUS=OK RC=0 HOST=pve01 -MODE=read-only +MODE=change COMPONENT=cluster-audit REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 -COMMAND_SHA256=83fd063427bb5f7d0ab471a7f689bc234ac30842988be5c364a0bf8ce043f395 +COMMAND_SHA256=5fbf22e07d1db9c0117f8782b417423dbbd8802d6a6fa5c60cb2818b09508a5e DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGES_MADE=false +CHANGES_MADE=true SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=fbfb933d600dfcd687148901187dd377972d1044a5d915a6f8f9bc1e06e64ad1 -SANITIZED_OUTPUT_SHA256=fbfb933d600dfcd687148901187dd377972d1044a5d915a6f8f9bc1e06e64ad1 +RAW_EVIDENCE_SHA256=7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5 +SANITIZED_OUTPUT_SHA256=7a3b7a3838627adcab82b8622b01997aae41809c333b88f941cb5855adedf5a5 OUTPUT_BEGIN -DETAIL=SCRIPT_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115 -DETAIL=FILESET_SOURCE_BEGIN -DETAIL=SOURCE_LINE=0026:WORK="$ROOT/$JOB_ID" -DETAIL=SOURCE_LINE=0027:mkdir -p "$WORK" -DETAIL=SOURCE_LINE=0028: -DETAIL=SOURCE_LINE=0029:FILES_TSV="$WORK/files.tsv" -DETAIL=SOURCE_LINE=0030:CHKS="$WORK/checksums.txt" -DETAIL=SOURCE_LINE=0031:MAN="$WORK/manifest.json" -DETAIL=SOURCE_LINE=0032: -DETAIL=SOURCE_LINE=0033:: > "$FILES_TSV" -DETAIL=SOURCE_LINE=0034:: > "$CHKS" -DETAIL=SOURCE_LINE=0035:: > "$LOG" -DETAIL=SOURCE_LINE=0036: -DETAIL=SOURCE_LINE=0037:echo "job_id=$JOB_ID" >> "$LOG" -DETAIL=SOURCE_LINE=0038:echo "vmids=$VMIDS" >> "$LOG" -DETAIL=SOURCE_LINE=0039:echo "chunk_size_bytes=$CHUNK_SIZE_BYTES" >> "$LOG" -DETAIL=SOURCE_LINE=0040: -DETAIL=SOURCE_LINE=0041:for id in $VMIDS; do -DETAIL=SOURCE_LINE=0042: F="$(find /var/lib/vz/dump -maxdepth 1 -type f \( -name "vzdump-qemu-${id}-*.vma.zst" -o -name "vzdump-lxc-${id}-*.tar.zst" \) -printf "%T@ %p\n" 2>/dev/null | sort -n | tail -n 1 | cut -d" " -f2-)" -DETAIL=SOURCE_LINE=0043: if [ -z "$F" ] || [ ! -f "$F" ]; then -DETAIL=SOURCE_LINE=0044: echo "MISSING vmid=$id" >> "$LOG" -DETAIL=SOURCE_LINE=0045: BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0046: continue -DETAIL=SOURCE_LINE=0047: fi -DETAIL=SOURCE_LINE=0048: -DETAIL=SOURCE_LINE=0049: BN="$(basename "$F")" -DETAIL=SOURCE_LINE=0050: SIZE="$(stat -c %s "$F" 2>/dev/null || echo 0)" -DETAIL=SOURCE_LINE=0051: MT="$(date -u -d "@$(stat -c %Y "$F" 2>/dev/null || echo 0)" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || echo unknown)" -DETAIL=SOURCE_LINE=0052: KIND="unknown" -DETAIL=SOURCE_LINE=0053: echo "$BN" | grep -q "^vzdump-qemu-" && KIND="qemu" -DETAIL=SOURCE_LINE=0054: echo "$BN" | grep -q "^vzdump-lxc-" && KIND="lxc" -DETAIL=SOURCE_LINE=0055: SHA="$(sha256sum "$F" | cut -d" " -f1)" -DETAIL=SOURCE_LINE=0056: printf "%s %s\n" "$SHA" "$BN" >> "$CHKS" -DETAIL=SOURCE_LINE=0057: -DETAIL=SOURCE_LINE=0058: MODE="direct" -DETAIL=SOURCE_LINE=0059: PARTS=0 -DETAIL=SOURCE_LINE=... -DETAIL=SOURCE_LINE=0065: mkdir -p "$CDIR" -DETAIL=SOURCE_LINE=0066: echo "SPLIT file=$BN size=$SIZE chunk_size=$CHUNK_SIZE_SPLIT dir=$CDIR" >> "$LOG" -DETAIL=SOURCE_LINE=0067: split -b "$CHUNK_SIZE_SPLIT" -d -a 4 "$F" "$CDIR/part-" >> "$LOG" 2>&1 -DETAIL=SOURCE_LINE=0068: PARTS="$(find "$CDIR" -maxdepth 1 -type f -name 'part-*' | wc -l)" -DETAIL=SOURCE_LINE=0069: (cd "$CDIR" && sha256sum part-* > chunks.sha256) -DETAIL=SOURCE_LINE=0070: if [ "$PARTS" -le 0 ]; then -DETAIL=SOURCE_LINE=0071: echo "BAD split produced no chunks file=$BN" >> "$LOG" -DETAIL=SOURCE_LINE=0072: BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0073: fi -DETAIL=SOURCE_LINE=0074: fi -DETAIL=SOURCE_LINE=0075: -DETAIL=SOURCE_LINE=0076: printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "$id" "$KIND" "$SIZE" "$SHA" "$MT" "$BN" "$F" "$MODE" "$PARTS" >> "$FILES_TSV" -DETAIL=SOURCE_LINE=0077: COUNT=$((COUNT+1)) -DETAIL=SOURCE_LINE=0078: TOTAL=$((TOTAL+SIZE)) -DETAIL=SOURCE_LINE=0079:done -DETAIL=SOURCE_LINE=0080: -DETAIL=SOURCE_LINE=0081:python3 - "$JOB_ID" "$NODE" "$TS" "$VMIDS" "$COUNT" "$TOTAL" "$CHUNKED" "$CHUNK_SIZE_BYTES" "$FILES_TSV" > "$MAN" <<'PY' -DETAIL=SOURCE_LINE=0082:import json, sys, pathlib -DETAIL=SOURCE_LINE=0083:job,node,ts,vmids,count,total,chunked,chunk_size,tsv=sys.argv[1:] -DETAIL=SOURCE_LINE=0084:items=[] -DETAIL=SOURCE_LINE=0085:for line in pathlib.Path(tsv).read_text().splitlines(): -DETAIL=SOURCE_LINE=0086: p=line.split("\t") -DETAIL=SOURCE_LINE=0087: if len(p)>=9: -DETAIL=SOURCE_LINE=0088: items.append({ -DETAIL=SOURCE_LINE=0089: "vmid":p[0], -DETAIL=SOURCE_LINE=... -DETAIL=SOURCE_LINE=0120: CDIR="$CHUNK_ROOT/$JOB_ID/$bn.chunks" -DETAIL=SOURCE_LINE=0121: echo "UPLOAD_CHUNKED dest=$DEST file=$bn size=$size parts=$parts" >> "$LOG" -DETAIL=SOURCE_LINE=0122: rclone mkdir "$DEST/files/$bn.chunks" >> "$LOG" 2>&1 || BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0123: for part in "$CDIR"/part-*; do -DETAIL=SOURCE_LINE=0124: [ -f "$part" ] || continue -DETAIL=SOURCE_LINE=0125: pn="$(basename "$part")" -DETAIL=SOURCE_LINE=0126: rclone copyto "$part" "$DEST/files/$bn.chunks/$pn" --transfers 1 --checkers 4 >> "$LOG" 2>&1 || BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0127: done -DETAIL=SOURCE_LINE=... -DETAIL=SOURCE_LINE=0130: echo "UPLOAD_DIRECT dest=$DEST file=$bn size=$size" >> "$LOG" -DETAIL=SOURCE_LINE=0131: rclone copyto "$path" "$DEST/files/$bn" --transfers 1 --checkers 4 >> "$LOG" 2>&1 || BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0132: fi -DETAIL=SOURCE_LINE=0133: done < "$FILES_TSV" -DETAIL=SOURCE_LINE=0134: -DETAIL=SOURCE_LINE=0135: rclone copyto "$CHKS" "$DEST/checksums.txt" >> "$LOG" 2>&1 || BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0136: rclone copyto "$FILES_TSV" "$DEST/files.tsv" >> "$LOG" 2>&1 || BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0137: rclone copyto "$MAN" "$DEST/manifest.json" >> "$LOG" 2>&1 || BAD=$((BAD+1)) -DETAIL=SOURCE_LINE=0138:} -DETAIL=SOURCE_LINE=0139: -DETAIL=SOURCE_LINE=0140:verify_one_dest() { -DETAIL=FILESET_SOURCE_END -DETAIL=ARCHIVES_CHANGED=NO -DETAIL=SERVICE_STARTED=NO -DETAIL=SECRET_VALUES_OUTPUT=NONE -DETAIL=FILESET_TRACE=PASS -CHANGES_MADE=NO +DETAIL=RUNTIME_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115 +DETAIL=DESIRED_SHA256=0ded6ba72e49b9cf7522c7f3d8840cc1026d2a173d4909dd3b4cfc5ff8831115 +DETAIL=SELECTED_ARCHIVE=VMID:110|PATH:/var/lib/vz/dump/vzdump-lxc-110-2026_07_24-03_30_02.tar.zst|BYTES:339140622 +DETAIL=SELECTED_ARCHIVE=VMID:112|PATH:/var/lib/vz/dump/vzdump-lxc-112-2026_07_24-03_30_11.tar.zst|BYTES:222859457 +DETAIL=SELECTED_ARCHIVE=VMID:150|PATH:/var/lib/vz/dump/vzdump-qemu-150-2026_07_24-03_30_16.vma.zst|BYTES:7016624549 +DETAIL=SELECTED_COUNT=3 +DETAIL=SELECTED_TOTAL_BYTES=7578624628 +DETAIL=DUAL_CLOUD_PROCESSING=STARTED +DETAIL=JOB_ID=homelab-pve01-vm-local-dumps-20260724T102808Z +DETAIL=CLOUD_A_VERIFIED_FILES=3 +DETAIL=CLOUD_B_VERIFIED_FILES=3 +DETAIL=LOCAL_PAYLOAD_DELETED_COUNT=3 +DETAIL=LOCAL_PAYLOAD_DELETED_BYTES=7578624628 +DETAIL=LOCAL_DELETE_CONFIRMATION=PASS +DETAIL=REMAINING_ARCHIVE_COUNT=9 +DETAIL=REMAINING_ARCHIVE_BYTES=22765412937 +DETAIL=SERVICE_RESULT=SUCCESS +DETAIL=LATEST_DUAL_CLOUD_VERIFY_DELETE=PASS +CHANGES_MADE=YES OUTPUT_END CHAT_OUTPUT_END