Jak wykonać kopię zapasową (WSL) podsystemu Linux dla systemu Windows 10 przed zresetowaniem lub ponownym zainstalowaniem systemu?

25

Mój problem polega na tym, że muszę zresetować lub ponownie zainstalować system Windows z powodu niektórych problemów, ale spędziłem dużo czasu, aby skonfigurować WSL do programowania i nie chcę go stracić.

Czy istnieje sposób na wykonanie kopii zapasowej całego WSL z jego ustawieniami i zainstalowanymi modułami, wtyczkami, użytkownikami itp. I przywrócić go po zresetowaniu lub ponownej instalacji systemu Windows? Dużo szukałem tego tematu, ale nie mogłem znaleźć żadnych przydatnych informacji.

W przeciwnym razie, jeśli nie ma sposobu na wykonanie kopii zapasowej, czy reset Windows 10 całkowicie usunie WSL?

emipac
źródło
Mogę sobie wyobrazić, jak jej po prostu jak tworzenie kopii zapasowych, %USERPROFILE%/AppData/Local/lxss. Próbowałeś tego?
Ramhound
Tak, próbowałem, ale działa tylko częściowo z dużą ilością błędów.
emipac

Odpowiedzi:

15

Jak wykonać kopię zapasową?

Dowolna liczba sposobów, ale jedną z powszechnych praktyk jest użycie tar do utworzenia archiwum plików, które chcesz wykonać kopię zapasową (aby ponownie zainstalować wszystko podczas odtwarzania środowiska). Napisanie prostego backup.shskryptu powinno ułatwić wielokrotne tworzenie kopii zapasowych zgodnie z harmonogramem.

Co wykonać kopię zapasową?

Większość konfiguracji jest przechowywana w plikach konfiguracyjnych Linux .___, często w folderze ~ /. Możesz również wykonać kopię zapasową /etc/ssh/ssh_configplików konfiguracyjnych i innych podobnych systemowych plików konfiguracyjnych, ale zachowaj ostrożność w przypadku złożonych plików konfiguracyjnych zawierających klucze / dane / etc specyficzne dla instancji.

Możesz wygenerować swoją listę pakietów apt, używając dpkg-query -f '${binary:Package}\n' -Wecha do pliku, który możesz również wykonać kopię zapasową.

Gdzie wykonać kopię zapasową?

Następnie możesz skopiować te archiwa tar do osobnej lokalizacji. Zalecamy kopiowanie do folderu dostępnego w systemie Windows (np. /mnt/c/backups), Z którego można go skopiować do OneDrive, DropBox, zewnętrznego dysku twardego, FTP w innym miejscu itp.

HTH.

Richard Turner
źródło
23

Windows 10 v1903 zawiera wbudowane polecenie eksportu / importu WSL . W szczególności, wsl --exportktóry produkuje a, tari wsl --importktóry importuje wcześniej wyeksportowany tar. Następnie możesz przenieść ten plik między komputerami.

Możesz także określić stdin / stdout za pomocą -, co powinno umożliwić bezpośrednie przeniesienie na inną maszynę i importowanie za pomocą zdalnej powłoki, takiej jak ssh.

Kok
źródło
wsl --importmoże również importować tar.gzpliki. Te polecenia wewnętrznie uruchamiają %SystemRoot%\System32\lxss\tools\bsdtarplik binarny ELF64.
Biswapriyo
anegdaty, aby pomóc nerwowym: wsl --exportmoże potrwać dłużej, niż można się spodziewać. Na moim komputerze trwało to około 10 minut, po zapisaniu zaledwie kilku megabajtów, a następnie w końcu zapisałem plik tar o pojemności 3,2 GB.
scruss
Myślę, że to najlepsze rozwiązanie i należy je przyjąć jako odpowiedź.
user1602
2

