Arkk backup triage (2026 incident)¶
Temporary rescue target is 2.7T RAID0 on pyrite. Plan is to fill it to the gills and see were we are. Good news is most of the stuff on arkk is code repos that are on GitHub.
Summary: what is copied and what is not¶
Estimated footprint: ~1.8T of the 2.7T budget (≈0.9T headroom), after exclusions and checkpoint thinning.
Copied (kept)¶
- Whole project directories — see "Direct copy whole directories" below.
- Project directories minus their bulk data/model dirs — see "Copy with exclusion". The code, configs, and small artifacts are kept; large regenerable/redownloadable data is dropped.
rpmGAN projects — source,image_datasets/, curatedspecimens/, and generated art (gan_output//gan_images/) are kept whole. Training checkpoints are thinned to ~35 evenly-spaced per run + the final one.- Git history is preserved (
.git/is not excluded).
Not copied (dropped)¶
- Regenerable boilerplate at any depth:
__pycache__,*.pyc/*.pyo,.venv*,venv,.pytest_cache,.mypy_cache,.ruff_cache,.tox,.ipynb_checkpoints,node_modules,.vscode,.idea,.DS_Store,Thumbs.db,*.log,*.tmp. - Large redownloadable/regenerable data carved out per project (examples):
alpaca.ai.v2/data(914G — the whole dataset),binance.ai/data(874G)matrix-llama_cpp_chatbot/models_fast_scratch(517G), othermodels/dirsopensearchPMC/pubmed/wikipedia corpora,pubsumPMC + tarballs (~434G)llm_detectormodel + data dirs,kaggledata dirs- All periodic training-checkpoint churn beyond the thinned ladder
(~3.8T of
rpmcollapses to ~110G). - Top-level dirs not on either list are intentionally skipped (e.g.
steam,nvidia,stable_diffusion,redis-stable, OS/tool caches).
Transfer method¶
Source is copied over an NFS mount on a pair of bonded gigabit Ethernet links
wired directly between the two machines (arkk exports the read-only array;
pyrite mounts it locally, e.g. at /mnt/arkk). rsync therefore runs against a
local path — no ssh transport. See "Run procedure" at the end of this document.
Arkk contents¶
Approximately 9.6T of 15.0T full:
104K ./2023_jobsearch
15M ./2024_jobsearch
43M ./2025_jobsearch
70G ./4geeks_repos
914G ./alpaca.ai.v2
36K ./ask_agatha
8.1M ./attack
3.7G ./bartleby
682M ./bartleby_launch_video
926G ./binance.ai
249M ./Binoculars
3.2G ./bitsandbytes
82M ./bitsandbytes-0.42.0
1.2G ./computer_vision
332K ./crypto
4.0K ./disk_use.sh
204K ./DMZ
2.1G ./DS-ML_course_materials
660M ./dynamical_systems
35M ./ensembleset
3.0G ./ensembleswarm
80M ./firecast.ai
6.1G ./fullstack
22M ./GCSB_MLE
477M ./Geekbench-6.1.0-Linux
15G ./hf-agents-course
2.1G ./hill_climber
0 ./huggingface_model_cache
15G ./huggingface_transformers_cache
0 ./input_dropout
87G ./kaggle
849M ./leaderboard
332K ./linkedin_regression
4.0G ./LLaMA3-binoculars_score
101G ./llm_detector
11G ./llm_detector_benchmarking
2.2G ./LMC-enrollment-forecast
du: cannot read directory './logkeep/postgres_data': Permission denied
18M ./logkeep
520M ./longer-limbs
34M ./lost+found
13G ./matrix-gpt4all_chatbot
517G ./matrix-llama_cpp_chatbot
36M ./matrix-llama_cpp_wargames
5.0M ./matrix-nio
1.6G ./MCP_hackathon
139M ./meteorite
1.3G ./mpss-3.8.6
7.1G ./nvidia
564G ./opensearch
24G ./picam
du: cannot read directory './postgresql/16': Permission denied
16K ./postgresql
4.1G ./postit
2.2M ./pshitt
438G ./pubsum
4.0K ./PyPI_recovery_codes.txt
289M ./redis-stable
476M ./resumate
13M ./RhT_monitor
4.9T ./rpm
30G ./seedscan
5.4G ./stable_diffusion
263G ./steam
4.0K ./testPyPI_recovery_codes.txt
3.0M ./tf-benchmarks
12M ./TTS
182M ./twitchtalk
37M ./user_authentication
12K ./wargames
Copy targets:¶
Direct copy whole directories¶
These should be copied as complete directories (except for our general exclusions like .venv directories)
2023_jobsearch
2024_jobsearch
2025_jobsearch
ask_agatha
attack
bartleby_launch_video
Binoculars
crypto
disk_use.sh
DMZ
dynamical_systems
ensembleset
firecast.ai
GCSB_MLE
input_dropout
LLaMA3-binoculars_score
LMC-enrollment-forecast
linkedin_regression
longer-limbs
matrix-llama_cpp_wargames
matrix-nio
MCP_hackathon
meteorite
pshitt
resumate
RhT_monitor
PyPI_recovery_codes.txt
testPyPI_recovery_codes.txt
TTS
user_authentication
wargames
DS-ML_course_materials
ensembleswarm
fullstack
hf-agents-course
hill_climber
picam
seedscan
Copy with exclusion¶
Copy:
4geeks_repos
alpaca.ai.v2
bartleby
binance.ai
kaggle
llm_detector
matrix-gpt4all_chatbot
matrix-llama_cpp_chatbot
opensearch
postit
pubsum
Exclude
4geeks_repos/archived
alpaca.ai.v2/data/*
alpaca.ai.v2/logs/*
bartleby/bitsandbytes-0.42.0
binance.ai/data/*
binance.ai/logs/*
kaggle/data
kaggle/calorie-expenditure/notebooks/ensembleset_data/*
kaggle/microbusiness-density-forecast/data/*
kaggle/microbusiness-density-forecast/logs/*
llm_detector/api/models--meta-llama--Meta-Llama-3-8B
llm_detector/api/models--meta-llama--Meta-Llama-3-8B-instruct
llm_detector/classifier/data/*
llm_detector/perplexity_ratio_score/data/*
matrix-gpt4all_chatbot/models/*
matrix-llama_cpp_chatbot/models_fast_scratch
matrix-llama_cpp_chatbot/models/*
opensearch/semantic_search/nfs_raid_data/PMC000xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC001xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC002xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC003xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC004xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC005xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC006xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC007xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC008xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC009xxxxxx
opensearch/semantic_search/nfs_raid_data/PMC010xxxxxx
opensearch/semantic_search/nfs_raid_data/pubmed
opensearch/semantic_search/nfs_raid_data/tarballs/*
opensearch/semantic_search/nfs_raid_data/wikipedia/3.1-extraction_summary.json
opensearch/semantic_search/nfs_raid_data/wikipedia/3.2-extracted_text.h5
opensearch/semantic_search/nfs_raid_data/wikipedia/4.1-parse_summary.json
opensearch/semantic_search/nfs_raid_data/wikipedia/4.2-parsed_text.h5
opensearch/semantic_search/nfs_raid_data/wikipedia/5.1-embedding_summary.json
opensearch/semantic_search/nfs_raid_data/wikipedia/5.2-embedded_data.h5
opensearch/semantic_search/nfs_raid_data/wikipedia/6.1-load_summary.json
opensearch/semantic_search/nfs_raid_data/wikipedia/enwiki-20240930-cirrussearch-content.json.gz
opensearch/semantic_search/nfs_raid_data/wikipedia/enwiki-20240930-cirrussearch-content.json.gz.bak
opensearch/semantic_search/nfs_raid_data/wikipedia/enwiki-20240930-cirrussearch-general.json.gz
postit/model/*
pubsum/pubsum/PMC_OA_comm_data/PMC000xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC001xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC002xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC003xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC004xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC005xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC006xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC007xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC008xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC009xxxxxx
pubsum/pubsum/PMC_OA_comm_data/PMC010xxxxxx
pubsum/pubsum/PMC_OA_comm_data/tarballs/*
General exclusions
__pycache__
.venv
.venv-GPU
rpm (4.9T → ~1.2T target)¶
rpm is a collection of de-novo GAN training projects. They all share the same
layout: tiny source (*.py, train.sh, functions/), an irreplaceable
image_datasets/, generated art in gan_output/ (a.k.a. gan_images/), and a
massive training_checkpoints/ directory that is periodic-save churn. ~3.8T of
the 4.9T is checkpoint churn. Strategy: keep code + datasets + generated art,
and thin the checkpoints to a sparse progression ladder.
Checkpoint thinning policy¶
Applies to every training_checkpoints/ directory below.
- Keep an evenly-spaced ladder of ~35 checkpoints across the run (enough to reconstruct the training trajectory / render a progression video).
- Always keep the final complete checkpoint (the usable trained model).
- If a run has ≤ 35 checkpoints already, keep them all.
- Keep both
generator_model_f*anddiscriminator_model_f*where both exist. Note: the.h5runs saved generator only; the main skylines run saved generator + discriminator as SavedModel directories. - Naming is uniform:
generator_model_f<7-digit-frame>(either an.h5file or a SavedModel dir). The helper script computes a per-directory stride so exactly ~35 evenly-spaced checkpoints + the final one survive.
training_checkpoints to THIN¶
3.2T skylines/skylines/skylines/data/2024-02-17/training_checkpoints (SavedModel dirs, gen+disc)
185G NASA_nebulae/NASA_training/training_checkpoints
119G birds/birds.3/training_checkpoints
104G skylines/skylines.2/training_checkpoints
100G birds/birds.4/training_checkpoints
31G skylines/skylines.1/training_checkpoints
21G flowers/flowraxx.1/1024x1024.2/training_checkpoints
1.6G median_meme/32x32_latent_dim_1000/training_checkpoints
929M median_meme/64x64_latent_dim_100/training_checkpoints
896M single_image_gan/training_checkpoints
841M median_meme/128x128_latent_dim_100/training_checkpoints
563M median_meme/32x32_latent_dim_100/training_checkpoints
174M median_meme/example_notebooks/training_checkpoints
Expected post-thin footprint: ~35 checkpoints per run ≈ ~100–130G total (down from ~3.8T).
Keep whole (irreplaceable — datasets, source, generated art)¶
- All
image_datasets/,specimens/,*_dataset/,orignal_dataset/ - All
gan_output/andgan_images/(generated art — the actual product) - Large ones to be aware of:
flowers/flowraxx.1/1024x1024.2/gan_images178G,skylines/skylines.1/gan_output91G,NASA_nebulae/NASA_training/gan_output89G,skylines/skylines.2/gan_output28G, skylines maingan_output26G. If space runs short, these are the next thinning candidates after checkpoints. - All source:
*.py,*.sh,*.md,functions/,README,LICENSE, notes clustered_datasets/*(assembled feature sets — 141G, keep)- Training/preview videos:
training-*.mp4,NASA_training/*.mp4, etc. - Small subprojects whole (minus general exclusions):
fruit,hands,avopix,image_getter,image_cluster,image_scaler,degrees_of_freedom,single_image_gan(source + output),welcome_library,experimental
General exclusions (rpm-wide)¶
__pycache__
.venv
.venv-GPU
*/training_checkpoints (except the ~35 kept per policy above)
Note: .git is not excluded — git history is preserved. The full
boilerplate exclusion list (editor/IDE, node_modules, Python caches, OS cruft)
lives in scripts/excludes.txt.
Run procedure¶
Helper scripts live in scripts/ next to this document:
| File | Role |
|---|---|
targets.txt |
Top-level paths to copy (relative to source root) |
excludes.txt |
Per-project + boilerplate rsync excludes |
checkpoint_dirs.txt |
training_checkpoints dirs to thin |
rsync_selected_from_arkk.sh |
Bulk selective copy (rsync -R, applies excludes) |
thin_checkpoints_from_arkk.sh |
Copies the thinned checkpoint ladder |
run_backup.sh |
Runs both passes in order, with logging + preflight |
1. Wire and mount the transport¶
Connect the bonded direct GbE link, then NFS-mount the read-only arkk array on
pyrite (arkk exports it; pyrite mounts it locally, e.g. /mnt/arkk):
sudo mount -t nfs4 -o ro,hard,noatime,nosuid,nodev,noexec \
192.168.2.1:/mnt/arkk /mnt/arkk
findmnt /mnt/arkk # confirm it is mounted and non-empty
2. Make the rescue target writable (one-time)¶
sudo chown "$USER" /mnt/glass
3. Dry run first (get the real size), inside tmux¶
tmux new -s backup
cd ~/homelab/docs/machines/arkk/scripts
./run_backup.sh -s /mnt/arkk -d /mnt/glass/arkk -n # rsync --stats reports totals
4. Real run¶
./run_backup.sh -s /mnt/arkk -d /mnt/glass/arkk
The bulk pass runs parallel rsync streams (default 4, -j N to change) — one
per top-level target — which avoids the single-TCP-stream ceiling on the bonded
link. rpm is split into its 17 subdirectories in targets.txt so it
parallelizes too. Tune with e.g. -j 6 if the link/disks have headroom.
Re-run the same command to catch partials (rsync skips already-complete files).
Logs are written to /mnt/glass/arkk/_backup_logs/.
5. Verify, then rebuild parity¶
Spot-check the irreplaceable rpm datasets (sizes/counts). Only after the
backup is verified, re-add the spare and rebuild the degraded array — see
RAID_RECOVERY_2026.md. Keep the array read-only until
the backup is done.