Here is my initial attempt at Windows to S3 with restic.
Problem: Open files on the Windows Server 2012 are access denied.
Create dsrestic.conf.cmd to specify which drives and folders you want to backup. The dsrestic.cmd batch file generates a diskshadow script, creates a shadow copy then runs restic on the shadowcopy.
Probably looks like a nightmare but it works! Please give it a try.
Opinions and suggestions welcome.
dsrestic.cmd (diskshadow restic)
@echo off
rem Sumo https://forum.restic.net/
rem v0.1 Feb 8 2020
rem - dsrestic.cmd
rem - A batch file to create a volume shadow copy snapshot
rem - and then backup that snapshot to an S3 repository
rem - using restic
rem - Public Domain - use at your own risk
setlocal
set CMD_NAME=%~n0%.cmd
if %RESTIC_PASSWORD%.==. (call :diskshadow) else (call :restic)
goto end
:diskshadow
if not exist dsrestic.conf.cmd echo dsrestic.conf.cmd not found & exit /b 0
call dsrestic.conf.cmd
rem ================================================
rem dsrestic.conf.cmd example
rem ================================================
rem set AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
rem set AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY
rem set RESTIC_REPOSITORY=s3:http://freenas:9000/your-repository
rem set RESTIC_PASSWORD=YOUR_RESTIC_PASSWORD
rem set MNT_POINT=c:\mnt
rem set SRC_DRIVES=d,f,h
rem set SRC_DIRS=apps,docs,photo,install,video
rem ================================================
echo set context persistent nowriters> %TEMP%\_diskshadow_.dss
echo set metadata %MNT_POINT%\metadata\restic.cab>> %TEMP%\_diskshadow_.dss
echo set verbose on>> %TEMP%\_diskshadow_.dss
echo begin backup>> %TEMP%\_diskshadow_.dss
mkdir %MNT_POINT%
mkdir %MNT_POINT%\metadata
echo metadata> %TEMP%\_includefiles_.src
FOR %%G IN (%SRC_DRIVES%) DO (
echo add volume %%G: alias %%G>> %TEMP%\_diskshadow_.dss
mkdir %MNT_POINT%\%%G
FOR %%H IN (%SRC_DIRS%) DO (
if exist %%G:\%%H\. echo %%G\%%H>> %TEMP%\_includefiles_.src
)
)
echo create>> %TEMP%\_diskshadow_.dss
FOR %%G IN (%SRC_DRIVES%) DO (
echo expose %%%%G%% %MNT_POINT%\%%G>> %TEMP%\_diskshadow_.dss
)
echo exec %CMD_NAME% >> %TEMP%\_diskshadow_.dss
FOR %%G IN (%SRC_DRIVES%) DO (
echo delete shadows exposed %MNT_POINT%\%%G>> %TEMP%\_diskshadow_.dss
)
echo end backup>> %TEMP%\_diskshadow_.dss
echo reset>> %TEMP%\_diskshadow_.dss
diskshadow /s %TEMP%\_diskshadow_.dss
del %TEMP%\_diskshadow_.dss
del %TEMP%\_includefiles_.src
FOR %%G IN (%SRC_DRIVES%) DO (
rmdir %MNT_POINT%\%%G
)
rmdir %MNT_POINT%\metadata /S /Q && rmdir %MNT_POINT%
exit /b 0
:restic
chdir /d %MNT_POINT%
restic backup --files-from "%TEMP%\_includefiles_.src"
exit /b 0
:end
endlocal