Aby wykonać kopię zapasową i przywrócić pełną dystrybucję linuksową WSL, możesz spróbować (1) utworzyć .tar.gzz systemem plików i (2) przywrócić kopię za pomocą niektórych narzędzi instalacyjnych dostępnych w Internecie:

  • LxRunOffline ma opcje duplikowania i instalowania niestandardowych dystrybucji linuksa. Możesz zainstalować dystrybucję z .tar.gzpliku.
  • WSL-DistroLauncher pozwala zainstalować dystrybucję z rootfs.tar.gz.
  • WSLInstall , kolejny instalator linuksowy dla WSL.

Tworzenie kopii zapasowej

Na podstawie raportu o problemie możesz utworzyć kopię zapasową za pomocą tarWSL. Pamiętaj, że musisz zignorować niektóre foldery (np. / Mnt) w kopii.

# cd /
# tar vzcpf /mnt/c/tmp/ubuntu_`date +%Y%m%d_%H`.tar.gz --exclude=/proc --exclude=/dev --exclude=/mnt --exclude=/media --exclude=/lost+found  --exclude=/tmp --exclude=/sys  --exclude=/run / > /mnt/c/tmp/ubuntu_`date +%Y%m%d_%H`.log 2> /mnt/c/tmp/ubuntu_`date +%Y%m%d_%H`.error

Musisz utworzyć lub przenieść później plik kopii zapasowej do prawidłowego /mnt/cpodfolderu. W tym przykładzie pliki są tworzone w /mnt/c/tmp.


Przywracanie za pomocą lxRunOffline

Korzystając z lxRunOffline , możesz zainstalować wynikową tar jako nową dystrybucję w WSL za pomocą wiersza poleceń systemu Windows.

# lxrunoffline install -n <distro name> -d <installation folder> -f <file>
C:\wsl> lxrunoffline install -n mybackup -d c:\wsl\mybackup -f c:\tmp\ubuntu_20180729_00.tar.gz

Aby uruchomić tworzenie kopii zapasowej, możesz użyć tego samego lxRunOffline

# lxrunoffline run -n <distro name> -w
C:\wsl> lxrunoffline run -n mybackup  -w

Przywracanie za pomocą DistroLauncher

Istnieje wiele programów uruchamiających dla dystrybucji systemu Linux na przykładzie Microsoft . Myślę, że możesz wypróbować wersję Yuk7 .

Musisz pobrać plik dystrybucyjny i plik launcher.exe. Aby użyć tego samego pliku dystrybucyjnego, o którym mowa powyżej, należy zmienić nazwę pliku kopii zapasowej na, rootfs.tar.gza program uruchamiający na żądaną nazwę dystrybucji. Później musisz uruchomić program uruchamiający jako administrator (wystąpiły błędy podczas uruchamiania go jako zwykły użytkownik)

c:\wsl> ren launcher.exe mybackup.exe
c:\wsl> ren .\ubuntu_20180729_00.tar.gz rootfs.tar.gz
c:\wsl> .\mybackup.exe

Przy pierwszym uruchomieniu program uruchamiający instaluje się i uruchamia dystrybucję. Następnym razem uruchamia dystrybucję Linuksa.

Jaime
źródło
Dziękuję Ci! - Yuk7 za WSDL wyrzutnia przechowywane braku na szalupie, i nie widzę problemu lxRunOffline. To było jedyne miejsce, w którym znalazłem dokumentujące prawidłowe polecenie tar, które naprawiło mój problem z wsldl.
AndrewD
0

Chociaż odpowiedź Jaime'a jest idealna, w jakiś sposób /tmpfolder nie jest ponownie tworzony, gdy program launcher.exe jest używany do instalowania tar tar (szczególnie mówię o przenoszeniu instalacji WSL z jednej maszyny na drugą).

Dlatego należy utworzyć /tmpi przypisać wymagane prawa.

Jedyne podejście, które zadziałało dla mnie to:

https://www.cyberciti.biz/faq/mysqld-innodb-error-unable-to-create-temporary-file/

# chown root:root /tmp
# chmod 1777 /tmp
## test it ##
# /etc/init.d/mysqld start
Rajesh Thampi
źródło