*CHECKPOINTCTL-DIFF*(1)

πŸ“¦
version 1.7.0 Β· 3 versions
, in fedora 43, fedora 44

✨ 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 for checkpointctl diff. ask and you shall receive, bestie ✨
  • --files β€” include file descriptors in the diff πŸ“‚
  • --format=FORMAT β€” specify the output format: tree or json (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