Як створити резервну копію (WSL) підсистеми Linux для Windows 10 до скидання або перевстановлення системи?


25

Моя проблема полягає в тому, що мені доведеться скинути або перевстановити Windows через деякі проблеми, але я витратив багато часу, щоб налаштувати WSL для розробки, і не хочу його втрачати.

Чи є якийсь спосіб створити резервну копію всього WSL з його налаштуваннями та встановленими модулями, плагінами, користувачами тощо та відновити його після скидання чи перевстановлення Windows? Я багато шукав цю тему, але не зміг знайти корисної інформації.

Інакше, якщо немає можливості зробити резервне копіювання, чи скине Windows 10 повністю видалити WSL?


Я б собі, його так просто , як резервне копіювання, %USERPROFILE%/AppData/Local/lxss. Ви пробували це?
Рамхаунд

Так, я спробував, але він функціонує лише частково з великою кількістю помилок.
emipac

Відповіді:


15

Як зробити резервну копію?

Будь-яка кількість способів, але однією загальною практикою є використання tar для створення архіву файлів, які ви хочете створити для резервного копіювання (для того, щоб перевстановити все, коли ви відтворили своє оточення). Написання простого backup.shсценарію повинно полегшити багаторазове резервне копіювання за регулярним графіком.

Що резервного копіювання?

Більша частина вашої конфігурації зберігається у файлах конфігурації Linux .___, часто у вашій папці ~ /. Ви також можете створити резервну копію ваших /etc/ssh/ssh_configта інших подібних файлів конфігурації системи, хоча будьте обережні зі складними конфігураційними файлами, що містять спеціальні ключі / дані / тощо.

Ви можете генерувати список пакетів підходящих пакетів, використовуючи dpkg-query -f '${binary:Package}\n' -Wфайл, який також можна зробити резервне копіювання.

Куди зробити резервну копію?

Потім можна скопіювати ці архіви з дьогтем в окреме місце. Ми рекомендуємо копіювати у доступну для Windows папку (наприклад /mnt/c/backups), з якої ви можете скопіювати її в OneDrive, DropBox, зовнішній жорсткий диск, FTP де-небудь ще тощо.

HTH.


23

Windows 10 v1903 включає вбудовану команду експорту / імпорту WSL . Зокрема, wsl --exportякий виробляє tarта wsl --importякий імпортує раніше експортований tar. Потім ви можете перемістити цей файл між комп'ютерами.

Ви також можете вказати stdin / stdout, за допомогою -якого ви зможете безпосередньо перенести на іншу машину та імпортувати, використовуючи віддалений оболонку типу ssh.


wsl --importтакож можна імпортувати tar.gzфайли. Ці команди внутрішньо запускають %SystemRoot%\System32\lxss\tools\bsdtarдвійковий код ELF64.
Бісвапріо

анекдати, щоб допомогти тим, хто перебуває в нервовому розладі: wsl --exportможе зайняти більше часу, ніж ви могли очікувати. На моїй машині він просидів приблизно 10 хвилин, записавши лише кілька мегабайт, а потім нарешті виписав файл тару 3,2 ГБ.
scruss

Я думаю, що це найкраще рішення, і його слід сприймати як відповідь.
user1602

2

Щоб створити резервну копію та відновити повний дистрибутив WSL Linux, ви можете спробувати (1) створити .tar.gzфайлову систему та (2) відновити копію за допомогою інструментів інсталятора, доступних в Інтернеті:

  • LxRunOffline має варіанти копіювання та встановлення користувальницьких дистрибутивів Linux. Ви можете встановити дистрофію з .tar.gzфайлу.
  • WSL-DistroLauncher дозволяє встановити дистрибутив з rootfs.tar.gz.
  • WSLInstall , ще один інсталятор Linux для WSL.

Створення резервної копії

На основі звіту про проблему ви можете створити резервну копію за допомогою tarWSL. Зверніть увагу, що ви повинні ігнорувати деякі папки (наприклад, / mnt) у копії.

# 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

Ви повинні створити або перемістити пізніше файл резервного копіювання у дійсну /mnt/cпідпапку. У прикладі файли створюються в /mnt/c/tmp.


Відновлення за допомогою lxRunOffline

Використовуючи lxRunOffline , ви можете встановити отриманий tar як новий розподіл у WSL за допомогою командного рядка 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

Для запуску резервної копії ви можете використовувати той самий lxRunOffline

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

Відновлення за допомогою DistroLauncher

На прикладі Microsoft існує багато пускових установок для дистрибутивів Linux . Я думаю, ви можете спробувати версію Yuk7 .

Ви повинні завантажити файл розподілу та launcher.exe. Щоб використовувати той самий файл розповсюдження, який згаданий вище, потрібно перейменувати файл резервної копії rootfs.tar.gzта запуск на ім'я дистрибутива, яке ви хочете. Пізніше ви повинні запустити панель запуску як адміністратор (у мене з’явилися помилки при запуску як звичайний користувач)

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

Перший раз, коли ви запустите запуск, він встановлює і запускає дистрибутив. Наступного разу він запускає дистрибутив Linux.


Дякую! - Запуск запуску wsdl Yuk7 продовжував виходити з ладу при запуску, і я не бачив проблеми lxRunOffline. Це єдине місце, де я виявив, що задокументував правильну команду tar, яка виправила мою проблему wsldl.
AndrewD

0

Хоча відповідь Jaime є ідеальною, якось /tmpпапка не відтворюється, коли launcher.exe використовується для встановлення кульки смоли (я конкретно говорю про переміщення установки WSL з однієї машини на іншу).

Отже, потрібно створити /tmpта призначити необхідні права.

Єдиний підхід, який працював на мене:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.