Syncthingを使ったバックアップ

サーバのデータを別マシンにバックアップするには、Syncthingを使って行うのが手軽です。
さらにクラウドへの保存まで考えているなら、別マシンはWindowsにしておくと設定がはるかに楽です。実マシンを用意しなくてもVMでバックアップ専用のWindowsを立ち上げておくと良いでしょう。

Windows側にSyncthingをインストール

公式サイトからダウンロードして、解凍して実行すれば起動されます。
C:¥syncthingなどで実行すると良いでしょう。
無事動作するようならシステム起動時に自動実行するようにタスクスケジューラに登録します。ターミナルを管理者として実行し、下記スクリプトを実行します(C:\syncthing\syncthing.exeの場合の例です)

  • --no-browser : 起動時にブラウザを開かない
  • --no-restart : タスクスケジューラ側で再起動を管理
  • ExecutionTimeLimit 0 : タイムアウトなし(常駐プロセスのため)
  • -WindowStyle Hidden:ウィンドウ非表示
  • 直接syncthing.exeを指定するとウィンドウ制御が効かないため、PowerShell経由で起動する形にしています。これで起動時に画面が一切表示されません。
# タスクスケジューラにSyncthingを登録するスクリプト
$Action = New-ScheduledTaskAction `
    -Execute "powershell.exe" `
    -Argument "-WindowStyle Hidden -Command `"Start-Process 'C:\syncthing\syncthing.exe' -ArgumentList '--no-browser --no-restart' -WindowStyle Hidden`""

$Trigger = New-ScheduledTaskTrigger -AtLogOn

$Settings = New-ScheduledTaskSettingsSet `
    -ExecutionTimeLimit 0 `
    -RestartCount 3 `
    -RestartInterval (New-TimeSpan -Minutes 1)

$Principal = New-ScheduledTaskPrincipal `
    -UserId $env:USERNAME `
    -LogonType Interactive `
    -RunLevel Highest

Register-ScheduledTask `
    -TaskName "Syncthing" `
    -Action $Action `
    -Trigger $Trigger `
    -Settings $Settings `
    -Principal $Principal `
    -Description "Syncthing file synchronization"

>> -Description "Syncthing file synchronization"まで表示されたらEnterを押せば登録完了です。タスクスケジューラで確認します。

taskschd.msc

VM内のSyncthingを手元からアクセス

GUIの待受ポートを受付可能に変更

0.0.0.0:8384

パスワードを設定した場合の自動ログイン設定

ターミナルを管理者で実行してレジストリに登録。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v DevicePasswordLessBuildVersion /t REG_DWORD /d 0 /f

次に、設定画面で設定。

control userpasswords2

余分なサービスを停止する

VMのWindowsは余計なサービスを停止してリソース消費を減らしておくと良いでしょう。

# 管理者権限のチェック
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "エラー: 管理者権限で実行してください。" -ForegroundColor Red
    pause
    exit
}

# 無効化するサービス名のリスト
$services = @(
    "DoSvc",    # Delivery Optimization
    "icssvc",   # Windows Mobile Hotspot Service
    "SysMain",  # SysMain (旧 Superfetch)
    "WSearch"   # Windows Search
)

foreach ($service in $services) {
    if (Get-Service -Name $service -ErrorAction SilentlyContinue) {
        Write-Host "処理中: $service"
        # スタートアップの種類を「無効」に設定
        Set-Service -Name $service -StartupType Disabled
        # サービスを停止
        Stop-Service -Name $service -Force -ErrorAction SilentlyContinue
        Write-Host "$service を無効化して停止しました。" -ForegroundColor Green
    } else {
        Write-Host "警告: $service は見つかりませんでした。" -ForegroundColor Yellow
    }
}

Write-Host "`nすべての処理が完了しました。"
pause

Immiciのバックアップ設定(Immichコンテナ内で実行)

Immichのフォルダを追加します。そのほか送信のみの設定にしておきます。

/opt/docker/immich/library/library/admin

受信側のフォルダも設定

~\Pictures\immich

エラーが出る場合

Syncthingはフォルダを開く際に .stfolder というマーカーファイルが存在するか確認します。Send Onlyでも自分で作成しようとするのですが、ACLで読み取りしか付与していないため書き込めず下記のようなエラーになります。

