zpaqfranz

fcorbelliMIT活跃维护

带加密和去重的归档备份工具,内置严格自检,能当勒索软件中和器用,适合做严肃的备份与灾难恢复。

Deduplicating archiver with encryption and paranoid-level tests. Swiss army knife for the serious backup and disaster recovery manager. Ransomware neutralizer. Win/Linux/Unix

65.19发布于 2026-11-09 11:43 UTC508star +2 / 7 天39fork同步于 2026-11-10 23:57 UTC

怎么上手

由 README 提炼,执行前请确认
zpaqfranz a backup.zpaq /home/me/data
zpaqfranz x backup.zpaq -to /tmp/restore -until 3
硬件要求按 README 说明

README 未说明显存或 GPU 要求;面向多核 CPU 与现代 SSD/NVMe 优化,可在 Windows(含 XP)、Linux、macOS、FreeBSD、OpenBSD、TrueNAS、Synology、QNAP、ARM 与 ESXi 上运行。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

带加密与去重快照的归档备份工具,单文件存多版本,适合严肃的备份与灾难恢复

带加密和去重的归档备份工具,内置严格自检,能当勒索软件中和器用,适合做严肃的备份与灾难恢复。

核心能力

  • 单文件内存放去重后的多版本增量快照
  • 用 AES-256 加密,可选 ChaCha20 系 Franzen 加密
  • 支持 SHA-2/SHA-3/BLAKE3/XXH3 等多种哈希校验
  • 可将归档只读挂载为盘符或目录浏览各版本
  • 支持整盘镜像并还原为 VHD/VHDX/VMDK 虚拟磁盘

容易踩的坑

