maintenance(pi-usb-scratch): skip k3s runtime rsync during cutover

This commit is contained in:
Brad Stein 2026-04-11 12:11:15 -03:00
parent 7c337ad5a1
commit d9b30d6c5b
2 changed files with 21 additions and 2 deletions

View File

@ -17,6 +17,8 @@ data:
# One-time bootstrap for new sticks that ship exfat/fat32. # One-time bootstrap for new sticks that ship exfat/fat32.
USB_SCRATCH_AUTO_FORMAT_REMOVABLE=true USB_SCRATCH_AUTO_FORMAT_REMOVABLE=true
USB_SCRATCH_AUTO_FORMAT_LABEL=astraios USB_SCRATCH_AUTO_FORMAT_LABEL=astraios
# Keep this false to avoid long rsync hangs on k3s runtime trees.
USB_SCRATCH_SEED_K3S_AGENT_DIRS=false
# Keep /tmp in RAM to reduce SD-card writes. # Keep /tmp in RAM to reduce SD-card writes.
USB_SCRATCH_ENFORCE_TMPFS_TMP=true USB_SCRATCH_ENFORCE_TMPFS_TMP=true
USB_SCRATCH_REQUIRED_FREE_GIB=20 USB_SCRATCH_REQUIRED_FREE_GIB=20

View File

@ -21,6 +21,7 @@ USB_SCRATCH_AUTO_SELECT_REMOVABLE=${USB_SCRATCH_AUTO_SELECT_REMOVABLE:-true}
USB_SCRATCH_AUTO_MIN_SIZE_GIB=${USB_SCRATCH_AUTO_MIN_SIZE_GIB:-50} USB_SCRATCH_AUTO_MIN_SIZE_GIB=${USB_SCRATCH_AUTO_MIN_SIZE_GIB:-50}
USB_SCRATCH_AUTO_FORMAT_REMOVABLE=${USB_SCRATCH_AUTO_FORMAT_REMOVABLE:-true} USB_SCRATCH_AUTO_FORMAT_REMOVABLE=${USB_SCRATCH_AUTO_FORMAT_REMOVABLE:-true}
USB_SCRATCH_AUTO_FORMAT_LABEL=${USB_SCRATCH_AUTO_FORMAT_LABEL:-astraios} USB_SCRATCH_AUTO_FORMAT_LABEL=${USB_SCRATCH_AUTO_FORMAT_LABEL:-astraios}
USB_SCRATCH_SEED_K3S_AGENT_DIRS=${USB_SCRATCH_SEED_K3S_AGENT_DIRS:-false}
USB_SCRATCH_REQUIRED_FREE_GIB=${USB_SCRATCH_REQUIRED_FREE_GIB:-20} USB_SCRATCH_REQUIRED_FREE_GIB=${USB_SCRATCH_REQUIRED_FREE_GIB:-20}
USB_SCRATCH_RECONCILE_INTERVAL_SEC=${USB_SCRATCH_RECONCILE_INTERVAL_SEC:-900} USB_SCRATCH_RECONCILE_INTERVAL_SEC=${USB_SCRATCH_RECONCILE_INTERVAL_SEC:-900}
USB_SCRATCH_CUTOVER_JITTER_MAX_SEC=${USB_SCRATCH_CUTOVER_JITTER_MAX_SEC:-900} USB_SCRATCH_CUTOVER_JITTER_MAX_SEC=${USB_SCRATCH_CUTOVER_JITTER_MAX_SEC:-900}
@ -103,6 +104,7 @@ load_config() {
USB_SCRATCH_AUTO_MIN_SIZE_GIB=${USB_SCRATCH_AUTO_MIN_SIZE_GIB:-50} USB_SCRATCH_AUTO_MIN_SIZE_GIB=${USB_SCRATCH_AUTO_MIN_SIZE_GIB:-50}
USB_SCRATCH_AUTO_FORMAT_REMOVABLE=${USB_SCRATCH_AUTO_FORMAT_REMOVABLE:-true} USB_SCRATCH_AUTO_FORMAT_REMOVABLE=${USB_SCRATCH_AUTO_FORMAT_REMOVABLE:-true}
USB_SCRATCH_AUTO_FORMAT_LABEL=${USB_SCRATCH_AUTO_FORMAT_LABEL:-astraios} USB_SCRATCH_AUTO_FORMAT_LABEL=${USB_SCRATCH_AUTO_FORMAT_LABEL:-astraios}
USB_SCRATCH_SEED_K3S_AGENT_DIRS=${USB_SCRATCH_SEED_K3S_AGENT_DIRS:-false}
USB_SCRATCH_REQUIRED_FREE_GIB=${USB_SCRATCH_REQUIRED_FREE_GIB:-20} USB_SCRATCH_REQUIRED_FREE_GIB=${USB_SCRATCH_REQUIRED_FREE_GIB:-20}
USB_SCRATCH_RECONCILE_INTERVAL_SEC=${USB_SCRATCH_RECONCILE_INTERVAL_SEC:-900} USB_SCRATCH_RECONCILE_INTERVAL_SEC=${USB_SCRATCH_RECONCILE_INTERVAL_SEC:-900}
USB_SCRATCH_CUTOVER_JITTER_MAX_SEC=${USB_SCRATCH_CUTOVER_JITTER_MAX_SEC:-900} USB_SCRATCH_CUTOVER_JITTER_MAX_SEC=${USB_SCRATCH_CUTOVER_JITTER_MAX_SEC:-900}
@ -385,6 +387,17 @@ seed_target_data() {
host_sh "mkdir -p '${source_dir}' '${target}'; if command -v rsync >/dev/null 2>&1; then rsync -aHAX --numeric-ids '${target}/' '${source_dir}/'; else tar -C '${target}' -cf - . | tar -C '${source_dir}' -xf -; fi" host_sh "mkdir -p '${source_dir}' '${target}'; if command -v rsync >/dev/null 2>&1; then rsync -aHAX --numeric-ids '${target}/' '${source_dir}/'; else tar -C '${target}' -cf - . | tar -C '${source_dir}' -xf -; fi"
} }
should_seed_target() {
local target="$1"
case "${target}" in
/var/lib/rancher/k3s/agent/containerd|/var/lib/rancher/k3s/agent/kubelet|/var/lib/rancher/k3s/agent/images)
[ "${USB_SCRATCH_SEED_K3S_AGENT_DIRS}" = "true" ]
return
;;
esac
return 0
}
mount_target_live() { mount_target_live() {
local target="$1" local target="$1"
host_sh "mountpoint -q '${target}' || mount '${target}'" host_sh "mountpoint -q '${target}' || mount '${target}'"
@ -422,8 +435,12 @@ perform_cutover() {
for target in "${TARGET_PATHS[@]}"; do for target in "${TARGET_PATHS[@]}"; do
if ! target_bound_to_scratch "${target}"; then if ! target_bound_to_scratch "${target}"; then
log "seeding ${target} into ${USB_SCRATCH_MOUNTPOINT}${target}" if should_seed_target "${target}"; then
seed_target_data "${target}" log "seeding ${target} into ${USB_SCRATCH_MOUNTPOINT}${target}"
seed_target_data "${target}"
else
log "skipping seed for ${target}; binding fresh Astraios path"
fi
log "mounting bind target ${target}" log "mounting bind target ${target}"
mount_target_live "${target}" mount_target_live "${target}"
fi fi