folder marker missing (this indicates pote

スクリプトでは root が事前に .stfoldertouch で作成し、Syncthingユーザーには読み取りのみ付与する形にしていますが、すでにImmichを動かしている場合は、手動で以下を実行。

# 1. adminディレクトリに .stfolder を作成
touch /opt/docker/immich/library/library/admin/.stfolder

# 2. adminディレクトリへの読み取りACLを付与
setfacl -R -m u:syncthing:r-x /opt/docker/immich/library/library/admin
setfacl -R -d -m u:syncthing:r-x /opt/docker/immich/library/library/admin
setfacl -m u:syncthing:r-- /opt/docker/immich/library/library/admin/.stfolder

その後SyncthingのWeb UIで再スキャンすればエラーが消えます。

Outlineのバックアップ設定(ホスト側で実行)

Outlineの場合は権限を設定していないのであらかじめ設定しておきます。
まずホストでsyncthingのUIDを確認します。

lxc exec <immichコンテナ名> -- id syncthing

確認したUIDを指定してホストで実行。

# .stfolderを先に作成
sudo mkdir /opt/lxd-data/outline/.stfolder

# outlineディレクトリへの読み取りACLを付与
sudo setfacl -R -m u:999:rx /opt/lxd-data/outline
sudo setfacl -R -d -m u:999:rx /opt/lxd-data/outline
sudo setfacl -m u:999:rx /opt/lxd-data/outline/.stfolder

あとはSyncthingのWeb=UIで指定していけばOK

/opt/lxd-data/outline
~\sync\outline

Vaultwardenのバックアップ設定(ホスト側で実行)

Vaultwardenも同様で、ホスト側で実行します。

# .stfolderを先に作成
sudo mkdir /opt/lxd-data/vaultwarden/.stfolder

# Vaultwardenディレクトリへの読み取りACLを付与
sudo setfacl -R -m u:999:rx /opt/lxd-data/vaultwarden
sudo setfacl -R -d -m u:999:rx /opt/lxd-data/vaultwarden
sudo setfacl -m u:999:rx /opt/lxd-data/vaultwarden/.stfolder
/opt/lxd-data/vaultwarden
~\sync\vaultwarden

Linkwardenのバックアップ設定(ホスト側で実行)

Linkwardenも同様で、ホスト側で実行します。

# .stfolderを先に作成
sudo mkdir /opt/lxd-data/linkwarden/.stfolder

# Vaultwardenディレクトリへの読み取りACLを付与
sudo setfacl -R -m u:999:rx /opt/lxd-data/linkwarden
sudo setfacl -R -d -m u:999:rx /opt/lxd-data/linkwarden
sudo setfacl -m u:999:rx /opt/lxd-data/linkwarden/.stfolder
/opt/lxd-data/linkwarden
~\sync\linkwarden

Nextcloudのバックアップ

Nextcloudは公式クライアントがあるので簡単です。インストールしたら起動してサーバアドレスを入力し、ログインすれば同期が開始されます。バックアップ用途として使うなら「サーバからすべてのファイルを同期する」を選択すると良いでしょう。

Googleフォト、Amazonフォトに保存

面倒だったクラウドサービスへのバックアップも、Windows上なら公式クライアントがあるので手軽です。Googleフォトは低画質設定など、Amazonフォトは写真フォルダのみ、など。

Onedriveにバックアップ

C:\Users\ユーザー名\OneDrive\は変更出来ないので、シンボリックリンクを作成。
これは、コマンドプロンプトで作成します(ターミナルではありません)。また、リンク先のフォルダは自動で作られます(作成してあるとエラーになります)。

mklink /D "C:\Users\user\OneDrive\Nextcloud" "C:\Users\user\Nextcloud"
mklink /D "C:\Users\user\OneDrive\sync" "C:\Users\user\sync"
mklink /D "C:\Users\user\OneDrive\immich" "C:\Users\user\Pictures\immich"

シンボリックリンクを削除するには

エクスプローラーなら、そのまま削除(右クリック → 削除)でOK。消えるのはリンクだけで元のフォルダは消えません。

コマンドで削除するなら次のように指定します。

rmdir "C:\Users\ユーザー名\OneDrive\MyData"
タイトルとURLをコピーしました