diff --git a/services/maintenance/pi-usb-scratch-configmap.yaml b/services/maintenance/pi-usb-scratch-configmap.yaml index b5807ad3..16aa2bc4 100644 --- a/services/maintenance/pi-usb-scratch-configmap.yaml +++ b/services/maintenance/pi-usb-scratch-configmap.yaml @@ -17,6 +17,8 @@ data: # One-time bootstrap for new sticks that ship exfat/fat32. USB_SCRATCH_AUTO_FORMAT_REMOVABLE=true 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. USB_SCRATCH_ENFORCE_TMPFS_TMP=true USB_SCRATCH_REQUIRED_FREE_GIB=20 diff --git a/services/maintenance/scripts/pi_usb_scratch.sh b/services/maintenance/scripts/pi_usb_scratch.sh index 4c7ebddd..c8f67814 100755 --- a/services/maintenance/scripts/pi_usb_scratch.sh +++ b/services/maintenance/scripts/pi_usb_scratch.sh @@ -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_FORMAT_REMOVABLE=${USB_SCRATCH_AUTO_FORMAT_REMOVABLE:-true} 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_RECONCILE_INTERVAL_SEC=${USB_SCRATCH_RECONCILE_INTERVAL_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_FORMAT_REMOVABLE=${USB_SCRATCH_AUTO_FORMAT_REMOVABLE:-true} 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_RECONCILE_INTERVAL_SEC=${USB_SCRATCH_RECONCILE_INTERVAL_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" } +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() { local target="$1" host_sh "mountpoint -q '${target}' || mount '${target}'" @@ -422,8 +435,12 @@ perform_cutover() { for target in "${TARGET_PATHS[@]}"; do if ! target_bound_to_scratch "${target}"; then - log "seeding ${target} into ${USB_SCRATCH_MOUNTPOINT}${target}" - seed_target_data "${target}" + if should_seed_target "${target}"; then + 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}" mount_target_live "${target}" fi