{
  "schema_version": 1,
  "channel": "homelab-runtime",
  "command_id": "BACKUP-VM-DUMP-CONSISTENCY-078",
  "status": "OK",
  "rc": 0,
  "host": "pve01",
  "mode": "read-only",
  "component": "backup-audit",
  "started_at_utc": "2026-07-21T12:55:03Z",
  "finished_at_utc": "2026-07-21T12:55:04Z",
  "reference_register_checked": true,
  "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
  "error_register_checked": true,
  "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752",
  "command_sha256": "876c832ac6a555af28ff29ccdceb28c79e7244a361f277e9278a8f75b65caad5",
  "duplicate_failed_command_blocked": false,
  "block_reason": null,
  "execution_started": true,
  "changes_made": false,
  "sanitized": true,
  "secrets_included": false,
  "private_addresses_included": false,
  "raw_evidence_retained_locally": true,
  "raw_evidence_sha256": "02a6668400353ad78630dc31cad6ae25943bc9bd92bc8aff5a46cc2f4dc89d8f",
  "sanitized_output_sha256": "02a6668400353ad78630dc31cad6ae25943bc9bd92bc8aff5a46cc2f4dc89d8f",
  "output_truncated_in_json": false,
  "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
  "output": "========== NODE=pve01 ==========\n1de52eb4ddb17b0ecff2cf3f3021e65b92e91fb44416f97943c51e248c512ed6  /usr/local/sbin/homelab-vm-local-dumps-2cloud\n30:CHKS=\"$WORK/checksums.txt\"\n39:echo \"chunk_size_bytes=$CHUNK_SIZE_BYTES\" >> \"$LOG\"\n50:  SIZE=\"$(stat -c %s \"$F\" 2>/dev/null || echo 0)\"\n51:  MT=\"$(date -u -d \"@$(stat -c %Y \"$F\" 2>/dev/null || echo 0)\" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || echo unknown)\"\n55:  SHA=\"$(sha256sum \"$F\" | cut -d\" \" -f1)\"\n64:    rm -rf \"$CDIR\"\n66:    echo \"SPLIT file=$BN size=$SIZE chunk_size=$CHUNK_SIZE_SPLIT dir=$CDIR\" >> \"$LOG\"\n69:    (cd \"$CDIR\" && sha256sum part-* > chunks.sha256)\n83:job,node,ts,vmids,count,total,chunked,chunk_size,tsv=sys.argv[1:]\n91:            \"size_bytes\":int(p[2]),\n92:            \"sha256\":p[3],\n107:    \"chunk_size_bytes\":int(chunk_size),\n112:DEST_A=\"${REMOTE_A%/}/${NODE}/vm-local-dumps/${JOB_ID}\"\n113:DEST_B=\"${REMOTE_B%/}/${NODE}/vm-local-dumps/${JOB_ID}\"\n116:  DEST=\"$1\"\n117:  rclone mkdir \"$DEST/files\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n118:  while IFS=\"$(printf \"\\t\")\" read -r id kind size sha mt bn path mode parts; do\n121:      echo \"UPLOAD_CHUNKED dest=$DEST file=$bn size=$size parts=$parts\" >> \"$LOG\"\n122:      rclone mkdir \"$DEST/files/$bn.chunks\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n126:        rclone copyto \"$part\" \"$DEST/files/$bn.chunks/$pn\" --transfers 1 --checkers 4 >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n128:      rclone copyto \"$CDIR/chunks.sha256\" \"$DEST/files/$bn.chunks/chunks.sha256\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n130:      echo \"UPLOAD_DIRECT dest=$DEST file=$bn size=$size\" >> \"$LOG\"\n131:      rclone copyto \"$path\" \"$DEST/files/$bn\" --transfers 1 --checkers 4 >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n135:  rclone copyto \"$CHKS\" \"$DEST/checksums.txt\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n136:  rclone copyto \"$FILES_TSV\" \"$DEST/files.tsv\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n137:  rclone copyto \"$MAN\" \"$DEST/manifest.json\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n142:  DEST=\"$2\"\n144:  rm -rf \"$VBASE\"\n146:  rclone copyto \"$DEST/manifest.json\" \"$VBASE/manifest.json\" >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n149:  while IFS=\"$(printf \"\\t\")\" read -r id kind size sha mt bn path mode parts; do\n154:      rclone copy \"$DEST/files/$bn.chunks\" \"$VDIR\" --filter \"+ part-*\" --filter \"+ chunks.sha256\" --filter \"- *\" --transfers 1 --checkers 4 >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n155:      (cd \"$VDIR\" && sha256sum -c chunks.sha256) >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n156:      CALC=\"$(find \"$VDIR\" -maxdepth 1 -type f -name 'part-*' | sort | xargs cat | sha256sum | cut -d\" \" -f1)\"\n163:      rm -rf \"$VDIR\"\n166:      rclone copyto \"$DEST/files/$bn\" \"$VBASE/$bn\" --transfers 1 >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n167:      printf \"%s  %s\\n\" \"$sha\" \"$VBASE/$bn\" | sha256sum -c - >> \"$LOG\" 2>&1 || BAD=$((BAD+1))\n168:      rm -f \"$VBASE/$bn\"\n171:  rm -rf \"$VBASE\"\n175:  upload_one_dest \"$DEST_A\"\n176:  upload_one_dest \"$DEST_B\"\n180:  verify_one_dest \"A\" \"$DEST_A\"\n181:  verify_one_dest \"B\" \"$DEST_B\"\n184:rm -rf \"$VERIFY_ROOT/$JOB_ID\"\n185:rm -rf \"$CHUNK_ROOT/$JOB_ID\"\n191:  --arg status \"$STATUS\" \\\n193:  --arg remote_a \"$DEST_A\" \\\n194:  --arg remote_b \"$DEST_B\" \\\n198:  --argjson chunk_size_bytes \"$CHUNK_SIZE_BYTES\" \\\n200:  \"{job_id:\\$job_id,status:\\$status,node:\\$node,remote_a:\\$remote_a,remote_b:\\$remote_b,count:\\$count,total_bytes:\\$total_bytes,chunked_count:\\$chunked_count,chunk_size_bytes:\\$chunk_size_bytes,log:\\$log,local_dumps_deleted:false}\" \\\n203:echo \"STATUS=$STATUS TS=$TS TYPE=vm-local-dumps-cloud BAD=$BAD COUNT=$COUNT CHUNKED=$CHUNKED TOTAL_BYTES=$TOTAL JOB=$JOB_ID REMOTE_A=$DEST_A REMOTE_B=$DEST_B LOG=$LOG\" > \"$OUT\"\nResult=success\nExecMainStatus=0\nNextElapseUSecRealtime=Sun 2026-07-26 10:29:15 MSK\nActiveState=active\nUnitFileState=enabled\nLOCAL_FILES=24 LOCAL_BYTES=30273877574\n========== NODE=pve02 ==========\nbash: /usr/local/sbin/homelab-vm-local-dumps-2cloud: No such file or directory\nsha256sum: /usr/local/sbin/homelab-vm-local-dumps-2cloud: No such file or directory\ngrep: /usr/local/sbin/homelab-vm-local-dumps-2cloud: No such file or directory\nResult=success\nExecMainStatus=0\nNextElapseUSecRealtime=\nActiveState=inactive\nUnitFileState=\nLOCAL_FILES=23 LOCAL_BYTES=3888168125\n========== NODE=pve03 ==========\nbash: /usr/local/sbin/homelab-vm-local-dumps-2cloud: No such file or directory\nsha256sum: /usr/local/sbin/homelab-vm-local-dumps-2cloud: No such file or directory\ngrep: /usr/local/sbin/homelab-vm-local-dumps-2cloud: No such file or directory\nResult=success\nExecMainStatus=0\nNextElapseUSecRealtime=\nActiveState=inactive\nUnitFileState=\nLOCAL_FILES=20 LOCAL_BYTES=47769002980\nVM_DUMP_CONSISTENCY=COMPLETE\n"
}
