Editor choice

Part 1 – Getting Your Servers Ready for Ceph RGW + Kopia Backups

TLDR Icon Too Long; Didn't Read

If you’re sitting on a stack of old backup servers and wondering how to turn them into something modern, this is where we start.

The goal of this series is simple take traditional hardware, layer Ceph’s S3‑compatible storage on top, and integrate Kopia for encrypted, deduplicated backups that actually scale.

This first part is all about planning. Before we even think about spinning up Ceph or pointing Kopia at an endpoint, we need to make sure the hardware and OS are prepped correctly. This is where most setups either succeed long term or turn into a headache later.

We aim to Build a
MordernRobustScalable
Backup Solution
Cost Effective SolutionA small Ceph cluster running on your existing servers.
Efficient and ScalableRADOS Gateway (RGW) providing an S3‑compatible interface
Redundant Backup SolutionKopia running on your backup servers, sending encrypted incremental snapshots into Ceph.

We could also add an Optional ingress layer with HAProxy or Nginx for TLS and load balancing. Think of this idea as shown in this figure – It’s lean, it’s on‑prem, and it works even with hardware that’s seen better days.

Hardware Requirements (The Realistic Version)

So while it works on backups that you already have – we still need a powerful system to get this working. Although this can be scaled to enterprise level. Ceph does have some baseline needs you shouldn’t ignore.

Monitors & Managers (MON/MGR)
The management module
3 nodes
Will need minimal configurations for this
2–4 CPU cores required
4-8GB of RAM required
40-60GB SSD/NVME drive
Storage Nodes (OSDs)
The Backup module
3 nodes
The minimal configurations listed here
4-6+ CPU cores required
8-16GB of RAM
Ideally ~1GB per TB of storage
3+ disks per node
Use a SSD drive incase HDD’s are used
RADOS Gateway (RGW)
The Network module
2 nodes
This acts as the network gateway
2 nodes to setup HA
2-4 CPU Cores
4-8 GB RAM
1Gb Egress (minimum)

Ceph is happy to work on your old hardware, but If you’re using really old hardware, keep OSD count per node low and prefer SSDs for journals. Ceph will happily eat slow disks alive if you don’t tune for it.

Network Planning

Network plays an important part of this setup as the data is going to be transferred incrementally over the network. You will want to separate the network setup to:

  • Cluster network: Internal Ceph traffic.
  • Public network: Where RGW and your backup servers connect.
  • Use a separate VLAN or NIC if you can.
  • Enable jumbo frames (MTU 9000) if your switches and NICs support it.

Backup jobs will thank you later.

4. OS Choice

For this stack we are going with the most popular choice, Ubuntu 22.04 LTS is my go‑to:

  • Ceph’s cephadm works flawlessly.
  • Kopia has native .deb packages.
  • Long‑term support means fewer surprises.

CentOS Stream 9 / Rocky 9 and Debian 12 also work, but Ubuntu hits the sweet spot for legacy hardware + modern Ceph. Remember we are trying to repurpose the whole backup structure, so lets go with the Ubuntu.

5. Prepping the Servers

Lets get started with this – Once the servers are installed with Ubuntu – do a standard installation with all space allocated to the /. Once this is done, the next part is to prepare the server for our backup setup.

For this we need to get the packages installed:

sudo apt update && sudo apt -y upgrade
sudo apt install -y lvm2 chrony curl gnupg

The standard option – idea here is to make sure that the packages are upto date and we do have all the essentials like Chrony, curl and gnupg setup. Ceph does maintain a strict protocol when it comes to time, so please do run:

sudo systemctl enable chrony --now

The next process is to ensure that the whole backup network is connected through internal IP’s. You can choose your own setup but for this test environment what I did was to define it like the following on the /etc/hosts file – eazy peazy:

10.0.0.11 ceph-pixel-mon1
10.0.0.12 ceph-pixel-mon2
10.0.0.13 ceph-pixel-mon3
10.0.0.21 ceph-pixel-osd1
10.0.0.22 ceph-pixel-osd2
10.0.0.23 ceph-pixel-osd3
10.0.0.31 ceph-pixel-rgw1
10.0.0.32 ceph-pixel-rgw2

Kernel Tuning

Another more important step to this process is to tune the kernel – this should be done across all the nodes on the cluster and it is important that you do it so that Ceph doesn’t cause issues later. Ceph OSDs create thousands of file descriptors and perform parallel I/O operations. RGW nodes handle many concurrent HTTP/S3 connections and MONs rely on low-latency networking for quorum and cluster maps.

So each of these kernel tweaks assist the whole setup to ensure that you do get the best of performance from each component. If the kernel defaults are left untouched, you can hit file descriptor limits, TCP buffer shortages, and I/O latency spikes, especially on legacy hardware.

File Descriptors & Inodes

This ensures that Ceph is able to handle large volume of files created from the daemon.

echo "fs.file-max=262144" | sudo tee -a /etc/sysctl.conf
Swappiness & Caching

Keeps the kernel from aggressively swapping Ceph daemon memory to disk.

echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

If you do have a faster SSD and larger RAM then you can also try:

echo "vm.dirty_ratio=10" | sudo tee -a /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" | sudo tee -a /etc/sysctl.conf

This defines the amount of data that remains on RAM and will help with I/O during the process

Network Buffers (for RGW & cluster traffic)

Allows large TCP buffers for high-throughput backup streams to RGW.

echo "net.core.rmem_max=268435456" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max=268435456" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_rmem=4096 87380 268435456" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_wmem=4096 65536 268435456" | sudo tee -a /etc/sysctl.conf
echo "net.core.somaxconn=4096" | sudo tee -a /etc/sysctl.conf
Apply the Changes

Make sure you do this for all the nodes and keep the servers ready before Ceph deployment

sudo sysctl -p

After the kernel changes are made, all that remains is to ensure that the drives are wiped clean, you can run the standard format command or use:

sudo wipefs -a /dev/sdX

You do not need to worry about the partitioning as this will be handled by Ceph. Ceph will handle partitioning with ceph-volume or cephadm.

You are all set for the part 1 of this setup – now ensure that you do have the latest SSH key created

ssh-keygen -t ed25519
ssh-copy-id pixel@pixel-node1.local

You will have to copy your key to each of the nodes to get access securely. Please do prevent direct root access as it is best to run the commands as sudo user.

You’ve now built the foundation that every reliable Ceph RGW + Kopia backup environment needs. The hardware is planned, the network is clean, the OS is tuned, and your legacy servers are ready to transform into a modern S3-compatible backup system.

In Part 2, we’re diving straight into the heart of the project: bootstrapping your first Ceph cluster, deploying MONs and OSDs, and preparing the storage layer that will power your S3 buckets. We’ll cover every command, explain what’s happening under the hood, and make sure your setup is production‑ready, even if you’re running on aging hardware.

If you want a step‑by‑step Ceph S3 tutorial that’s written for real‑world servers (not lab-perfect conditions), you don’t want to miss Part 2. Bookmark this series, share it with your team, and come back when you’re ready to bring your backup infrastructure to life.

Next up: “Part 2 – Installing Ceph and Building Your First Cluster for S3 Backups”

Please follow and like us:
Prasul S
Love to know your thoughts on this:

      Leave a reply


      PixelHowl HQ
      Your ultimate playground for DevOps adventures, thrilling tech news, and super-fun tutorials. Let's build the future, together!
      Chat with us!
      connect@pixelhowl.com
      Feel free to discuss your ideas with us!
      © 2025 PixelHowl. All rights reserved. Made with ♥ by tech enthusiasts.
      PixelHowl
      Logo