Files
ethereum-rpc-docker/show-static-file-size.sh
Claude Agent a9e8fba794 static-file list: fleet-verified rewrite + root-vs-suffix matching
Verified static-file dirs across the reachable fleet via per-host cursor inspection
(de-13/14/16/22/27/30/31/32/35, us-16/41, uk-4). Findings:
- nitro freezers are network-prefixed (arbitrum-one/nitro/l2chaindata/ancient ... up to
  1.3 TB), so the old chain/ and data/ prefixes matched nothing;
- missing: snapshots (erigon3/op-erigon/cosmos), lightchaindata/ancient, nested l2geth
  geth/geth/chaindata/ancient, aztec archiver, nitro classic-msg/ancient;
- bare `ancient` matched nothing (all are nested).

List rewritten to canonical entries. Matching (backup-node.sh manifest + show-static-
file-size.sh) now: entry with NO slash = root-level only (so `snapshots` does NOT catch
postgres pg_logical/snapshots), entry WITH a slash = path-suffix via find -path "*/X"
(matches any prefix: network-prefixed nitro, nested datadirs). The manifest now records
the CONCRETE per-volume path so restore-volumes.sh recreates the exact symlink.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 03:22:26 +00:00

57 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
BASEPATH="$(dirname "$0")"
source "$BASEPATH/volume-utils.sh"
static_file_list="$BASEPATH/static-file-path-list.txt"
# Read the JSON input and extract the list of keys
keys=$(get_persistent_volume_keys "/root/rpc/$1.yml")
static_size=0
total_size=0
# Iterate over the list of keys
for key in $keys; do
#echo "checking: /var/lib/docker/volumes/rpc_$key"
prefix="/var/lib/docker/volumes/rpc_$key"
volume_size=$(du -sL $prefix 2>/dev/null | awk '{print $1}')
total_size=$((total_size + volume_size))
# Only check static files if the list exists
if [[ -f "$static_file_list" ]]; then
while IFS= read -r path; do
# Skip empty lines
[[ -z "$path" ]] && continue
# Match rule: an entry with NO slash is root-level only (depth-1 under _data),
# so e.g. `snapshots` won't catch postgres pg_logical/snapshots. An entry WITH a
# slash is a path-suffix, so any prefix matches (network-prefixed nitro freezers
# like arbitrum-one/nitro/l2chaindata/ancient, nested l2geth geth/geth/...).
matches=()
if [[ "$path" == */* ]]; then
while IFS= read -r d; do matches+=("$d"); done < <(find "$prefix/_data" -type d -path "*/$path" 2>/dev/null)
else
[[ -d "$prefix/_data/$path" ]] && matches+=("$prefix/_data/$path")
fi
for m in "${matches[@]}"; do
size=$(du -sL "$m" 2>/dev/null | awk '{print $1}')
static_size=$((static_size + ${size:-0}))
size_formatted=$(echo "$(( ${size:-0} * 1024 ))" | numfmt --to=iec --suffix=B --format="%.2f")
echo "$size_formatted $m" >&2
done
done < "$static_file_list"
fi
done
# Calculate ratio, handling division by zero
if [[ $total_size -eq 0 ]]; then
ratio="0.00"
else
ratio=$(bc -l <<< "scale=2; $static_size/$total_size")
fi
echo "$ratio"