Linux — практическо ръководство

Част 3: Бекъп и възстановяване на WSL2

След като настроих WSL за реална работа, следващото нещо, което направих, беше да имам работещ бекъп. В тази статия описвам как експортирам, възстановявам и местя дистрибуции — с реални команди, които използвам.

Тук говоря за WSL2 и официалните команди wsl --export / wsl --import. Това е подходът, който използвам, когато искам пълен snapshot на дистрибуцията — пакети, home, SSH ключове, конфигове. Файловете под /mnt/c/ (Windows дискове) не влизат в export-а. Тях ги бекъпвам отделно, ако ми трябват.

1. Защо изобщо правя бекъп на WSL?

WSL2 държи цялата Linux файлова система във virtual disk (обикновено ext4.vhdx). Ако нещо се обърка — грешен rm -rf, проблем след update, смяна на диск или машина — без бекъп си изгубил часове настройка.

Аз правя бекъп преди големи промени, преди миграция на друг диск и периодично, когато средата вече работи стабилно. Една команда wsl --export ми дава пълен snapshot, който мога да върна с wsl --import.

2. Какво ми е необходимо?

PowerShell или Command Prompt (за предпочитане като обикновен потребител, не задължително Admin). Достатъчно свободно място на диска — export-ът е приблизително колкото размера на дистрибуцията (или малко повече при TAR).

Първо виждам какво имам инсталирано:

Списък на дистрибуциите
wsl --list --verbose

Или по-кратко:

Кратък списък
wsl -l -v

Имената, които виждам тук (например Ubuntu, Ubuntu-24.04), са точно тези, които подавам на export/import.

3. Спирам WSL преди бекъп

Не експортирам работеща дистрибуция, ако мога да я избегна. Докато има отворени файлове или процеси, snapshot-ът може да е непоследователен.

Спирам конкретна дистрибуция:

Спиране на конкретна дистрибуция
wsl --terminate Ubuntu

Или спирам всичко (всички дистрибуции + леката WSL2 VM):

Пълно спиране на WSL
wsl --shutdown
Моят навик: преди export почти винаги пускам wsl --shutdown. Така знам, че няма отворени файлове и бекъпът е чист.

4. Правя бекъп с export (TAR)

Това е класическият начин. Export-ът създава tar архив с цялата Linux файлова система на дистрибуцията.

Създавам папка за бекъпи и експортирам с дата в името (PowerShell):

Създаване на папка и export с дата
New-Item -ItemType Directory -Force -Path "D:\WSL_Backups_2026"
wsl --export Ubuntu "D:\WSL_Backups_2026\Ubuntu_Backup_$(Get-Date -Format dd-MM-yyyy).tar"

Командата работи тихо — няма progress bar. При стандартна Ubuntu с development инструменти отнема обикновено 1–5 минути, в зависимост от размера и диска.

Ако искам компресиран архив (по-малък файл):

Export като tar.gz
wsl --export Ubuntu "D:\WSL_Backups_2026\Ubuntu_Backup_$(Get-Date -Format dd-MM-yyyy).tar.gz" --format tar.gz

5. По-бърз вариант: export като VHD

При WSL2 мога да експортирам директно virtual disk-а. Това обикновено е по-бързо, защото не минава през tar serialization, а копира диска.

Export като VHD
wsl --export Ubuntu "D:\WSL_Backups_2026\Ubuntu_Backup_$(Get-Date -Format dd-MM-yyyy).vhdx" --format vhd

VHD форматът запазва и default user настройката по-чисто при restore. За редовни локални бекъпи често предпочитам именно него.

6. Какво влиза и какво не влиза в бекъпа

В export-а влизат:

  • инсталираните пакети;
  • home директориите и конфиговете;
  • SSH ключове, .bashrc, .zshrc, docker данни вътре в Linux и т.н.

Не влизат файловете, достъпни през /mnt/c/, /mnt/d/ и други Windows mount-и. Ако държа проекти на Windows диска, ги бекъпвам отделно (или ги държа в Linux home, ако искам да са в snapshot-а).

Важно: .wslconfig (глобалните настройки в Windows user profile) също не е част от export-а. Ако го ползвам, копирам го отделно:
Бекъп на .wslconfig
Copy-Item "$env:USERPROFILE\.wslconfig" "D:\WSL_Backups_2026\wslconfig_$(Get-Date -Format dd-MM-yyyy).bak"

7. Възстановяване от бекъп (Restore)

Restore-ът е import. Създавам нова дистрибуция от архива и ѝ задавам място за virtual disk-а.

Пример с TAR:

Import от TAR
New-Item -ItemType Directory -Force -Path "D:\WSL\Ubuntu"
wsl --import Ubuntu "D:\WSL\Ubuntu" "D:\WSL_Backups_2026\Ubuntu_Backup_22-08-2026.tar"

Пример с VHD:

Import от VHD
New-Item -ItemType Directory -Force -Path "D:\WSL\Ubuntu"
wsl --import Ubuntu "D:\WSL\Ubuntu" "D:\WSL_Backups_2026\Ubuntu_Backup_22-08-2026.vhdx" --vhd

Аргументите са: име, папка за install location, път до бекъп файла.

След import от TAR WSL често влиза като root. Трябва да върна default user. При VHD обикновено default user се запазва по-добре.

8. Връщам default user след import

Ако след restore влизам като root, задавам потребителя отново. Един от начините (ако дистрибуцията има helper команда):

Default user чрез ubuntu config
ubuntu config --default-user fedya

(Името на командата може да е ubuntu2204.exe, ubuntu2404.exe и т.н. в зависимост от инсталацията.)

По-универсалният начин е през /etc/wsl.conf вътре в дистрибуцията:

