Skip to main content

tar.xz - High Compression Archives

.tar.xz combines tar (archiving directories) with XZ (LZMA2) compression. Use it when you want smaller archives than tar.gz and you can afford slower compression and (often) slower restores.

Quick Summary
  • Create: tar -cJf out.tar.xz /path/to/dir
  • Extract: tar -xJf out.tar.xz -C /tmp/restore-test
  • List: tar -tJf out.tar.xz
  • Test: xz -t out.tar.xz

Restore checklist

Use this checklist before restoring a .tar.xz backup into a live WordPress docroot.

  • Verify integrity: xz -t backup.tar.xz
  • List contents: tar -tJf backup.tar.xz | head
  • Extract to staging: /tmp/restore-test/
  • Confirm key paths exist: wp-content/uploads/, wp-config.php
  • Only then copy/sync into place and restart services
restore-drill-tar-xz.sh
sudo rm -rf /tmp/restore-test
sudo mkdir -p /tmp/restore-test
tar -xJvf /home/wpbackup/wp_full.tar.xz -C /tmp/restore-test

Avoid absolute paths in tar archives

If you create an archive from an absolute path, tar can store leading directories that make restores confusing.

Preferred pattern:

create-tar-xz-with-relative-paths.sh
tar -C /var/www/html -cJvf /home/wpbackup/wp-files.tar.xz .

Advanced tuning (optional)

If your tar build does not expose every XZ knob you want, you can use XZ_OPT to pass options to the underlying xz process.

set-xz-opt-for-tar.sh
XZ_OPT='-T0 -9' tar -C /var/www/html -cJf /home/wpbackup/wp-files-max.tar.xz .
warning

Aggressive settings (-9, multi-threading, large sites) can spike CPU and I/O. Schedule this off-peak or lower the level.

Cheat sheet (extra)
TaskCommand
Create (relative paths)tar -C /var/www/html -cJf out.tar.xz .
Extract to stagingtar -xJf out.tar.xz -C /tmp/restore-test
List contentstar -tJf out.tar.xz
Test archivexz -t out.tar.xz
Show statsxz -l out.tar.xz

When to use tar.xz

tar.xz is a "size-first" format:

  • Good fit: cold storage snapshots, moving large sites over slow links, long retention backups.
  • Avoid for: high-frequency operational backups where restore speed matters.

If you want a more operational default, consider tar.zst (often faster) or tar.gz (widest compatibility).

Prerequisites

install-xz-utils-and-tar.sh
sudo apt update
sudo apt install -y xz-utils tar

  • Ensure xz-utils is installed (provides xz compression engine).
  • Have enough disk space for uncompressed files.
  • Verify access to your WordPress directory (/var/www/html or /home/dev_wpstrategist/public_html).

Core syntax and common patterns

tar-xz-common-patterns.sh
# =====================================================================
# 3. Core Syntax Formula — .tar.xz (WordPress VPS Context)
# =====================================================================

# ──────────────────────────────
# 1. Create an uncompressed archive (.tar)
tar -cvf [DESTINATION_PATH]/[ARCHIVE_NAME].tar [SOURCE_PATHS...]

# Example:
tar -cvf /home/wpbackup/sitefiles.tar /home/dev_wpstrategist/public_html
# Input directory: /home/dev_wpstrategist/public_html
# Output file: /home/wpbackup/sitefiles.tar

# ──────────────────────────────
# 2. Create an XZ-compressed archive (.tar.xz)
tar -cJvf [DESTINATION_PATH]/[ARCHIVE_NAME].tar.xz [SOURCE_PATHS...]

# Example:
tar -cJvf /home/wpbackup/sitefiles.tar.xz /home/dev_wpstrategist/public_html
# Input directory: /home/dev_wpstrategist/public_html
# Output file: /home/wpbackup/sitefiles.tar.xz

# ──────────────────────────────
# 3. Create maximum compression archive (.tar.xz)
tar -cJvf [DEST_PATH]/[ARCHIVE_NAME].tar.xz --xz -9 [SOURCE_PATHS...]

# Example:
tar -cJvf /home/wpbackup/wp_full_max.tar.xz --xz -9 /home/dev_wpstrategist/public_html
# Compression level: 9 (max)

