Una din temerile mele legate de mașinile virtuale în general și WSL în special este că imaginile de disc (VHXD în cazul WSL) poate păți … chestii.
Pentru că este mai ușor să se corupă un fișier de 10-20-30gb în cazul unui power failure pe host, de exemplu. Implicit, este și mai greu de făcut backup imaginii.
Prin urmare mă întreb: cum se procedează dacă vreau backup?
Scopul principal este să am backup la fișierele mele, pe care lucrez.
Scopul secundar ar fi să am backup și la config făcute în WSL și/sau pachetele instalate. Bonus: dacă backup este într-un format ne-dependent de WSL (e.g. arhivă, rsync).
Cea mai la îndemână opțiune mi se pare că ar fi rsync -au --delete /home/work /mnt/d/wsl-backup/ (și invers). Ori la startup ori periodic ori… altcumva.
Este vreun dezavantaj cu abordarea asta? Risc să pierd date? Altceva?
sending incremental file list
sent 1,310,628 bytes received 7,137 bytes 17,225.69 bytes/sec
total size is 1,832,393,699 speedup is 1,390.53
real 1m16.038s
user 0m0.442s
sys 0m14.312s
Fac imediat și sincronizarea din wsl în win, vedem cum e aia.
Sincronizarea inițială din wsl în win: 17 minute (practic copiatul tuturor fișierelor de colo-colo)
Eu nu as incerca sa tin date permanente in WSL, tot ce rulezi in VM ar trebui sa poata fi refacut cu git si niste comenzi. E mai bine sa fie ceva efemeral, in special fiindca la un Windows update chiar exista un risc destul de mare sa nu iti mai porneasca.
S-ar putea ca Windows 12 sa schimbe formatul de imagine si n-ai facut nimic cu backup-ul direct.
Folosesc WSL pentru development, și cam tot ce am configurat acolo sunt astea:
bash aliases
ssh keys
proiectele (cod)
Rulez o instanță personală de GitLab și strategia mea de backup este:
Am proiect (repository) în GitLab doar cu notes and config. La fiecare reinstall copiez de acolo și sunt gata în 2-3 minute. Repository-ul respectiv are un cron-job care face commit și push automat la minut și așa își face și sync între device-uri. Evitent că acolo am și notițele de zi cu zi, de aia așa frecvent
SSH-key sunt regenerabile, .ssh/config merge în repository-ul de la 1.
toate proiectele sunt salvate în git, fac commit și push pe feature branch-uri și la chestii care nu sunt gata.
În ultimii ani, am cam renunțat să mai țin instalate chestii direct în WSL, totul rulează în docker (docker-compose) și fiecare proiect are cam tot ce trebuie să-l rulez local definit în repository-ul lui. Aici intră PHP, MariaDB/MySQL, nginx. Din cauza asta nu-mi fac griji dacă trebuie să-mi reinstalez WSL… tot vine la pachet cu proiectul pe care lucrez (am nevoie doar de Docker). Avantajul este că mă pot muta cu un proiect de pe un device pe altul fără prea mare bătăi de cap cu instalat ce-mi lipsește (de exemplu n-aș vrea să am PHP instalat permanent pe laptopul de lucru, unde îmi trebuie doar Java).
Pe serverul de acasă, strategia de backup e următoare:
Cronjob-uri care fac backup la tot ce mă interesează într-un anumit folder backup/
database dumps (am un sqlite pentru o aplicație care rulează direct, și încă câteva DB-uri în container)
backup-uri automate de aplicații (sunt aplicații care își pot face singure backup)
rsync la tot folderul de backup + date (poze, video, media) către un NAS pe care-l țin la soră-mea acasă
În total fac rsync la vreo 8TB de date, și durează vreo 55 minute cu 1.6GB transferați (serverul și NAS-ul sunt la mai bine de 1000km distanță și nu am cine știe ce conexiune în niciuna din locații așa că viteza medie e 498K bytes/sec). Un backup de WSL n-ar trebui să fie atât de mare încă să dureze 15 minute. Scriptul poți să-l vezi aici.
Eu unul nu aș renunța la rsync, vezi de unde e limitarea în setup-ul tău. Poate folosești un samba share între Windows și Linux. Poate e mai rapid dacă faci rsync cu ceva ce rulează Linux (vps/raspberry pi/NAS).
WSL. Nu știu de unde am rămas cu obiceiul ăsta, dar cu ceva timp în urmă era groaznic de încet să rulezi ceva cu watch care să reacționeze la schimbări când țineai totul pe Windows și rulai scriptul în WSL. Majoritatea codului îl scriu în Intellij, și se descurcă super OK cu cititul fișierelor din WSL.
Offtopic: ca și proiect de week-end vreau să încerc să rulez VS Code în docker (în WSL) și să mă conectez la el cu WSLg. Mi se pare interesant de încercat, nu cred că este fezabil ca soluție. Dacă merge, pot salva în configurația de docker-compose tot ce trebuie pentru un proiect (platforma care să ruleze: nginx, php/java și tool-urile cu care să lucrez) și să mă pot apuca de lucru pe orice laptop după ce pornesc containerele. Pentru proiecte mici, pe care lucrez rar poate merită
Folosesc cu succes ansible pentru câteva servere, mi se pare magic cum merge
Darrr… să-l am pe pc de lucru? Cum procedezi, fiecare lucru pe care vrei să-l instalezi/configurezi îl treci prin ansible? Mi se pare… complicat?
Apoi, în git: nu e chiar back-up. Cum procedezi cu branch-urile locale, ce nu le trimiți pe server? Fișiere ignorate (e.g. un .env sau mai știu-eu-ce) etc?
Îmi dau seama că pentru cei ce lucrează la o mână de proiecte este oarecum mai ușor să țină „sub control” factorii variabili. Gen dacă dispare un.env e ok, îl refac.
În momentul de față am peste 20 de proiecte cu care interacționez. Uneori zilnci, alteori săptămânal/lunar, la majoritatea de câteva ori pe an. Ar fi absolut oribil să trebuiască să trec prin toate pentru a recupera chestii care nu erau în git
Tot setupul stocat in git repo, publicat outside local win + wsl2 setup (e.g. private github repo).
Legat de salvarea branchurilor locale: ele trebuiesc sa fie short-lived, cu frecvente push-uri pe remote.
Practic combinatia git+ansible se bazeaza pe ideea de a avea pasii de recreare a statusului dorit (minim de spatiu necesar pt backup, doar git repos care contin si cod ansible). Asta in loc de a salva statusul dorit (intregul os, librarii, dev env, etc), care solicita spatiu mult mai mare.
Pentru ansible e ok, îmi dau seama că nu am foarte multe chestii de făcut setup la ele. Uitându-mă în history aș zice că 99% din setup îl recreez în 30 minute fără niciun fel de automatizare
Rămâne problema fișierelor, lucru care mă stresează.
Probabil voi folosi ceva gen Borg, cu fișiere copiate remote pe undeva… Mai investighez.
Păi or fi ele short lived, dar cât de short este short? Câteva ore? Câteva zile?
Dacă îmi crapă instanța wsl și pierd 1-2 zile de lucru nu aș fi foarte încântat
Apoi, mai am baze de date. Nu-s de producție, dar unele sunt mari și durează foarte mult să le import iar…