{
  "schema_version": 1,
  "channel": "homelab-runtime",
  "command_id": "HOMELAB-VM-2CLOUD-FILESET-TRACE-439",
  "status": "OK",
  "rc": 0,
  "host": "pve01",
  "mode": "read-only",
  "component": "cluster-audit",
  "started_at_utc": "2026-07-24T10:23:03Z",
  "finished_at_utc": "2026-07-24T10:23:03Z",
  "reference_register_checked": true,
  "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
  "error_register_checked": true,
  "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752",
  "command_sha256": "83fd063427bb5f7d0ab471a7f689bc234ac30842988be5c364a0bf8ce043f395",
  "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": "fbfb933d600dfcd687148901187dd377972d1044a5d915a6f8f9bc1e06e64ad1",
  "sanitized_output_sha256": "fbfb933d600dfcd687148901187dd377972d1044a5d915a6f8f9bc1e06e64ad1",
  "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"
}
