如何使位于 WSL2 内部的大型目录与 Windows 中的另一个目录同步?

如何使位于 WSL2 内部的大型目录与 Windows 中的另一个目录同步?

为了获得更好的性能,我将 WSL2 与 Linux 文件系统中的所有项目文件一起使用。

但是,我想将该文件夹连续备份到我的 Windows 中,以防虚拟机出现问题或者我只是想通过 Windows 直接访问该文件夹。

我尝试过使用rsync,但每次运行时它都会遍历每个项目和目录,每次需要大约 20 - 30 分钟。项目目录有 2GB 大。

我是不是忽略了什么?如果我cp用 cronjob 来做这件事会怎么样?

答案1

在 Windows 上尝试使用 rsync 而不是 rsync robocopy。增量同步的速度要快得多,大约每秒 10k 个文件。示例大小约为 200MB。我估计你可以在 20 秒内完成

$logfile="$HOME\backup-wsl.log.txt"
$src="\\wsl.localhost\Debian\home\${env:Username}\sotion"
$dest=$(Join-Path ${env:OneDrive} "Documents\Sotion")
robocopy $src $dest /W:1 /R:0 /E /xd node_modules  /NFL /NDL /LOG+:$logfile

您可以将其作为计划任务运行

$time = New-ScheduledTaskTrigger -Daily -At 2pm 
$user = (whoami)
$action = New-ScheduledTaskAction -Execute "${env:ProgramFiles}\PowerShell\7\pwsh.exe" -Argument "-noninteractive -nologo -noprofile $HOME\scripts\backup-wsl\backup-wsl.ps1"
Register-ScheduledTask -TaskName "Backup-WSL" -Trigger $Time -User $User -Action $action

这是一个我编写的完整指南,其中改进了一些监控和错误检查

答案2

尝试更改你的 rsync 标志(rsync 命令

rsync -hvrPt(在发现此主题)可能适合你的目的

使用cp可以工作,但是像 rsync 这样的工具是为了备份而制作的,如果您正确配置它们,通常可以加快速度(例如,仅同步已修改的文件)。

答案3

好吧,与 wsl1 相比,wsl2 的一大缺点是它的跨操作系统文件系统性能。因此,仍然有一些指南告诉你应该使用 wsl2 进行跨操作系统文件系统的工作。这就是为什么他们建议将使用 wsl2 所做的一切都保留在其文件系统中。我针对 Windows 文件系统执行的文件搜索命令测试,使用 powershell 和 git bash 花了 4 秒,从 wsl2 运行它花了 64 秒。

也许可以使用 wsl2 内部的 rsync 或 borg 作为备份解决方案(意外删除的文件等),然后执行完整的 wsl2 备份wsl --export DISTRO-NAME PATH\FILE-NAME.tar以获得完整的映像备份

相关内容