# ──────────────────────────────
# 4. Extract a .tar.xz archive
tar -xJvf [INPUT_FILE.tar.xz] -C [OUTPUT_DIRECTORY]

# Example:
tar -xJvf /home/wpbackup/sitefiles.tar.xz -C /home/restore
# Input file: /home/wpbackup/sitefiles.tar.xz
# Output directory: /home/restore

# ──────────────────────────────
# 5. List contents without extracting
tar -tJvf [INPUT_FILE.tar.xz]

# Example:
tar -tJvf /home/wpbackup/sitefiles.tar.xz
# Output: List of files printed to terminal

# ──────────────────────────────
# 6. Test archive integrity
xz -t [INPUT_FILE.tar.xz]

# Example:
xz -t /home/wpbackup/sitefiles.tar.xz
# Output: "OK" if valid archive

# ──────────────────────────────
# 7. Decompress XZ layer only (keeping .tar)
xz -d [INPUT_FILE.tar.xz]

# Example:
xz -d /home/wpbackup/sitefiles.tar.xz
# Output file: /home/wpbackup/sitefiles.tar

# ──────────────────────────────
# 8. Compress existing .tar to .tar.xz
xz -z [INPUT_FILE.tar]

# Example:
xz -z /home/wpbackup/sitefiles.tar
# Output file: /home/wpbackup/sitefiles.tar.xz

# ──────────────────────────────
# 9. Create archive with date stamp
tar -cJvf /home/wpbackup/site_$(date +%F).tar.xz /var/www/html
# Output file: site_2025-10-26.tar.xz

# ──────────────────────────────
# 10. Backup WordPress + Database
mysqldump -u root -p'DB_PASS' wp_db > /home/tmp/db.sql && \
tar -cJvf /home/wpbackup/wp_full_$(date +%F).tar.xz /var/www/html /home/tmp/db.sql
# Input: WP files + DB dump
# Output file: /home/wpbackup/wp_full_YYYY-MM-DD.tar.xz

# =====================================================================


Key options

OptionDescriptionExampleEffect
-cCreate archivetar -cvf file.tar folderStart new archive
-xExtract archivetar -xvf file.tarUnpack files
-tList archivetar -tvf file.tarShow contents
-vVerbose modetar -cvf file.tar folderPrint file names
-fFile name followstar -cvf archive.tar folderRequired before filename
-JUse XZ compressiontar -cJvf file.tar.xz folderCompress with XZ
--xzExplicitly enable XZ modetar -c --xz -f file.tar.xz folderAlternative to -J
-CChange directorytar -xJvf file.tar.xz -C /home/restoreExtract to path
--excludeSkip file/directory--exclude=cacheIgnore selected folder

WordPress VPS use cases

ScenarioCommandGoal
Full-site backuptar -cJvf /home/wpbackup/wp_full.tar.xz /var/www/htmlComplete compressed backup
File + DB backupmysqldump -u root -pPASS wp_db > db.sql && tar -cJvf /home/wpbackup/full.tar.xz /var/www/html db.sqlCombine both data sources
Exclude cache folderstar -cJvf backup.tar.xz --exclude=cache /var/www/htmlSmaller archive
Restore backuptar -xJvf backup.tar.xz -C /home/restoreExtract files
Verify archivexz -t backup.tar.xzConfirm integrity
Automate dailytar -cJvf /home/wpbackup/wp_$(date +%F).tar.xz /var/www/htmlRotation-based backup

Comparison

FormatCommandSpeedCompressionFile SizeSupported By
.tartar -cvf⭐⭐⭐⭐❌ NoneLargeAll Linux
.tar.gztar -czvf⭐⭐⭐⭐⭐MediumAll Linux
.tar.xztar -cJvf⭐⭐⭐⭐⭐⭐SmallestModern Linux
.tar.zsttar --zstd -cvf⭐⭐⭐⭐⭐⭐⭐MediumUbuntu 22+/Debian 11+

Troubleshooting

IssueCauseFix
tar: Removing leading '/'Normal noticeSafe to ignore
“Cannot open: Permission denied”Lacks permissionUse sudo
“Unexpected EOF”Corrupted fileRedownload or re-upload
“No space left on device”Disk fullFree space or mount new volume
“Command not found: xz”xz-utils missingInstall using apt install xz-utils

Quick lab