Задаване на default user в wsl.conf
wsl -d Ubuntu -u root
# вътре в Linux:
printf '[user]\ndefault=fedya\n' | tee /etc/wsl.conf
exit
wsl --terminate Ubuntu

След това отварям нормално:

Стартиране с правилния user
wsl -d Ubuntu

9. Ако искам да заменя съществуваща дистрибуция

Import не презаписва съществуващо име. Ако искам да възстановя върху същото име, първо трябва да unregister-на старата.

Внимание: wsl --unregister изтрива virtual disk-а на дистрибуцията. Правя го само след като съм сигурен, че бекъп файлът е наличен и валиден.
Unregister + restore
wsl --shutdown
wsl --unregister Ubuntu
New-Item -ItemType Directory -Force -Path "D:\WSL\Ubuntu"
wsl --import Ubuntu "D:\WSL\Ubuntu" "D:\WSL_Backups_2026\Ubuntu_Backup_22-08-2026.tar"

10. Миграция на друг диск (практичен сценарий)

Когато C: се напълни, местя WSL на D: чрез export → unregister → import на новото място.

Миграция от C: към D:
wsl --shutdown
wsl --export Ubuntu "D:\WSL_Backups_2026\Ubuntu_migrate.tar"
wsl --unregister Ubuntu
New-Item -ItemType Directory -Force -Path "D:\WSL\Ubuntu"
wsl --import Ubuntu "D:\WSL\Ubuntu" "D:\WSL_Backups_2026\Ubuntu_migrate.tar"
# после връщам default user, както по-горе

След миграцията проверявам дали всичко е на място:

Проверка след миграция
wsl -l -v
wsl -d Ubuntu -- whoami
wsl -d Ubuntu -- df -h

11. Клониране на дистрибуция

Понякога искам втора идентична среда (например за експерименти), без да пипам основната. Export + import с ново име върши работа:

Клониране
wsl --shutdown
wsl --export Ubuntu "D:\WSL_Backups_2026\Ubuntu_clone.tar"
New-Item -ItemType Directory -Force -Path "D:\WSL\Ubuntu-Dev"
wsl --import Ubuntu-Dev "D:\WSL\Ubuntu-Dev" "D:\WSL_Backups_2026\Ubuntu_clone.tar"

След това задавам default user и на клона. Мога да изтрия клона по всяко време с:

Изтриване на клон
wsl --unregister Ubuntu-Dev

12. Import in-place (VHD на място)

Ако вече имам .vhdx файл и искам да го регистрирам без копиране:

Import in-place
wsl --import-in-place Ubuntu "D:\WSL\Ubuntu\ext4.vhdx"

Virtual disk-ът трябва да е ext4. Това е удобно, когато местя готовия VHD файл и не искам втори копие.

13. Моят практически workflow

За редовен бекъп преди рискова промяна правя следното:

shutdown

чиста среда

export

TAR или VHD

проверка

файл + размер

работа

промени / migrate

Моят типичен бекъп цикъл
wsl --shutdown
New-Item -ItemType Directory -Force -Path "D:\WSL_Backups_2026"
wsl --export Ubuntu "D:\WSL_Backups_2026\Ubuntu_Backup_$(Get-Date -Format dd-MM-yyyy).tar"
Get-Item "D:\WSL_Backups_2026\Ubuntu_Backup_*.tar" | Select-Object Name, Length, LastWriteTime

Държа поне два поколения бекъпа. Не презаписвам единствения файл.

14. Полезни допълнителни команди

Няколко команди, които често ползвам около бекъп и поддръжка:

Статус и версия на WSL
wsl --status
wsl --version
Задаване на default дистрибуция
wsl --set-default Ubuntu
Обновяване на WSL
wsl --update
Стартиране като конкретен user
wsl -d Ubuntu -u fedya

15. TAR или VHD — кога кое?

ФорматПредимстваКога го ползвам
tar (default) Универсален, работи навсякъде Общ бекъп, прехвърляне между машини
tar.gz По-малък файл Когато мястото или мрежата са ограничени
vhd По-бърз export/import, запазва default user по-добре Редовни локални бекъпи, миграция на диск

16. Командите накратко

КомандаЗа какво я използвам
wsl -l -vСписък на дистрибуциите и версията им.
wsl --shutdownСпирам всички WSL инстанции преди бекъп.
wsl --terminate NAMEСпирам само една дистрибуция.
wsl --export NAME file.tarПравя TAR бекъп.
wsl --export NAME file.vhdx --format vhdПравя VHD бекъп (по-бърз).
wsl --import NAME path file.tarВъзстановявам от TAR.
wsl --import NAME path file.vhdx --vhdВъзстановявам от VHD.
wsl --import-in-place NAME file.vhdxРегистрирам съществуващ VHD на място.
wsl --unregister NAMEИзтривам дистрибуция (и данните ѝ).
wsl --set-default NAMEЗадавам default дистрибуция.
wsl --status / wsl --versionСтатус и версия на WSL.

17. Заключение

Бекъпът на WSL2 не е сложен. Една добре направена wsl --export команда ми дава пълен snapshot, който мога да върна с wsl --import на същото или на друго място.

Моят подход е прост: shutdown → export с дата в името → проверка на файла → после работа. При restore внимавам с default user и никога не правя unregister, преди да съм сигурен, че бекъпът е валиден.

Не усложнявам с външни инструменти, ако официалните команди вършат работа. За мен комбинацията wsl --export / wsl --import е напълно достатъчна за реална ежедневна употреба.

Моят принцип: бекъпът трябва да е лесен и повторим. Ако процедурата е прекалено сложна, няма да я правя редовно — а точно редовността е важна.