2026-07-01
tar was designed for magnetic tape in 1979. Every design choice — sequential access, no index, incrementals via full filesystem walks, "let me stream the whole thing to find one file" — makes sense on a spinning reel. On a 20 TB spinning disk with a home directory full of Docker layers, it's malpractice. dar (Disk ARchive, first release 2002, still actively maintained) is what tar would be if it were designed for random-access media.
The killer feature: every dar archive ends with a catalog — a compressed index of every file, its inode metadata, its position in the archive, and its compression parameters. Listing, extracting, or diffing goes straight to the catalog. No streaming 800 GB to check whether photos/2019/ is in there.
# Full backup, per-file gzip, skip already-compressed extensions
dar -c /backup/full -R /home/shaun -z -Z "*.jpg" -Z "*.mp4" -Z "*.zst"
# List contents — reads the catalog at the tail, not the payload
dar -l /backup/full | head
# Random-access extraction of one file
dar -x /backup/full -R /tmp/restore -g monitoring-stack/router/network-config.yaml
Real incremental backups. tar's --listed-incremental requires walking the entire tree and comparing to a snapshot file. dar reads the previous catalog and diffs against inode ctime/mtime — the archive itself is the snapshot:
# Yesterday's full is the reference. Only changed files land in the incremental.
dar -c /backup/2026-07-01-incr -A /backup/full -R /home/shaun -z
# Chain of incrementals — restore replays them in order
dar -x /backup/2026-07-01-incr -A /backup/full -R /tmp/restore
Isolated catalogs. Want to plan a restore from an archive stored on a slow S3 tier? Extract just the catalog — a few megabytes — and browse it locally:
dar -C /local/catalog_only -A /slow-storage/full
dar -l /local/catalog_only # instant, no cloud round-trip
Slicing that actually resumes. tar's -M multi-volume is a foot-cannon; dar slices are self-describing, resumable, and each carries a copy of the catalog if you ask:
# 4 GB slices, extract executes a hook when a slice is needed (mount media, fetch from S3…)
dar -c /backup/vol -R /home/shaun -s 4G -E 'aws s3 cp %p s3://bucket/'
Filesystem-diff mode. Not a backup — an audit. Compare a live tree against a known-good archive without extracting anything:
dar -d /backup/full -R /home/shaun
# reports: modified, added, deleted, permission changes, xattr changes, ACL changes
dar also handles sparse files properly (tar corrupts them into dense files unless you remember --sparse), preserves Linux xattrs and POSIX ACLs by default, supports strong encryption (-K aes:) with the key derived per-slice so a torn slice doesn't leak the rest, and has a stable libdar C++ library plus Python bindings if you want to build a UI on top.
The one honest downside: the CLI syntax is 2002-flavored. -c creates, -x extracts, -l lists, -t tests, -d diffs, -C isolates a catalog, -A supplies a reference archive, and -R is the root. Once it's in your muscle memory, you'll wonder why we all still tar tzf | grep a 400 GB tarball to find one config file.
