Proxmox Backup Server and Client

Overview

Build & Release Notes

rustup Toolchain

We normally want to build with the rustc Debian package. To do that you can set the following rustup configuration:

# rustup toolchain link system /usr # rustup default system

Versioning of proxmox helper crates

To use current git master code of the proxmox* helper crates, add:

git = "git://git.proxmox.com/git/proxmox"

or:

path = "../proxmox/proxmox"

to the proxmox dependency, and update the version to reflect the current, pre-release version number (e.g., "0.1.1-dev.1" instead of "0.1.0").

Local cargo config

This repository ships with a .cargo/config that replaces the crates.io registry with packaged crates located in /usr/share/cargo/registry.

A similar config is also applied building with dh_cargo. Cargo.lock needs to be deleted when switching between packaged crates and crates.io, since the checksums are not compatible.

To reference new dependencies (or updated versions) that are not yet packaged, the dependency needs to point directly to a path or git source (e.g., see example for proxmox crate above).

Build

on Debian 11 Bullseye

Setup:
  1. # echo 'deb http://download.proxmox.com/debian/devel/ bullseye main' | sudo tee /etc/apt/sources.list.d/proxmox-devel.list
  2. # sudo wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
  3. # sudo apt update
  4. # sudo apt install devscripts debcargo clang
  5. # git clone git://git.proxmox.com/git/proxmox-backup.git
  6. # cd proxmox-backup; sudo mk-build-deps -ir

Note: 2. may be skipped if you already added the PVE or PBS package repository

You are now able to build using the Makefile or cargo itself, e.g.:

# make deb-all
# # or for a non-package build
# cargo build --all --release

Design Notes

Here are some random thought about the software design (unless I find a better place).

Large chunk sizes

It is important to notice that large chunk sizes are crucial for performance. We have a multi-user system, where different people can do different operations on a datastore at the same time, and most operation involves reading a series of chunks.

So what is the maximal theoretical speed we can get when reading a series of chunks? Reading a chunk sequence need the following steps:

  • seek to the first chunk's start location
  • read the chunk data
  • seek to the next chunk's start location
  • read the chunk data
  • ...

Lets use the following disk performance metrics:

AST: Average Seek Time (second)
MRS: Maximum sequential Read Speed (bytes/second)
ACS: Average Chunk Size (bytes)

The maximum performance you can get is:

MAX(ACS) = ACS /(AST + ACS/MRS)

Please note that chunk data is likely to be sequential arranged on disk, but this it is sort of a best case assumption.

For a typical rotational disk, we assume the following values:

AST: 10ms
MRS: 170MB/s

MAX(4MB)  = 115.37 MB/s
MAX(1MB)  =  61.85 MB/s;
MAX(64KB) =   6.02 MB/s;
MAX(4KB)  =   0.39 MB/s;
MAX(1KB)  =   0.10 MB/s;

Modern SSD are much faster, lets assume the following:

max IOPS: 20000 => AST = 0.00005
MRS: 500Mb/s

MAX(4MB)  = 474 MB/s
MAX(1MB)  = 465 MB/s;
MAX(64KB) = 354 MB/s;
MAX(4KB)  =  67 MB/s;
MAX(1KB)  =  18 MB/s;

Also, the average chunk directly relates to the number of chunks produced by a backup:

CHUNK_COUNT = BACKUP_SIZE / ACS

Here are some staticics from my developer worstation:

Disk Usage:       65 GB
Directories:   58971
Files:        726314
Files < 64KB: 617541

As you see, there are really many small files. If we would do file level deduplication, i.e. generate one chunk per file, we end up with more than 700000 chunks.

Instead, our current algorithm only produce large chunks with an average chunks size of 4MB. With above data, this produce about 15000 chunks (factor 50 less chunks).

You might also like...
Automatically download minecraft server jars in one line

MCDL Automatically download minecraft server jars in one line (or one click) Installation Download (Windows, Linux) Install via cargo: cargo install m

Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs

Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients*, perfect for self-hosted deploy

Axum server starter template

Axum Starter Template A template to get started with Axum Features Tracing and bunyan formatting SQLx support (with testing) Server as library Example

A language server implementation for the WGSL shading language