挂载功能在 Windows 上依赖 WinFsp,open 版不含该库且不支持挂载;Franzen 加密的归档无法被原版 zpaq 7.15 解压;Windows 整盘镜像还原需借助单独的 WinPE ISO。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本65.19
  1. 65.19Windows 32/64 bit executables and source code最新正式版2026-11-09 · 2026-11-09 11:43 UTC

    zpaqfranz 65.19 update can be trusted (more or less)

    IMPORTANT: A DIGITAL SIGNATURE IS NOT A WARRANTY OF ANY KIND

    My digital signature does not make me responsible for whether this software works, fails, or meets your expectations. zpaqfranz is open-source software, provided free of charge, which you are entirely free to use or not to use, at your own discretion.

    The signature is simply a security measure designed to reduce the risk of installing an update from an untrusted source. It helps you verify that an update really comes from me and has not been tampered with.

    This isn't a perfect solution (after all, nothing is), but it should be seen as an improvement: a way to mitigate a potential risk. In short, a service.

    The best approach (and I've made all the necessary technical information available) is to compile the program from source. This is standard practice in the non-Windows world (although binary packages and even containers are also very common). In short, I hope you can see my commitment to the highest possible level of transparency.

    And one more thing: YOU are always in control. YOU decide whether to run the update command. zpaqfranz NEVER updates itself automatically without an explicit command from YOU. No hidden "Windows update" here 😄

    Ok, going back...

    update downloads a new zpaqfranz from my site and replaces the one you have. What makes the new exe "good" is my digital signature: an Italian qualified electronic signature. In 65.19, that check has become stricter: zpaqfranz knows my certificate, byte by byte, and accepts nothing else. On Windows, BTW, downloads now use HTTPS, made by Windows itself (urlmon, then WinINet), with its own certificates. Not a big improvement (the signature is what counts), but better than nothing.

    zpaqfranz update                    is there a newer one? (the signature is checked)
    zpaqfranz update -force             if there is, install it
    zpaqfranz update -paranoid          check my signature yourself (openssl, or a web site)
    zpaqfranz update -force -kill       install it regardless (and, if the signature cannot
                                        be verified, only after you type its URL)
    

    My signature: take it or leave it

    The certificate is an Italian qualified electronic signature, on a SIM. In Italy it has full legal value but outside Italy it is not widely used.

    I use it because I already pay for it, instead of paying for one more certificate to some "friend" of Microsoft. So, dear user: if you're comfortable with it, use it. If you are not... don't.

    Downloading an executable from the Internet always requires some care, no matter where it comes from: it is a common problem, not specific to zpaqfranz. If you have doubts, take zpaqfranz from GitHub or SourceForge, or compile it yourself: I made a tool for that, zpaqbuilder.

    I cannot do much more than this (and it is already much more than 99.99% of the software on the Internet).

    BTW: if you are willing to pay for the M$ certificate for me, I'll adopt one :)

    And:

    • update on Windows uses HTTPS, and falls back to HTTP by itself where HTTPS cannot work (an old Windows Server, zpaqfranz32.exe on XP): the signature is checked anyway.
    • update is only for zpaqfranz.exe, zpaqfranzhw.exe and zpaqfranz32.exe: zpaqfranz-full and the XP build refuse it (see the final note).
    • When my certificate expires (2028-12-24), the zpaqfranz you have cannot know the next one, and refuses it, as it must refuse a fake. update -force -kill can install it all the same, after a captcha: the URL of the exe, typed exactly. Or download it by hand, once.

    Other "things"

    • The replacement of the exe is safe: if anyt
  2. 65.18Just about everything2026-11-07 · 2026-11-07 14:55 UTC
    查看更新说明

    zpaqfranz 65.18

    Two main things in this release.

    Franzen no longer needs libsodium. The cryptography of Franzen is now built into zpaqfranz: franzsodium. Nothing to install, nothing to download, no DLL. libsodium is not thrown away: it stays, optional, as a second and independent engine to check the first one against. This is cryptography, and it deserves the utmost care.

    The compression levels have names: -lean -fast -normal -good -better -ultra -max. A new scale, easy to remember. The zpaq models 1, 2 and 3 partly give way to the modern ones, faster and with much less RAM; 4 and 5, the ones that compress the most, stay.

    zpaqfranz a backup.zpaq c:\data                              the default (-normal): leave it
    zpaqfranz a backup.zpaq /share -lean                         a cheap NAS, little RAM
    zpaqfranz a backup.zpaq c:\data -good                        a bit smaller, a bit slower
    zpaqfranz a backup.zpaq c:\data -franzen MyLongPassword      encrypted, nothing to install
    

    Which level? My advice

    In the vast majority of cases you do not need to change the level. Leave the default: today it is a very good balance between speed, resources used and size of the archive.

    -fast is indeed a bit faster, but not by much. It is worth it only if you really want the fastest that zpaqfranz can give today.

    -good has its use: a little slower, a little smaller. It is probably the best choice after the default.

    The levels above it differ in one key point: the speed of extraction. With -better it is high. With -ultra and -max it is about the same as the speed of compression, that is, slow. Those two are for data you expect to extract rarely, or for small data.

    In short:

    LevelWhen
    -leanweak hardware, little memory (a cheap NAS...). On really minimal hardware add -t1 too
    -fastwhen you want top speed, at the cost of the size of the archive
    -normalthe default, the one I recommend
    -goodmy second choice
    -betterwhen you want to compress a lot, but you will extract often
    -ultrahigh compression, slow
    -maxthe smallest archive, with no compromise

    And:

    • -fast is a level now. The switch that stores the history for a fast l is -lfast (and -nolfast). If a script of yours writes -fast, read point 4.
    • Franzen everywhere: 32-bit Windows, the NAS, ESXi, the "open" build, static binaries. Before, none of them had it.
    • -franzen with no password is an error. Before, the archive was written in clear, with "all OK".
    • The RAM in the last line is now the peak, and next to it the peak as the operating system saw it (OS REPORT).
    • -turbo with few cores: faster, and with less RAM. The threads are counted on the cores the process is allowed to use.
    • work proxmox audit: what it takes to rebuild a Proxmox node from an empty ISO, in two archives: one with the secrets, one without.
    • -tar -not "X/*" keeps the folder X, empty, as tar does (issue 350).
    • l -all shows # (changed) with every hash, not only with the "b" ones; the help says what each hash is (-sha3 is SHA3-256) (issue 351).
    • Bugfix: pp and x -stdout could hang forever with little RAM; an archiv
  3. 65.17Just about everything2026-11-01 · 2026-11-01 13:35 UTC
    查看更新说明

    zpaqfranz 65.17

    This is the release of Proxmox. Until now, on Proxmox, zpaqfranz saved only the disks of the VMs that were files in /var/lib/vz. Of the other VMs, just the .conf, with an exit code that looked like a backup. Containers: nothing.

    Now every guest, VM or container, on every kind of storage, in two ways, each one with its restore. A version each run, deduplicated.

    zpaqfranz proxvzdump    /backup -all
    zpaqfranz proxvzrestore /backup/proxvzdump-qemu-100.zpaq 999 -storage local-zfs
    
    zpaqfranz zfsproxbackup  /backup -all
    zpaqfranz zfsproxrestore /backup/zfsproxbackup-qemu-100.zpaq 999 -storage local-zfs
    
    • proxvzdump, proxvzrestore: vzdump straight into zpaqfranz, no temporary file, any storage, running guests too. The restore is simple: one command, qmrestore or pct restore fed by a pipe.
    • proxvzdump -proxmox: two runs of a guest give the same bytes. A run with nothing changed costs KB, not MB. See the note below before you use it.
    • zfsproxbackup, zfsproxrestore: rewritten. The disks read as they are, from a snapshot where the storage has one (ZFS, LVM-thin, btrfs). A run with nothing changed costs KB.
    • work proxmox: a small manager for a Proxmox of the LAN, a menu by numbers, from any zpaqfranz, Windows too.
    • work prox user, work prox start: a user and a token that can do one thing, start one guest. A client that uses them needs no libcurl.

    Restoring ZFS streams: go slowly

    The restore of ZFS streams and volumes (zfsreceive, zfsrestore, zfsproxrestore) needs more testing. It works on the test machines, it has not yet been through what real machines will do to it.

    And a restore is not a read. What it replaces is gone, and if something goes wrong halfway there is no key that brings it back. So, with care, in a safe place:

    • Try it first on a machine you can afford to lose, one you can roll back. Not on the host that matters, not for the first time on the day you need it.
    • Restore to a new dataset or a new vmid, not over the original. Look at what came out. Only then decide.
    • Before replacing anything, have another copy of it, made in another way.
    • zfsreceive and zfsrestore write a script: read it before running it.
    • -force is the switch that puts a restore on top of what is there. It does not belong in a cron.

    Details in point 6 of part one.

    -proxmox, in plain words

    Without -proxmox the stream of vzdump stays whole: what goes in the archive is what vzdump wrote, byte by byte. What comes out is the file Proxmox knows.

    With -proxmox the stream is changed on its way in, so that two runs look alike. It is still a good VMA or a good tar, and in every test made so far the guest that comes back is the same. But it is no longer the file of vzdump.

    So leaving it out is the safer choice, until -proxmox has had more checks and more tests. The price is space: MB each run instead of KB. Nothing else.

    And:

    • mysqldump rewritten, mysqlrestore new. No more script behind it. Exit code 0 only if every dump is whole: before, a wrong password, no database at all and a dump cut in half were all "OK".
    • The zfs commands reviewed, on a real pool: one archive per dataset, a second run takes only the new snapshots, Franzen, datasets at any depth, -ttl.
    • r -paranoid: what is copied is read back from the media, by pieces, during the copy.
    • -m8, the default, no longer makes a file larger. A JPEG in a small archive paid for a decoder it did not use.
    • -m 5, -t 2 with the space work. A wrong command line stops with exit code 2, it no longer shows the help with exit code 0.
    • Bugfix: many

    Part one, what is new, for the user

    1. [Proxmox: which one](#1-prox
  4. 65.16Just about everything2026-10-30 · 2026-10-30 19:00 UTC
    查看更新说明

    zpaqfranz 65.16

    This is the release of repack. A zpaq archive is a journal: every update is added at the end, nothing ever goes away. With years of backups in it, the old versions cost space and nobody needs them all. Until now there was no way out but extracting and starting again.

    zpaqfranz repack z:\backup.zpaq 7d4w12my -to z:\new.zpaq
    

    A new archive with only the versions you want: the last 7 days, 4 weeks, 12 months, every year. What they do not use is thrown away, and the new archive is checked to the last bit before it gets its name.

    • Which versions: a list (1,5,10-20), the last ones (47last, 7-last), or rules by date, grandfather-father-son (7d4w12my), with a reserve of the latest versions that are always kept.
    • repack -test: which versions would be kept, and why. Nothing written.
    • repack -quick: the blocks whose data are all kept are copied as they are. Not decompressed, not compressed again.
    • repack -all: every version, so the same archive in another method.
    • Another password, or none, or another kind of encryption: plain, AES, Franzen, AES + Franzen, from any of them to any of them.
    • purge: the same command, by another name.

    And:

    • Files of a Linux or a NAS archive lost on Windows, with "all OK": read point 9 of part one. Case.txt and case.txt, finale. and finale, .bashrc and .BASHRC, a file called nul: one of the two was lost, and x said all OK, exit code 0. No more: every file comes out, and what is renamed is said.
    • w and tw on many archives: tw z:\test\*.zpaq, with a list at the end of what is not OK.
    • h -no*: the help of a switch takes * and ?.
    • -nodashboard works for every command.
    • -tar on every build that can do it: an Oracle Linux 7.9 built by hand with -DANCIENT gave 79531! Cannot get metadata on every file. Now it works. Where it cannot (ESXi, the open build) it says so, before writing.
    • After a control-C the console is as it was: no more all yellow, all green.

    Part one, what is new, for the user

    1. repack: only some versions
    2. Which versions
    3. repack -test: what would be kept
    4. repack -quick: whole blocks copied
    5. Another method, another password
    6. What you see while it works
    7. w and tw on many archives
    8. -tar everywhere it can be
    9. Names that are one file for Windows
    10. h -no*, -nodashboard
    11. Smaller things

    1. repack: only some versions

    zpaqfranz repack z:\1.zpaq 1,last -to z:\2.zpaq          the first and the last
    zpaqfranz repack z:\1.zpaq 1,10,20-25 -to z:\2.zpaq      some of them
    zpaqfranz repack z:\1.zpaq 7d4w12my -to z:\2.zpaq        by date
    zpaqfranz repack z:\1.zpaq -all -m1 -to z:\2.zpaq        all of them, -m1
    

    Version 3 of the new archive is the version it comes from: the same files, with the same dates, attributes and hashes, the same date of the version, its comment. -until with a date says the same in both archives.

    The source is never touched: the output is another file (-to), one file only. It is written as <name>.tmp, read again from the disk, checked, and only then renamed. Anything wrong: exit code 2, no output. With -force an output that already exists is replaced, at the end, if all is good.

    By default the data are decompressed, checked and compressed again with -m (default -m8, -m1 in a build without zstd). -t as usual.

    2. Which versions

    1,5,10-20version 1, version 5, from 10 to 20 (any order, each one on
  5. 65.15Windows 32/64 bit executables and source code and first WinPEpre-release2026-10-27 · 2026-10-27 16:13 UTC
    查看更新说明

    zpaqfranz 65.15

    DO NOT USE IN PRODUCTION: IT IS STILL TO BE STABILIZED

    65.15 has two "things":

    1. Less RAM: to handle bigger archives (millions of files), and to work better where the RAM is little (a NAS, a VM, a small machine).
    2. Tests that can be trusted: a general strengthening of the integrated test functions (t, t with a folder, tw, pp, p, and x that checks while it extracts). OK only when it is really OK.

    1. Millions of files, little RAM

    65.15 is about the extreme case: a folder of 3 million files, almost all duplicated (hundreds of versions of the sources of Wine, 60 GB), on a Windows 11 VM with 8 GB of RAM. Measured there, before and after:

    G:\test, 3,092,753 files, 60.6 GB65.14n65.15a
    d g:\test -ssd, after the hashes ("thinking")459 s32 s
    d g:\test -ssd, peak RAM (commit)6.48 GB4.50 GB
    t g:\m6.zpaq (3,117,410 files), peak RAM (commit)6.09 GB4.56 GB
    t g:\m6.zpaq, time1660 s1686 s
    a g:\zt_a\a.zpaq g:\test (3,480,314 files)out of RAM at the enddone, 23.8 min
    a g:\zt_a\a.zpaq g:\test, peak RAM (commit)7.02 GB5.17 GB

    And when the RAM is not enough:

    x of 16 blocks -m52, RAM limited to 150 MB65.14n65.15a
    "Job N killed: std::bad_alloc"160
    files extracted right0 of 88 of 8
    exit code20
    zpaqfranz x z:\1.zpaq -to z:\out
    03664$ RAM: 297.24 MB free for the blocks, 270.94 MB taken, this one 87.19 MB: fewer threads at a time (slower, but it goes)
    RAM: at most 2 blocks decompressed at the same time (16 threads)
    98.937s (00:01:38,1.27GB) (all OK)
    

    For the index that does not fit at all there is x -lowram: the archive is read once per pass, every pass takes a part of the names.

    65.15b adds a command, tw: the test of w -ramdisk -test -checksum -ssd in two letters, with a dashboard; a folder after the archive and it is t archive folder, but decompressing every file.

    2. Tests that can be trusted

    65.15 tests the tests. Damaged copies of archives, made on purpose (every byte of them, one at a time, in six ways), given to t, t with a folder, tw, pp, p and x, and what they say compared with what really comes out of x. The rule: OK only if it is really OK; something that can be recovered is a WARNING; everything else is an ERROR. The same campaign, before and after:

    84,000 damaged copies, 4 archives, every byte, 6 kindsfirst runlast run
    checks759,042844,420
    a test OK (or WARNING) with a file lost or wrongnot measured0
    hangs (over 1 s, killed)6260
    tests that say different things (INCONSISTENT)46,76888 (then 6)
    the most RAM of one test390 MB6.2 MB

    Then 40,198 copies of real archives (-m1 ... -m5, -m8, -nofast, -key, three versions with files changed and deleted), damaged where the structure of the blocks says it matters, on FreeBSD: t, tw and pp say the same on every copy, p is never OK with a file lost, and the same copies under AddressSanitizer gave no memory error. None of this makes the normal t and x slower: measured, within 1%.

    Part one, what is new, for the user

    1. d: the duplicates of millions of files

    After the hashes, d looked at every file of every group once more, by its name, to see the hard links: 2.9 million more opens, one thread, no output. Now who a file is on the disk (volume, file, how many names) is taken while it is hashed, from the very file that is read. The scan keeps only what d uses (size and date) and a small file is read with a small buffer (it was 512 KB made and zeroed for every file).

    d, 100,000 small files, warm cache, 32 threads65.14n65.15a
    hashes1.9 s0.75 s
    after the hashes2.33 s0.23 s

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    zpaqfranz: advanced multiversioned archiver, with HW acceleration and SFX (on Windows)

    Swiss army knife for backup and disaster recovery

    GitHub release SourceForge downloads License: MIT

    High-performance archiver and backup for mission-critical data.
    Like 7z or RAR on steroids, with deduplicated snapshots (versions) in a single file: far more efficient and versatile than Time Machine or ZFS snapshots.

    Built for speed on multi-core CPUs and modern SSD/NVMe drives: 1 GB/s and more, up to 3x faster than 7-Zip.

    programtimearchive
    zpaqfranz (current)6.5 s5.44 GB
    zpaqfranz (older)15.4 s5.64 GB
    tar | zstd -18.1 s6.22 GB
    7-Zip -mx121.9 s5.74 GB
    WinRAR -m140.4 s6.01 GB

    Quick-and-dirty comparison against popular archivers: Windows 11, Ryzen 9 7950X3D, RAM disk, a Debian virtual machine of 11.7 GB as test set. 7-Zip 26.03, RAR 7.23, zstd 1.5.7, each in its fastest mode; median of three runs. Full details in the release notes of 65.3 and 65.5.

    And that is only the first run. On the second one 7-Zip, RAR and tar rewrite everything; zpaqfranz stores only what changed.

    🖥️ catpaq - Official GUI, open source, ready to use on many platforms.

    📥 Direct downloads (latest versions):

    Windows Debian Fedora Arch Linux macOS

    Key features

    • Deduplicated, incremental and versioned backups
    • Anti-ransomware integrity checks and deep validation
    • Multi-hash support: SHA-2, SHA-3, BLAKE3, XXH3 and more
    • Strong encryption: AES-256 (-key) as standard, optional ChaCha20-based Franzen (-franzen), or even both!
    • Low bandwidth for cloud, NAS and USB: only the new data travel
    • Full deduplicated disk imaging
    • Read-only mount of archives as a drive or a folder
    • GUI for Windows, Linux and macOS: catpaq

    Cross-platform and lightweight: Windows (XP included), Linux, macOS, FreeBSD, OpenBSD, TrueNAS, Synology, QNAP, ARM and ESXi. Without Franzen encryption, every archive can still be extracted by the original zpaq 7.15.

    15+ years of active development • 100% FOSS • Forever free


    Third-party software

    Projects made by others around zpaqfranz and the zpaq format.
    They are independent and I have not developed or tested them, so give them a try with a bit of care: Доверяй, но проверяй (doveryai, no proveryai: trust, but check)

    ProjectTypeDescription
    rizpaqWindowsZPAQ power without the console. Desktop archiver for Windows: versioned ZPAQ backups, PAR2 protection, ZIP/7z/RAR support. GUI for zpaqfranz.
    ZpaqTreeViewPythonAllows browsing and extraction of a zpaqfranz archive in a tree/hierarchical file structure view.

    Made something for zpaqfranz? Open an issue or a pull request to be listed here

    What's new

    ⚡ Much faster, with nothing to change

    The default of a (add) is now faster on every side: zstd compression (-m8), a multithreaded deduplicator (-turbo), a cached list of the files (-fast: l in a fraction of a second). The archive is still a normal zpaq archive: zpaq 7.15 extracts it too.

    Smarter and faster

    • Checking a backup against the disk (t backup.zpaq c:\data -ssd): nothing is decompressed, the files are read in parallel. 116,725 files (6.5 GB) checked in 2.0 s (warm cache, 32 threads).
    • Windows, whole NTFS drives: the file list is read straight from the $MFT, 7 times faster on a C: than the standard FindFirstFile/FindNextFile (12 times with a shadow copy).
    • Millions of files with little RAM: 3.5 million files added with only 8 GB of RAM.

    💽 Images of C: (and of any drive)

    zpaqfranz a z:\c.zpaq c: -image
    

    One switch, and it chooses by itself: on NTFS the used clusters, from a shadow copy (VSS), without pagefile and hiberfil; FAT, FAT32 and exFAT by their used clusters too; anything else byte by byte (-raw for that, always). Deduplicated like everything else: the second image of the same C: stores only what changed.

    • About 800 MB/s for the image of C: on my workstation (2026, NVMe, 16 cores)
    • Thin images: the free clusters become zeros in the image.
    • Back out as a virtual disk: image z:\c.zpaq c: -to d:\c.vhd (or .vhdx, .vmdk for VMware, VirtualBox, QEMU/Proxmox, or a raw file), any older version with -until, over 2 TB too
    • Back on a partition: image z:\c.zpaq c: -to g: -image
    • The whole disk of Windows, for a restore that boots (beta): ac z:\pc.zpaq takes C: plus the hidden partitions and the partition table; xc z:\pc.zpaq -to 2: -force puts it back (or -to x.vmdk / x.vhdx). There is a WinPE ISO to restore from.

    On Linux, the BSDs and macOS a /dev/sdb -image takes the device byte by byte, and image gives it back as a raw file.

    📂 Mount: browse a backup without extracting it

    zpaqfranz mount z:\backup.zpaq              (Windows: the first free drive letter, Explorer opens on it)
    zpaqfranz mount z:\backup.zpaq Z: -all      (every version, one folder each)
    zpaqfranz mount /backup/nas.zpaq /mnt/zpaq  (Linux, FreeBSD, OpenBSD, macOS)
    

    The archive becomes a read-only drive or folder: open, copy, search, play, diff any file, with no temporary folder.

    • -all: one folder per version, each a full snapshot. "What did this file look like in June?" is a copy; "what changed between two backups?" is a diff -r between two folders
    • -range 5:9: only what versions 5 to 9 added or changed
    • encrypted, Franzen and multipart archives too; -test mounts, reads every file through the mountpoint and checks it
    • Images too: mount d:\c.vhd attaches a .vhd, .vhdx or .iso read-only, and you look into yesterday's C:

    Windows needs WinFsp (mount offers to download and install it; zpaqfranz-full.exe carries it inside); Linux and the BSDs FUSE, macOS FUSE-T or macFUSE. The mount of .vhd/.iso needs no WinFsp, only the administrator (it asks).

    And more

    proxvzdump / zfsproxbackup for every guest of Proxmox, with their restores · mysqldump / mysqlrestore · repack to keep only some versions (7d4w12my) · reports by e-mail (-mailfull, -mailprivacy) · x -recover on damaged archives · cloud upload in append · f -test surface test of a disk or a USB stick · SFX on Windows · help in English, Italian and Russian (-it, -ru)


    Quick start

    zpaqfranz a backup.zpaq /home/me/data                 # first run: everything; then only the changes
    zpaqfranz i backup.zpaq                               # the versions
    zpaqfranz l backup.zpaq                               # the files of the last version
    zpaqfranz t backup.zpaq /home/me/data -ssd            # is the backup equal to the disk?
    zpaqfranz x backup.zpaq -to /tmp/restore -until 3     # restore version 3
    zpaqfranz mount backup.zpaq /mnt/zpaq -all            # browse every version
    

    Windows is the same (zpaqfranz a z:\backup.zpaq c:\data). Run zpaqfranz alone for the help, zpaqfranz h <command> for one command, or zpaqfranz t with no archive to choose it on a screen.

    The help follows the language of the system (English, Italian, Russian). To choose it, add -eng, -it or -ru to any line: zpaqfranz -it, zpaqfranz h a -ru.


    Seeing is believing

    Archiving a folder 5 times, a daily run Monday to Friday, with 7z:

    https://user-images.githubusercontent.com/77727889/215149589-0f2d9f91-ea5a-4f60-b587-f2a506148fe9.mp4

    The same with zpaqfranz:

    https://user-images.githubusercontent.com/77727889/215148702-edb8e5bb-8f4e-42bb-9637-6ee98742318a.mp4

    The five daily .7z take about 5 times the space of the .zpaq.

    compare

    Classic archivers (tar, 7z, RAR...) are the wrong tool for repeated backups, and even more so for SQL dumps.

    Physical Xeon machine with 8 cores, 64 GB RAM and NVMe disks, plus a Solaris-based NAS, 1 Gb ethernet.

    rsync update, filesystem to filesystem (real speed):

    https://user-images.githubusercontent.com/77727889/215152167-c6ce107a-6345-4060-b7a7-33ad30b269ee.mp4

    rsync update to the Solaris NAS (real speed):

    https://user-images.githubusercontent.com/77727889/215152259-2baa7001-d838-40de-b56c-6fe3feff9f1b.mp4

    Backup update from the file system with zpaqfranz (real speed):

    https://user-images.githubusercontent.com/77727889/215146670-1a11cd5d-6f00-4544-b797-9ca288ae12b1.mp4

    Backup update via zfsbackup (real speed):

    https://user-images.githubusercontent.com/77727889/215147310-cc760f20-08b8-4088-9d8a-f58f00eac211.mp4

    Windows client, encrypted update of C: without the programs (-frugal), real speed:

    https://user-images.githubusercontent.com/77727889/215269540-8e2c8641-0d3a-4f67-a243-ab617834c5de.mp4

    Every-sector encrypted update of a 256 GB C: (accelerated):

    https://user-images.githubusercontent.com/77727889/215271199-94400833-f973-41d2-a018-3f2277a648a9.mp4

    Testing an archive at more than 1 GB/s (accelerated):

    https://user-images.githubusercontent.com/77727889/215271989-5a77e1f1-8fba-422b-9e25-24c3f4640eb2.mp4

    Update of a small server (300 GB) on a QNAP NAS: ~7 GB of Thunderbird mbox become ~6 MB, in ~4 minutes (real speed):

    https://user-images.githubusercontent.com/77727889/215268613-e07e385c-0880-4534-ae35-0db8925cee6b.mp4

    rsync of two remote backups, the .zpaq (file level) and zfsbackup (block level), one day of work of a small server (accelerated):

    https://user-images.githubusercontent.com/77727889/215267855-22bf875c-90ee-47d1-8f8f-c2d0fa2ab201.mp4


    Download

    🪟 Windows

    VariantDownloadSelf-updateNotes
    Windows 64 (recommended)zpaqfranz.exezpaqfranz upgrade -forceHW acceleration auto-detected (SHA-1/SHA-2)
    Windows 64 Fullzpaqfranz-full.exe-Every library inside, WinFsp included: no internet needed
    Windows 64 Openzpaqfranz-open.exe-Built only from the source: no binary blobs, no network, no mount of archives
    Windows 64 HWzpaqfranzhw.exezpaqfranzhw upgrade -forceExtra SHA-1 acceleration (AMD, ~+1.5%), with -hw
    Windows 32zpaqfranz32.exezpaqfranz32 upgrade -forceLimited RAM and threads: slower
    EverythingSourceForgeAll the builds, the WinPE ISO, the older versions

    upgrade checks a digitally signed (.p7m) SHA-256 before replacing the executable.

    🐧 Linux, BSD, macOS

    SystemVersionInstallDemo
    OpenBSDversionpkg_add zpaqfranz-
    FreeBSDversionpkg install zpaqfranz-
    macOSversionbrew install zpaqfranz-
    Debianversionsudo apt install zpaqfranz▶️ Desktop
    Ubuntuversionsudo apt install zpaqfranz-
    openSUSEversionsudo zypper install zpaqfranz-
    Arch LinuxversionAUR: zpaqfranz-git▶️ Terminal
    Linuxversionstatic binaries-

    The packages of the distributions follow the releases with some delay (green: up to date, red: behind). Every distribution that has zpaqfranz: Repology.

    🖥️ catpaq, the GUI

    catpaq is the official open-source GUI: direct downloads at the top of this page.

    In the console there is tui too: zpaqfranz backup.zpaq opens it.


    Real world: years of versions in one file

    A file server of a mid-sized company, ~500,000 files and ~500 GB: 1042 versions in 817 GB.

    root@f-server:/copia1/copiepaq/spaz2020 # zpaqfranz i fserver_condivisioni.zpaq
    zpaqfranz v51.27-experimental snapshot archiver, compiled May 26 2021
    fserver_condivisioni.zpaq:
    1042 versions, 1.538.727 files, 15.716.105 fragments, 877.457.003.477 bytes (817.20 GB)
    
    < Ver  > <  date  > < time >  < added > <removed>    <    bytes added   >
    00000001 2018-01-09 16:56:02  +00308608 -00000000 ->      229.882.913.501
    00000002 2018-01-09 18:06:28  +00007039 -00000340 ->           47.356.864
    00000003 2018-01-10 15:06:25  +00007731 -00000159 ->            7.314.709
    (...)
    00000147 2018-03-28 17:08:28  +00000422 -00000134 ->          277.237.055
    (...)
    00001041 2021-05-04 17:13:40  +00000605 -00000004 ->           95.909.988
    00001042 2021-05-05 17:15:13  +00000579 -00000008 ->           82.487.415
    

    The files as they were on 2018-03-28? That is version 147:

    zpaqfranz x fserver_condivisioni.zpaq -to /tmp/restore -until 147
    

    Another one, a ~200 GB server: 4904 versions from August 2017 to March 2021, in 186 GB. With tar, 7z or RAR the same 4900 copies would take 200 GB × 4900, about 980 TB. The same goes for virtual machines.


    FAQ

    Who made ZPAQ? One of the world's leading scientists in compression. No, not me, but this guy (ZPAQ on Wikipedia), from 2009 to 2016, on encode.su, one of the best-known (and super-niche) compression forums.

    Why is it not as known as 7z or RAR, if it is so much better? Because few people use it. Try it!

    Who are you? A user (and a developer) who proposed and made various improvements to ZPAQ over the years. When Dr. Mahoney retired, I made this fork to get the functions I need as a data storage manager.

    What if zpaqfranz is abandoned tomorrow? Your data are not locked in. A zpaqfranz archive is a standard zpaq archive: without Franzen encryption, the original zpaq 7.15 of 2016 extracts it, the zstd methods (-m7, -m8, -m9) too, because their decoder is stored inside the archive. With a -715 zpaqfranz writes plain zpaq 7.15 archives, without any extension of its own. And zpaqfranz itself is one MIT source file that builds almost anywhere.

    Why should I trust this? It will be one of the 1000 programs that fail silently. As the Russians (and the Italians) say: trust, but check! Checking is the part of the program I have worked on the most: hashes of every fragment and of every file, t against the disk, w and tw that decompress in RAM, p for the paranoid. In 65.15 the tests themselves were tested: 84,000 copies of archives damaged on purpose, every byte, six ways. Result: no test said OK with a file lost or wrong.

    We already have borg, restic, hashbackup, bupstash... Great programs, often very well made. They work on a repository: a folder with many files to keep together. zpaqfranz keeps everything in one file that only grows at the end: a copy is a copy of one file, rsync --append sends only the new tail, and the archive of today extracts the data of eight years ago. If it is simple, maybe it will work.

    Too good to be true? It is not magic: a block deduplicator, a compressor and an archiver, chained. There are faster compressors, better compressors, faster archivers, more efficient deduplicators. What I never found is the four together, dead simple and reliable, with good handling of non-Latin file names, in one executable with 7z-like commands. No tar | srep | zstd | something pipes, no program with dozens of dependencies.

    The archive is never modified, only appended So rsync --append (over ssh, to a NAS, to the cloud) copies only the part added by the last run: not the 700 GB of the archive, the 2 GB of yesterday. Hundreds of GB of virtual servers can be sent over a VDSL line in minutes.

    For a developer: a "super git" Put a zpaqfranz a at the top of the makefile and every version of your software is kept, libraries and SQL dumps included, forever.

    Never delete anything? You can keep every version forever. When you want fewer, repack writes a new archive with only the ones you choose (e.g. repack old.zpaq 7d4w12my -to new.zpaq: grandfather-father-son, by days, weeks, months and years; -test shows what would be kept).

    Defects? Some.

    • Extraction may need many seeks (deduplicated blocks): slow on spinning disks, not on SSDs. With enough RAM w avoids it, and xx writes the extracted files sequentially (much faster on spinning disks, less fragmentation).
    • Many small files: there tar | zstd is faster at the first run (zpaqfranz does more work per file: path, attributes, hashes for the deduplication). From the second run on, zpaqfranz stores only the changes.
    • It is a tool for power users and administrators, used to the command line. catpaq and tui help.
    • It is known and used by few.

    How to build

    One file, zpaqfranz.cpp, no dependencies (link pthread):

    g++ -O3 -Dunix zpaqfranz.cpp -o zpaqfranz -pthread                          (Linux)
    clang++ -O3 -Dunix zpaqfranz.cpp -o zpaqfranz -pthread                      (FreeBSD, OpenBSD, macOS)
    g++ -O3 zpaqfranz.cpp -o zpaqfranz -pthread -static -lurlmon                (Windows, MinGW)
    

    With mount: add -DZPAQMOUNT and FUSE ($(pkg-config fuse3 --cflags --libs) on Linux); the lines for every system are in "Building with Mount Support", at the top of the source.

    Every release is built and tested on Windows, Linux (Fedora, openSUSE, Arch, Oracle Linux 7), FreeBSD, OpenBSD, macOS, Solaris, ESXi and ARM NAS.

    Documentation

    License

    MIT, Copyright (c) 2021-2026 Franco Corbelli. Based on ZPAQ 7.15 by Matt Mahoney; the licenses of the built-in libraries are listed in the source.