StepCommandExpected Output
1cd /var/www/htmlEnter WordPress directory
2tar -cJvf /home/wpbackup/wp_full.tar.xz .Creates compressed archive
3tar -tJvf /home/wpbackup/wp_full.tar.xzLists archive content
4xz -t /home/wpbackup/wp_full.tar.xzIntegrity test shows “OK”
5tar -xJvf /home/wpbackup/wp_full.tar.xz -C /home/restoreFiles extracted

Cheat sheet

TaskSyntax
Create .tar.xztar -cJvf archive.tar.xz folder
Extract .tar.xztar -xJvf archive.tar.xz
List contentstar -tJvf archive.tar.xz
Test archivexz -t archive.tar.xz
Exclude foldertar -cJvf backup.tar.xz --exclude=cache folder
Compress existing tarxz -z archive.tar
Decompress to tarxz -d archive.tar.xz
Add date to filenametar -cJvf backup_$(date +%F).tar.xz folder

Mini quiz

#QuestionOptionsAnswer
1What does -J flag in tar do?a) gzip b) xz c) zipb)
2How to list files inside a .tar.xz?a) tar -xJvf b) tar -tJvfb)
3Which command tests .tar.xz integrity?a) tar -t b) xz -tb)
4Which flag extracts to directory?a) -C b) -va)
5Best use case for .tar.xz?a) Fastest backup b) Highest compressionb)

Compression levels

tar.xz uses XZ compression levels from 0 (fastest) to 9 (smallest, slowest). The default is usually level 6; choose higher levels only when space matters more than time.

Range overview

LevelSyntaxSpeedCompression RatioUse Case
-0tar -cJvf backup.tar.xz --xz -0 folder🔥 Fastest😐 LowestFor quick local archives
-3tar -cJvf backup.tar.xz --xz -3 folder⚡ Fast🙂 ModerateFor daily backups
-6 (default)tar -cJvf backup.tar.xz folder⚖️ Balanced⚖️ BalancedDefault when level not set
-9tar -cJvf backup.tar.xz --xz -9 folder🐢 Slowest🏋️‍♂️ BestFor maximum space savings

Default level: -6 (medium balance between speed and size)


Example commands

Fast compression (levels 1-3)

create-tar-xz-fast.sh
tar -cJvf /home/wpbackup/wp_fast.tar.xz --xz -3 /var/www/html

  • Faster archive creation
  • Moderate compression

Standard compression (level 6)

create-tar-xz-standard.sh
tar -cJvf /home/wpbackup/wp_standard.tar.xz --xz -6 /var/www/html

  • Default balance between CPU usage and compression ratio
  • Ideal for regular WordPress backups

Maximum compression (level 9)

create-tar-xz-max.sh
tar -cJvf /home/wpbackup/wp_max.tar.xz --xz -9 /var/www/html

  • Slow compression (CPU-intensive)
  • Best for cold storage or long-term archives

Verify compression ratio

After creating your archive, check compression ratio:

xz-list-archive-compression-stats.sh
xz -l /home/wpbackup/wp_max.tar.xz

Expected Output Example:

example-xz-l-output.txt
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 512.1 MiB 2.4 GiB 0.21 CRC64 wp_max.tar.xz

In this example, compression ratio = 0.21, meaning ~79% reduction.


Multi-threaded compression (optional)

By default, xz uses one CPU core.

For faster compression on multi-core VPS:

tar-to-xz-multithreaded.sh
tar -cf - /var/www/html | xz -9 -T0 -c > /home/wpbackup/wp_multi.tar.xz

FlagDescription
-T0Use all available CPU cores
-9Max compression
-cWrite to stdout

Quick reference

PurposeCommandNotes
Fastesttar -cJvf backup.tar.xz --xz -1 folder~2× faster, larger size
Balancedtar -cJvf backup.tar.xz folderDefault level 6
Maximumtar -cJvf backup.tar.xz --xz -9 folderSlow but smallest
Multi-core max`tar -cf - folderxz -9 -T0 -c > backup.tar.xz`

Verification commands

Run these right after creating an archive, before you upload it offsite.

verify-tar-xz-backup.sh
xz -t /home/wpbackup/sitefiles.tar.xz
tar -tJf /home/wpbackup/sitefiles.tar.xz | sed -n '1,25p'

If both commands succeed and the listing looks like the paths you expect, the archive is usually safe to store.