wgsl-analyzer wgsl-analyzer is a language server plugin for the WGSL Shading language. It comes with a VS Code plugin located in ./editors/code, but d

A small in-house bot of the TTC Discord Server

Welcome to The Terminal cafe Support Bot Repository Hello, hope you are having a nice day. This is the official repository for The Terminal Cafe Suppo

A server to continously poll nearly always-on sites to verify that your internet connectivity stays up

Dead Router A server to continously poll nearly always-on sites to verify that your internet connectivity stays up! If one or more of the servers stop

The missing link to modern server controlling for TrackMania Forever.
The missing link to modern server controlling for TrackMania Forever.

xrd (XASeCo Replacing Daemon) xrd is a next-gen server controller for TrackMania Forever and Nations ESWC that is designed to be hassle-free and easil

Basic ActivityPub Server (in Rust)

Basic ActivityPub Server (in Rust) This is a deep-dive on this blog post: https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-s

A rust(serenity) based discord bot for the hacksquad discord server

A Discord Bot for Hacksquad How to Deploy? Requirements Docker Docker Compose Steps To Run Copy the docker-compose.yml and .env.example files to your

Owner
Read-Only Proxmox Projects Repository Clone.
If you want to contribute to the project please visit: https://pve.proxmox.com/wiki/Developer_Documentation.
Read-Only Proxmox Projects Repository Clone.
Lightweight tool for simple deployment (server+client)

deploy Lightweight tool for simple deployment (server+client) Usage You first need a key value pair: deploy generate-keys Public-Key: Used on the serv

Jan-Mirko Otter 0 Dec 27, 2021
xrd a next-gen server controller for TrackMania Forever and Nations ESWC

xrd is a next-gen server controller for TrackMania Forever and Nations ESWC that is designed to be hassle-free and easily updatable (with a bus factor of 0).

Autumn Leaf 6 Mar 26, 2022
Rust implementation for Wlroots (Sway, Wayfire, Hikari, River, etc.) of Gnome Screenshot and Idle DBUS Server, which Upwork uses to capture the screen as proof of work.

?? upwork-wlroots-bridge ?? Rust Implementation for Wlroots (Sway, Wayfire, Hikari, River, etc.) of Gnome Screenshot and Idle DBUS Server (with extra

Daniel Moretti V. 4 Jan 2, 2023
Erlang Language Platform. LSP server and CLI.

Erlang Language Platform (ELP) Description ELP integrates Erlang into modern IDEs via the language server protocol. ELP was inspired by rust-analyzer.

WhatsApp 31 Aug 7, 2023
Efficent platform for inference and serving local LLMs including an OpenAI compatible API server.

candle-vllm Efficient platform for inference and serving local LLMs including an OpenAI compatible API server. Features OpenAI compatible API server p

Eric Buehler 21 Nov 15, 2023
The SATySFi Language Server

[WIP] SATySFi Language Server This repository is work-in-progress yet. Features Kind Function Done codeAction Add the definition of an undefined comma

monaqa 50 Dec 24, 2022
A language server for lua written in rust

lua-analyzer lua-analyzer is a lsp server for lua. This is mostly for me to learn the lsp protocol and language analysis so suggestions are helpful. T

null 61 Dec 11, 2022
Locast to Emby/Plex/Channels server

This application provides an interface between locast.org and Media Servers like Plex Media Server (PMS) and Emby by acting like an HDHomerun or an m3u tuner and an XMLTV provider.

Wouter de Bie 51 Sep 10, 2022
Björn - The AS207960 ACME server

Björn - The AS207960 ACME server Björn is not a full CA upon to itself, but contains many of the building blocks of a complete ACME CA. Components Bjö

AS207960 / Glauca 5 Feb 17, 2022
Rust 版本的 UnblockNeteaseMusic/server ,以效能、穩定性及可維護性為目標。

【開發中】unm-server-rust Rust 版本的 UnblockNeteaseMusic/server ,以效能、穩定性及可維護性為目標。 安裝 最新版本 下載二進位檔案 前往 Actions 分頁找到 “Build binaries for UNM“,點開後可從 Artifacts 中

Unblock Netease Music 维护小组 123 Dec 26, 2022