*CHECKPOINTCTL-DIFF*(1)
β¨ checkpointctl-diff β the glow-up your checkpoints deserve π
okay bestie, so this is checkpointctl-diff(1) from the CHECKPOINTCTL manual, and it's literally here to spill the tea on what changed between two container checkpoints. no cap, it's iconic. πΈ
π¦ SYNOPSIS
checkpointctl diff [OPTION]... CHECKPOINT_A CHECKPOINT_B
π DESCRIPTION
You hand it two container checkpoints and it compares them, showing you the diff in:
- Process tree β new, removed and modified processes π
- File descriptors β files that got opened or closed π
- Sockets β network sockets that appeared or vanished π
- Stored memory page-image sizes β the sizes as they're stored on disk π§
Command lines and environment variables? Those get read straight from the memory pages inside each archive. CRIU LZ4-compressed pages are decoded automatically β and heads up, that needs checkpoint/inventory.img. β¨
lowkey important: compression can change the stored page-image sizes without changing the process memory at all. the size_change_mb field in the JSON output is measured in MiB, fr fr.
Each checkpoint's details show CRIU compression: Enabled or CRIU compression: Disabled. The JSON output includes the boolean field criu_compression in both checkpoint_a and checkpoint_b. This setting is about CRIU memory page compression β independent of archive compression, don't get it twisted. And archives that don't have checkpoint/inventory.img? Those get reported as compression disabled, for compatibility with older checkpoints. slay π«Ά
Container created shows when the container was created, so it's the same for checkpoints of the same container (obviously, bestie, it's the same container π). The JSON output keeps this timestamp in the created field of checkpoint_a and checkpoint_b.
Checkpoint data size is the combined size of the files under checkpoint/, memory images and CRIU metadata included. It reflects CRIU page compression but not compression of the archive. The JSON output keeps this value in total_size. the way that's so specific and yet so necessary π
π OPTIONS π
-h,--helpβ show help forcheckpointctl diff. ask and you shall receive, bestie β¨--filesβ include file descriptors in the diff π--format=FORMATβ specify the output format:treeorjson(default"tree") π--ps-tree-cmdβ include full command lines in the process tree diff--ps-tree-envβ include environment variables in the process tree diff π±--show-unchangedβ show entries that are identical between the two checkpoints (yes, the boring ones too, we're being thorough)--socketsβ include sockets in the diff π
π EXAMPLES
Compare two checkpoints with the default tree view:
$ checkpointctl diff checkpoint1.tar checkpoint2.tar
Show differences including file descriptors and sockets:
$ checkpointctl diff --files --sockets checkpoint1.tar checkpoint2.tar
Include command line arguments and unchanged entries:
$ checkpointctl diff --show-unchanged --ps-tree-cmd checkpoint1.tar checkpoint2.tar
Output differences in JSON format:
$ checkpointctl diff --format json checkpoint1.tar checkpoint2.tar
π SEE ALSO
checkpointctl(1) β go read the main character's page too, iykyk
π AUTHOR
The CRIU team π«Ά
and that's the whole vibe check, bestie β this page is from the checkpointctl manual, dated 2026-10-19. go diff some checkpoints, you ate π β¨π
π¦ where this page comes from
- fedora 43: checkpointctl 1:1.7.0-2.fc43 Β· Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND MPL-2.0
- fedora 44: checkpointctl 1:1.7.0-2.fc44 Β· Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND MPL-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms