How to Migrate an Old CS 1.6 Server to a New VPS

May 21, 2025 Daemon666 8 min read 1 visualizações

Moving a CS 1.6 server to a new VPS is routine, but every trap is in the detail: a ban file you forgot, a csstats.dat wiped on arrival, an IP that changes and empties your player list. The reliable approach is to install a clean engine on the new box and copy only your state across — not the old binaries. This walks it end to end with rsync, keeping downtime to a single reconnect.

1. Inventory what actually has to move

The whole server lives under the game install, but only a few paths hold state you cannot regenerate:

cstrike/                        // your mod folder
cstrike/*.cfg                   // server.cfg, listip.cfg, banned_user.cfg
cstrike/maps/                   // custom maps and .res files
cstrike/addons/                 // metamod, amxmodx, plugins
cstrike/addons/amxmodx/data/    // csstats.dat, vault.ini, sqlite dbs

The engine itself — hlds_run, the .so libraries, the Steam runtime — you re-install fresh on the new box. Do not drag those across from an old distribution or you inherit its glibc quirks and library paths.

2. Install a clean base on the new VPS

Provision the target and install HLDS from scratch with SteamCMD, exactly as in the Linux install guide. Get a stock server running de_dust2 and joinable before you copy a single custom file. Migrating onto a base that already works isolates any later problem to your own content.

3. Back up the old server first

On the old box, quiet the server (announce it, or drop it to an empty map) and archive the mod folder. The full procedure, including which files matter, is in backing up configs, bans and stats and the broader backup and restore guide. A tarball gives you a rollback if the cutover goes wrong:

cd ~/hlds
tar czf cs16-backup.tar.gz cstrike/

4. Sync the state across with rsync

Copy directly between hosts rather than downloading and re-uploading. From the old server, push the directories that hold state:

rsync -avz --progress \
  cstrike/addons cstrike/maps cstrike/*.cfg \
  user@NEW_VPS_IP:~/hlds/cstrike/

The -a flag preserves timestamps and permissions; -z compresses over the wire. Run it again just before cutover to catch bans and stats that changed while you were setting up — rsync only transfers the differences the second time.

5. Fix ownership and make the data writable

Files land owned by the transfer user, which is rarely the account that runs HLDS. Correct it or the server cannot write stats or save bans:

chown -R hlds:hlds ~/hlds/cstrike
chmod -R u+rw ~/hlds/cstrike/addons/amxmodx/data

A read-only data/ directory is the classic cause of "ranks reset on every restart" after a move — the engine simply cannot persist csstats.dat.

6. Update the IP and open the ports

The new VPS has a new public IP. Update server.cfg, any sv_downloadurl mirror, and anything that hard-codes the old address, then open UDP 27015 (and TCP if you run RCON or HLTV) on the new firewall as in the firewall ports guide. If you advertised the old IP to players, follow changing the IP while keeping players so they are redirected rather than lost.

7. Cut over

Start the new server, confirm it is healthy and shows in the master list, then stop the old one. Point your DNS or community listing at the new address last, once you have verified the new box is serving. Leave the old VPS untouched for a few days as a hot rollback.

Common errors

  • Ranks are all zero after the movecsstats.dat was not copied, or addons/amxmodx/data/ is not writable by the HLDS user. Re-sync it and fix permissions.
  • Server starts but no plugins load — you copied cstrike/addons but the new engine has a different Metamod path, or metamod.dll/.so line in liblist.gam was not migrated. Re-check the Metamod install on the new box.
  • "Bad load" on every plugin — the modules were compiled for a different architecture. Reinstall AMX Mod X natively rather than copying binaries between mismatched distros.
  • Bans came back or vanished — you copied banned_user.cfg but not listip.cfg, or vice versa. Engine SteamID and IP bans live in separate files.
  • Players cannot connect at all — the new firewall or provider security group blocks UDP 27015. Verify with the firewall guide.

Verification

From a client, connect to the new IP and play a round. Type say /rank (if you run stats) and confirm your old numbers survived. Check a banned test SteamID still cannot join. Restart the new server and confirm plugins load and stats persist — if a rank resets, the data directory is not writable. Only once the new box has passed a full map rotation should you decommission the old VPS.

Colaboradores: Daemon666 ✦
Compartilhar: