我正在 上运行 wsl2 Windows10 1909
。我需要将一些数据从 wsl2 文件夹备份到网络共享。因此,我编写了一个备份脚本,该脚本在手动运行时似乎运行良好。网络共享安装在 WSL 下并且可以访问,当脚本启动时,会在其上创建备份文件夹,然后脚本开始复制文件。
但是,当我通过 Windows 的任务计划程序安排脚本在晚上运行时,我在早上发现,网络共享上没有创建任何文件或文件夹,但是 - 但是 - 整个备份文件夹是在 Windowssystem32
文件夹中创建的。我检查了网络共享是否仍处于挂载状态,一切看起来都很好,我可以在 wsl2 中毫无问题地访问它。现在这种情况已经连续发生了两次。
有人知道为什么 WSL 突然中断并将这些文件写入system32
?这是否表明在此过程中与网络共享的连接丢失了(但为什么根本没有文件?至少有些文件应该可以工作)。或者这可能与任务调度程序有关,尽管我安排了自己的帐户来执行任务,但它缺少一些权限?
脚本如下:
#!/bin/bash
timestamp=$(date +%Y-%m-%d)
path=/mnt/x/backup
maxBackups=4
if [[ $(id -u) > 0 ]]; then
echo "Please run the script as root."
exit 1
fi
echo "Timestamp is $timestamp"
echo "Backup path is $path"
cd ${path}
directoryCount=$(find -mindepth 1 -maxdepth 1 -type d | wc -l)
echo "Found $directoryCount backups in this folder. MaxBackups is set to $maxBackups"
if [[ $directoryCount -ge $maxBackups ]];then
# Old backups are deleted here [...]
else
echo "No need to delete backups."
fi
echo "Creating directories..."
mkdir ${timestamp}
cd ${timestamp}
mkdir databases
mkdir data
cd databases
echo "Dumping databases..."
# Databases are being dumped
echo "Databases written to backup folder."
cd ..
echo "Copying files, this will take a while!"
cp -R /opt/data data/
echo "Files copied."
编辑:
我能够追踪问题。显然,该任务是以管理员权限执行的,这导致 wsl 没有挂载网络共享。/etc/fstab
仍然有正确的条目,但调用sudo mount -a
会产生错误:
<3>init: (1139) ERROR: UtilCreateProcessAndWait:489: /bin/mount failed with status 0x2000
<3>init: (1139) ERROR: MountPlan9:478: mount cache=mmap,rw,trans=fd,rfdno=3,wfdno=3,msize=65536,aname=drvfs;path=X:;symlinkroot=/mnt/ failed 2
这导致脚本无法执行cd
。但是,我不太明白为什么 1) 该任务以提升的权限执行,而不是按照要求以用户权限执行,以及 2) 这导致 wsl 缺少网络共享的挂载。有什么办法可以解决这个问题吗?