update
This commit is contained in:
parent
939ad00b1a
commit
f524b86606
Binary file not shown.
|
@ -1,12 +1,14 @@
|
||||||
|
# v0.2
|
||||||
# Before using this script, create a repo, note the setting of a password
|
# Before using this script, create a repo, note the setting of a password
|
||||||
# kopia repo create filesystem --path C:\kopia_repo --password aaa --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
# kopia repo create filesystem --path C:\kopia_repo --password aaa
|
||||||
|
|
||||||
# for backblaza b2
|
# for backblaza b2
|
||||||
# kopia repository create b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0 --password aaa
|
# kopia repository create b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0 --password aaa
|
||||||
|
|
||||||
# useful commands:
|
# useful commands:
|
||||||
|
# - kopia repo status
|
||||||
# - kopia repo connect filesystem --path C:\kopia_repo -p aaa
|
# - kopia repo connect filesystem --path C:\kopia_repo -p aaa
|
||||||
# - kopia snap list -all
|
# - kopia snap list --all
|
||||||
# - kopia mount all K:
|
# - kopia mount all K:
|
||||||
# mounting should be used as non-admin user, weird windows thing
|
# mounting should be used as non-admin user, weird windows thing
|
||||||
# or one does not see the drive, in that case:
|
# or one does not see the drive, in that case:
|
||||||
|
@ -17,28 +19,31 @@
|
||||||
# if it was not manually set then it would be
|
# if it was not manually set then it would be
|
||||||
# C:\Windows\System32\config\systemprofile\AppData
|
# C:\Windows\System32\config\systemprofile\AppData
|
||||||
|
|
||||||
#
|
|
||||||
# to backup multiple targets/paths:
|
# to backup multiple targets/paths:
|
||||||
# - [array]$BACKUP_THIS = 'C:\Test','C:\users','C:\blabla'
|
# - [array]$BACKUP_THIS = 'C:\Test','C:\users','C:\blabla'
|
||||||
|
|
||||||
$REPOSITORY_PATH = 'C:\kopia_repo'
|
$REPOSITORY_PATH = 'C:\kopia_repo'
|
||||||
$KOPIA_PASSWORD = 'aaa'
|
$KOPIA_PASSWORD = 'aaa'
|
||||||
[array]$BACKUP_THIS = 'C:\Test'
|
[array]$BACKUP_THIS = 'C:\Test'
|
||||||
|
$LOG_PATH = 'C:\Kopia\Kopia_Logs'
|
||||||
$USE_SHADOW_COPY = $false
|
$USE_SHADOW_COPY = $false
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
kopia repository connect filesystem --path $REPOSITORY_PATH --password $KOPIA_PASSWORD --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
$Env:KOPIA_LOG_DIR = $LOG_PATH
|
||||||
|
|
||||||
|
kopia repository connect filesystem --path $REPOSITORY_PATH --password $KOPIA_PASSWORD
|
||||||
# kopia repository connect b2 --bucket=kopia-repo-rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0
|
# kopia repository connect b2 --bucket=kopia-repo-rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0
|
||||||
|
|
||||||
kopia policy set --global --compression=zstd-fastest --keep-annual=0 --keep-monthly=12 --keep-weekly=8 --keep-daily=14 --keep-hourly=0 --keep-latest=3 --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
kopia policy set --global --compression=zstd-fastest --keep-annual=0 --keep-monthly=12 --keep-weekly=0 --keep-daily=14 --keep-hourly=0 --keep-latest=3
|
||||||
|
|
||||||
foreach ($path in $BACKUP_THIS) {
|
if ($USE_SHADOW_COPY) {
|
||||||
if ($USE_SHADOW_COPY) {
|
kopia policy set --global --enable-volume-shadow-copy=when-available
|
||||||
kopia policy set $BACKUP_THIS --before-folder-action "powershell -WindowStyle Hidden C:\Kopia\win_vss_before.ps1" --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
|
||||||
kopia policy set $BACKUP_THIS --after-folder-action "powershell -WindowStyle Hidden C:\Kopia\win_vss_after.ps1" --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
|
||||||
}
|
|
||||||
kopia snapshot create $path --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kopia repository disconnect --file-log-level=info --log-dir=C:\Kopia\Kopia_Logs
|
foreach ($path in $BACKUP_THIS) {
|
||||||
|
kopia snapshot create $path --file-log-level=info
|
||||||
|
}
|
||||||
|
|
||||||
|
kopia repository disconnect
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
if ($args.Length -eq 0) {
|
|
||||||
$kopiaSnapshotId = $env:KOPIA_SNAPSHOT_ID
|
|
||||||
} else {
|
|
||||||
$kopiaSnapshotId = $args[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
|
|
||||||
$mountPoint = Get-Item "${PSScriptRoot}\${kopiaSnapshotId}"
|
|
||||||
$mountedVolume = $mountPoint.Target
|
|
||||||
|
|
||||||
cmd /c rmdir $mountPoint
|
|
||||||
Get-CimInstance -ClassName Win32_ShadowCopy | Where-Object { "$($_.DeviceObject)\" -eq "\\?\${mountedVolume}" } | Remove-CimInstance
|
|
||||||
} else {
|
|
||||||
Start-Process 'powershell' '-f', $MyInvocation.MyCommand.Path, $kopiaSnapshotId -Verb RunAs -WindowStyle Hidden -Wait
|
|
||||||
if ($proc.ExitCode) {
|
|
||||||
exit $proc.ExitCode
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
if ($args.Length -eq 0) {
|
|
||||||
$kopiaSnapshotId = $env:KOPIA_SNAPSHOT_ID
|
|
||||||
$kopiaSourcePath = $env:KOPIA_SOURCE_PATH
|
|
||||||
} else {
|
|
||||||
$kopiaSnapshotId = $args[0]
|
|
||||||
$kopiaSourcePath = $args[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
$sourceDrive = Split-Path -Qualifier $kopiaSourcePath
|
|
||||||
$sourcePath = Split-Path -NoQualifier $kopiaSourcePath
|
|
||||||
# use Kopia snapshot ID as mount point name for extra caution for duplication
|
|
||||||
$mountPoint = "${PSScriptRoot}\${kopiaSnapshotId}"
|
|
||||||
|
|
||||||
if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
|
|
||||||
$shadowId = (Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create -Arguments @{ Volume = "${sourceDrive}\" }).ShadowID
|
|
||||||
$shadowDevice = (Get-CimInstance -ClassName Win32_ShadowCopy | Where-Object { $_.ID -eq $shadowId }).DeviceObject
|
|
||||||
if (-not $shadowDevice) {
|
|
||||||
# fail the Kopia snapshot early if shadow copy was not created
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd /c mklink /d $mountPoint "${shadowDevice}\"
|
|
||||||
} else {
|
|
||||||
$proc = Start-Process 'powershell' '-f', $MyInvocation.MyCommand.Path, $kopiaSnapshotId, $kopiaSourcePath -PassThru -Verb RunAs -WindowStyle Hidden -Wait
|
|
||||||
if ($proc.ExitCode) {
|
|
||||||
exit $proc.ExitCode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Output "KOPIA_SNAPSHOT_PATH=${mountPoint}${sourcePath}"
|
|
Binary file not shown.
|
@ -56,7 +56,7 @@ Embedded webGUI for server mode is done in React. KopiaUI comes packaged with el
|
||||||
# Some aspects of Kopia
|
# Some aspects of Kopia
|
||||||
|
|
||||||
[Official Getting Started Guide](https://kopia.io/docs/getting-started/)<br>
|
[Official Getting Started Guide](https://kopia.io/docs/getting-started/)<br>
|
||||||
[Official Features](https://kopia.io/docs/features/)<br>
|
[Features](https://kopia.io/docs/features/)<br>
|
||||||
[Advanced Topics](https://kopia.io/docs/advanced/)
|
[Advanced Topics](https://kopia.io/docs/advanced/)
|
||||||
|
|
||||||
The above linked documentation is well written and worth a look
|
The above linked documentation is well written and worth a look
|
||||||
|
@ -84,17 +84,20 @@ if planning serious use.
|
||||||
Web GUI versions have button for it, cli version can do `sudo kopia mount all /mnt/temp &`
|
Web GUI versions have button for it, cli version can do `sudo kopia mount all /mnt/temp &`
|
||||||
* **Tasks** section in gui gets wiped when Kopia closes, info on snapshots run
|
* **Tasks** section in gui gets wiped when Kopia closes, info on snapshots run
|
||||||
history and duration then has to be find in logs
|
history and duration then has to be find in logs
|
||||||
* **Logs** rotate with max age 30 days or max 1000 log files, 5000 content log files<br>
|
* **Logs** are creted on every execution of kopia binary.<br>
|
||||||
Useful to search in cli-logs are the terms `kopia/server snapshotting` and
|
They rotate by default with max age 30 days, but still can grow hundreds of MB.
|
||||||
`kopia/server finished`
|
|
||||||
* [Compression](https://kopia.io/docs/advanced/compression/) is good and
|
* [Compression](https://kopia.io/docs/advanced/compression/) is good and
|
||||||
should be set before backup starts. My go-to is `zstd-fastest`. If backups
|
should be set before backup starts. My go-to is `zstd-fastest`. If backups
|
||||||
feel slow `s2-default` is less cpu heavy but with worse compression.
|
feel slow `s2-default` is less cpu heavy but with worse compression.
|
||||||
Useful command: `kopia content stats`
|
Useful command: `kopia content stats`
|
||||||
* During snapshots Kopia uses local **cache**, location varies depending on the OS.
|
* During snapshots Kopia uses local **cache**, location varies depending on the OS.
|
||||||
Default max size is 5GB, but it gets swept periodically every few minutes.<br>
|
Default max size is 5GB. Cache gets swept periodically every few minutes.<br>
|
||||||
Useful commands are `kopia cache info` and `kopia cache clear`
|
Useful commands are `kopia cache info` and `kopia cache clear`.
|
||||||
* ..
|
* Increase [considerably the max cache size](https://github.com/kopia/kopia/issues/3059#issuecomment-1663479603)
|
||||||
|
if planning to use cloud storage as the maintenance could eat into egress cost
|
||||||
|
when kopia redownloads files.
|
||||||
|
* ...
|
||||||
|
|
||||||
|
|
||||||
# Kopia in Linux
|
# Kopia in Linux
|
||||||
|
|
||||||
|
@ -125,7 +128,7 @@ After creation the repo is connected, so connnect command is just demonstration.
|
||||||
|
|
||||||
`sudo kopia policy list`<br>
|
`sudo kopia policy list`<br>
|
||||||
`sudo kopia policy show --global`<br>
|
`sudo kopia policy show --global`<br>
|
||||||
`sudo kopia policy set --global --compression=zstd-fastest --keep-annual=0 --keep-monthly=12 --keep-weekly=8 --keep-daily=14 --keep-hourly=0 --keep-latest=3`<br>
|
`sudo kopia policy set --global --compression=zstd-fastest --keep-annual=0 --keep-monthly=12 --keep-weekly=0 --keep-daily=14 --keep-hourly=0 --keep-latest=3`<br>
|
||||||
|
|
||||||
* **manual backup run**
|
* **manual backup run**
|
||||||
|
|
||||||
|
@ -151,13 +154,14 @@ So both `/home` and `/etc` are set to be backed up.
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# v0.2
|
||||||
# initialize repository
|
# initialize repository
|
||||||
# sudo kopia repo create filesystem --path /mnt/mirror/KOPIA/docker_host_kopia
|
# sudo kopia repo create filesystem --path /mnt/mirror/KOPIA/docker_host_kopia
|
||||||
# for cloud like backblaze
|
# for cloud like backblaze
|
||||||
# sudo kopia repository create b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0
|
# sudo kopia repository create b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0
|
||||||
# sudo kopia repository connect b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0
|
# sudo kopia repository connect b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0
|
||||||
# adjust global policy
|
# adjust global policy
|
||||||
# sudo kopia policy set --global --compression=zstd-fastest --keep-annual=0 --keep-monthly=12 --keep-weekly=8 --keep-daily=14 --keep-hourly=0 --keep-latest=3
|
# sudo kopia policy set --global --compression=zstd-fastest --keep-annual=0 --keep-monthly=12 --keep-weekly=0 --keep-daily=14 --keep-hourly=0 --keep-latest=3
|
||||||
|
|
||||||
REPOSITORY_PATH='/mnt/mirror/KOPIA/docker_host_kopia'
|
REPOSITORY_PATH='/mnt/mirror/KOPIA/docker_host_kopia'
|
||||||
BACKUP_THIS='/home /etc'
|
BACKUP_THIS='/home /etc'
|
||||||
|
@ -167,10 +171,11 @@ kopia repository connect filesystem --path $REPOSITORY_PATH
|
||||||
kopia snapshot create $BACKUP_THIS
|
kopia snapshot create $BACKUP_THIS
|
||||||
kopia repository disconnect
|
kopia repository disconnect
|
||||||
|
|
||||||
|
# -------------- ERROR EXIT CODES --------------
|
||||||
# kopia does not interupts its run with an error if target or repository are missing
|
# kopia does not interupts its run with an error if target or repository are missing
|
||||||
# this makes systemd OnSuccess OnFailure not behaving as they should
|
# this makes systemd OnSuccess OnFailure not behaving as one might expect
|
||||||
# below are checks for paths, that results in immediate error exit code if they do not exist
|
# below are checks for paths, that result in immediate error exit code if they do not exist
|
||||||
# they are at the end because some backup might get done even another is missing something
|
# they are at the end because some backup might get done even if another is missing something
|
||||||
# we just want the error exit code
|
# we just want the error exit code
|
||||||
|
|
||||||
IFS=' ' read -ra paths <<< "$BACKUP_THIS"
|
IFS=' ' read -ra paths <<< "$BACKUP_THIS"
|
||||||
|
@ -368,6 +373,8 @@ Also use of [nssm](https://nssm.cc/) is popular.
|
||||||
|
|
||||||
![windows_scoop_install_kopia](https://i.imgur.com/UPZFImh.png)
|
![windows_scoop_install_kopia](https://i.imgur.com/UPZFImh.png)
|
||||||
|
|
||||||
|
At the moment **cli is the only way to use VSS snapshots**.
|
||||||
|
|
||||||
All relevant files are in `C:\Kopia`, from binaries, `repository.config`, to logs.
|
All relevant files are in `C:\Kopia`, from binaries, `repository.config`, to logs.
|
||||||
A scheduled task is imported that executes a powershell script
|
A scheduled task is imported that executes a powershell script
|
||||||
`C:\Kopia\kopia_backup_scipt.ps1` at 21:19.
|
`C:\Kopia\kopia_backup_scipt.ps1` at 21:19.
|
||||||
|
@ -375,28 +382,26 @@ The script connects to a set repo and backup set targets.
|
||||||
|
|
||||||
This approach is bit more hands on than having a gui, but for daily use one
|
This approach is bit more hands on than having a gui, but for daily use one
|
||||||
can easily get by with the commands: `kopia snap list -all` and `kopia mount all K:`<br>
|
can easily get by with the commands: `kopia snap list -all` and `kopia mount all K:`<br>
|
||||||
Note that mount command should be executed in non admin terminal. Weird
|
Note that if mount command is not working, try executing it in non admin terminal. Weird
|
||||||
windows thing.
|
windows thing. Or you need to enable/install `WebClient` service.
|
||||||
|
|
||||||
Also at the moment cli is the only way I know how to make kopia actions work,
|
|
||||||
so that VSS snapshots can be used.
|
|
||||||
|
|
||||||
* [Download this repo](https://github.com/DoTheEvo/selfhosted-apps-docker/archive/refs/heads/master.zip),
|
* [Download this repo](https://github.com/DoTheEvo/selfhosted-apps-docker/archive/refs/heads/master.zip),
|
||||||
delete everything except `kopia_cli_deploy_win` folder.
|
delete everything except `kopia_cli_deploy_win` folder.
|
||||||
* Run `DEPLOY.cmd`
|
* Run `DEPLOY.cmd`
|
||||||
* Removes powershell scripts restriction.
|
* Removes powershell scripts restriction.
|
||||||
* Creates folder `C:\Kopia` and kopies there<br>
|
* Creates folder `C:\Kopia` and kopies there<br>
|
||||||
`kopia.exe`, `kopia_backup_scipt.ps1` and the VSS ps1 before and after files.
|
`kopia.exe`, `kopia_backup_scipt.ps1`.
|
||||||
* Adds `C:\Kopia` to the system env variable PATH.
|
* Adds `C:\Kopia` to the system env variable PATH.
|
||||||
* imports a task schedule
|
* imports a scheduled task.
|
||||||
* Read `kopia_backup_scipt.ps1` and follow the instructions there.<br>
|
* Read `kopia_backup_scipt.ps1` and follow the instructions there.<br>
|
||||||
Which should be to just to create repo before running the script.
|
Which should be to just to create repo before running the script.
|
||||||
* edit the scheduled task to the prefered time, default is daily at 21:19
|
* edit the scheduled task to the prefered time, default is daily at 21:19
|
||||||
* run scheduled task manually
|
* run scheduled task manually
|
||||||
* check if it worked
|
* check if it worked
|
||||||
|
* `kopia repo status`
|
||||||
* `kopia snap list --all`
|
* `kopia snap list --all`
|
||||||
|
|
||||||
The script is set to save logs in to `C:\Kopia`.
|
The script is set to save logs in to `C:\Kopia\Kopia_Logs\`.
|
||||||
|
|
||||||
### VSS snapshots
|
### VSS snapshots
|
||||||
|
|
||||||
|
@ -408,11 +413,13 @@ This is what allows backup of open files that are in use.<br>
|
||||||
To make use of this feature edit `kopia_backup_scipt.ps1` changing
|
To make use of this feature edit `kopia_backup_scipt.ps1` changing
|
||||||
`$USE_SHADOW_COPY = $false` to `$USE_SHADOW_COPY = $true`
|
`$USE_SHADOW_COPY = $false` to `$USE_SHADOW_COPY = $true`
|
||||||
|
|
||||||
Note the use of `--enable-actions` which is required for before/after actions
|
To check if it's set: `kopia policy show --global`,
|
||||||
to work.
|
should see there: *OS-level snapshot support: Volume Shadow Copy: when-available*
|
||||||
|
|
||||||
To test if its working, one can execute command `vssadmin list shadows`
|
Can also check log files, any named snapshot-creat in cli folder, and see
|
||||||
to see current VSS snapshots and then execute it again during the backup.
|
entries about *volume shadow copy*. Or also one might execute command
|
||||||
|
`vssadmin list shadows` to see current VSS snapshots and then execute
|
||||||
|
it again during the backup.
|
||||||
|
|
||||||
### Kopia install using scoop, machine-wide
|
### Kopia install using scoop, machine-wide
|
||||||
|
|
||||||
|
@ -632,7 +639,7 @@ For cli just follow [the official documentation.](https://kopia.io/docs/reposito
|
||||||
The example of commands:<br>
|
The example of commands:<br>
|
||||||
|
|
||||||
* `kopia repository create b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0 --password aaa`
|
* `kopia repository create b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0 --password aaa`
|
||||||
* `kopia repository connect b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0 --password aaa --enable-actions`
|
* `kopia repository connect b2 --bucket=rakanishu --key-id=001496285081a7e0000000003 --key=K0016L8FAMRp/F+6ckbXIYpP0UgTky0 --password aaa`
|
||||||
|
|
||||||
The backup script contains example commands, just commented out.
|
The backup script contains example commands, just commented out.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue