Windows Server backups
Regular backups of your Windows VPS limit data loss from human error, ransomware, or disk failure. This guide combines native Windows tools and exports to external storage.
Prerequisites
- Windows VPS with disk space for backup targets (dedicated volume or network path)
- Administrator account
- Off-server destination: SFTP, NAS, another VPS, or HolyCloud backup if offered on your plan
A backup stored only on the same disk as the system does not protect against destruction of the entire VPS.
3-2-1 strategy (reminder)
- 3 copies of data
- 2 media types
- 1 copy off-site (outside the VPS datacenter)
Role backup with Windows Server Backup
On editions that include Windows Server Backup:
- Server Manager → Tools → Windows Server Backup.
- Scheduled backup or Backup once.
- Target: dedicated volume or network share (not system disk alone as sole target).
PowerShell (ServerBackup module):
Get-WindowsFeature Windows-Server-Backup
Install-WindowsFeature Windows-Server-Backup -IncludeManagementTools
Run a backup to a folder (example):
wbadmin start backup -backupTarget:E: -include:C: -allCritical -quiet
Check available versions:
wbadmin get versions -backupTarget:E:
VSS and consistent backup (databases)
SQL Server and other services use VSS for consistent snapshots. For SQL, prefer BACKUP DATABASE (see SQL Server Express doc) in addition to file snapshots.
vssadmin list shadows
vssadmin list writers
If a writer is in error, fix the related service before backing up open files.
File backup with robocopy
Incremental copy to a backup folder (schedulable):
$Source = 'C:\inetpub\wwwroot'
$Dest = 'E:\Backup\wwwroot'
$Date = Get-Date -Format 'yyyy-MM-dd'
robocopy $Source "$Dest\$Date" /MIR /R:2 /W:5 /XD 'C:\inetpub\wwwroot\logs' /LOG:"E:\Backup\logs\robocopy-$Date.log"
/MIR mirrors the source: files deleted at source are deleted at destination — use with care.
PowerShell scheduled task
Script C:\Scripts\Backup-Files.ps1:
$ErrorActionPreference = 'Stop'
$Stamp = Get-Date -Format 'yyyyMMdd-HHmm'
$Archive = "E:\Backup\archive-$Stamp.zip"
Compress-Archive -Path 'C:\Data\Important' -DestinationPath $Archive -Force
Get-ChildItem 'E:\Backup\archive-*.zip' | Sort-Object LastWriteTime -Descending | Select-Object -Skip 14 | Remove-Item
Create the task (daily at 2 AM):
$Action = New-ScheduledTaskAction -Execute 'PowerShell.exe' `
-Argument '-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\Backup-Files.ps1'
$Trigger = New-ScheduledTaskTrigger -Daily -At 2:00AM
Register-ScheduledTask -TaskName 'HolyCloud-Nightly-Backup' -Action $Action -Trigger $Trigger `
-User 'SYSTEM' -RunLevel Highest
Snapshot export from the HolyCloud client area
Depending on your VPS offer:
- Client area → VPS → your server.
- Backup / Snapshot section (label may vary).
- Create a snapshot before major updates or SQL/IIS installation.
HolyCloud snapshots capture the entire disk at the hypervisor level; they do not replace SQL .bak export for granular restore.
Off-site copy (SFTP example)
With WinSCP scripting or Posh-SSH:
# requires Posh-SSH module: Install-Module Posh-SSH -Scope AllUsers
$cred = Get-Credential 'sftp-backup'
Set-SCPItem -ComputerName 'backup.example.com' -Credential $cred `
-Path 'E:\Backup\archive-20260621-0200.zip' -Destination '/incoming/' -AcceptKey
Encrypt archives containing sensitive data:
$Password = Read-Host -AsSecureString
$Password | ConvertFrom-SecureString | Set-Content 'E:\Backup\key.xml'
# Use 7-Zip AES or BitLocker on backup volume per your policy
Restore
| ---------- | --------- |
|---|---|
| Deleted file | Restore from ZIP/robocopy |
| SQL database | RESTORE DATABASE from .bak |
Quarterly restore test: mount a copy on a HolyCloud test VPS.
Troubleshooting
| ---------- | -------- |
|---|---|
| robocopy code 8+ | See log; locked files |
| Archive too large | Exclude logs; batch Compress-Archive |
Need help?
To enable automatic snapshots or increase backup storage, open a ticket with the VPS reference and desired frequency.