Cum se procedează cu backup în WSL?

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?

Am încercat rsync la un singur proiect, 1.7 GB.

Sincronizarea din win în wsl:

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)

Sincronizarea ulterioară: am oprit după 5 minute…

Deci rsync clar nu e o soluție :confused:

UPS sau laptop ca sa nu ai deaface cu power failure :smiley:

1 Like

Nu lua totul ad litteram, sunt mai multe cazuri în care ceva poate merge prost, curentul electric este doar un factor:

  • crapă wsl înainte să apucă să facă flush la date;
  • crapă discul fizic pe care e ținută imaginea;
  • bsod;
  • etc
2 Likes

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.

3 Likes

Folosesc WSL pentru development, și cam tot ce am configurat acolo sunt astea:

  1. bash aliases
  2. ssh keys
  3. proiectele (cod)

Rulez o instanță personală de GitLab și strategia mea de backup este:

  1. 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
  2. SSH-key sunt regenerabile, .ssh/config merge în repository-ul de la 1.
  3. 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:

  1. Cronjob-uri care fac backup la tot ce mă interesează într-un anumit folder backup/
    • configs (.bash_aliases, .ssh/authorized_keys, crontab -l etc)
    • 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)
  2. 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).

1 Like

Proiectele le ai în wsl sau în Windows?

Exista echivalent la TimeMachine pe Windows? Asta ar putea fi o optiune

Este, file history. Și chiar merge ok :metal:

Dar nu ajută în mod deosebit în cazul ăsta. Problema mea este legată de fișierele din wsl.

Poate mai bine te duci mai aproape putin de o masina virtuala, dar care sa fie:

  1. Reproductibila
  2. Salvabila usor

Vezi Lxc-ul de la linkul de mai jos; se poate rula si pe Windows:
https://linuxcontainers.org/

Ai posibilitatea sa faci snapshot extrem de rapid si sa il pui undeva ca si imagine. Poti sa rulezi docker in el pe linux cu 0 performance hit.

  1. git
  2. ansible
3 Likes

Si mai exista o posibilitate (posibil inafara topicului) daca nu vrei sa iti bagi linux.

Iti iei un PC special pentru Linux. Samba share intre windows si linux prin retea. Kvm switch pe monitorul ultrawide, split in doua full hd-uri.

Bam. Best of both worlds :saluting_face:

Reteta de ansible pe care o folosim noi, pentru Almalinux 9 :
Ansibe WSL Almalinux 9

instaleaza php, mysql, git , node , etc.

Nimic nu se scrie direct in mysql, numa seeduri si fixtures. Deci continutul database se poate reinitializa.

Si evident se leaga de git, deci se poate sterge si reface in citeva minute de la zero

2 Likes

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ă :man_shrugging:

Folosesc cu succes ansible pentru câteva servere, mi se pare magic cum merge :smiley:

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 :confused:

wsl export? Sau face mai mult decat ai nevoie?

Nu vreau să export toată imaginea. Ăla să zicem că-i un back-ul complet.

Mai trebuie un model pentru backup incremental :smiley:

Cateva linkuri de inceput:

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.

3 Likes

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 :sweat_smile:

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 :smiley:

Apoi, mai am baze de date. Nu-s de producție, dar unele sunt mari și durează foarte mult să le import iar…

Nu mai mult de o zi. Preferabil cateva ore.

2 Likes