How to archive merger for automation & sre
- Step 1Collect per-host bundles locally — Pull each host's diagnostic archive to your workstation (scp, artifact store, vendor portal). Name them by host — the stem is what the merger uses to disambiguate collisions, so
node-07-diag.zipyieldsnode-07/prefixes. - Step 2Open the Archive Merger — Go to the tool page. Merging is a multi-file operation, so it requires the Pro tier or higher. Everything runs in your browser — no upload, which matters for sensitive incident data.
- Step 3Drop all the bundles at once — Multi-select or drag every per-host archive onto the drop zone. The tool accepts a mix of
.zip,.tar.gz,.tgz,.7z,.rar,.bz2,.xzand.iso. You need at least two. - Step 4Let it read each format — fflate handles ZIP/TAR/GZ; the libarchive WASM bridge reads 7z/RAR/bz2/xz/ISO (first use downloads the module once). Inputs are processed in drop order, so the first bundle wins any shared root path.
- Step 5Read the Collisions chip — The result panel shows Input archives, total Entries, and Collisions — the count of duplicate paths that were renamed under a
<stem>/prefix. A high collision count is expected for fleet bundles with identical layouts. - Step 6Download and attach — Save
merged-N-archives.zipand attach it to the incident ticket or postmortem. If the vendor requires tar.gz, run it through the archive format converter afterward.
Fleet bundle formats the merger reads
Real per-host diagnostic outputs and how the merger handles them. Output is always a single ZIP.
| Typical source | Bundle format | Read engine | Merge note |
|---|---|---|---|
| Linux host diag scripts | .tar.gz / .tgz | fflate (gunzip) | Detected by gzip magic; a single-stream gzip yields one inner file — extract tar members first if you need them individually |
| Containers / sidecars | .zip | fflate (or zip.js if encrypted) | Standard ZIPs merge member-by-member |
| Plain log captures | .gz | fflate | Gunzips to one file named from the gzip header or filename |
| Vendor appliances | .7z, .rar | libarchive WASM | Read-only; first use loads the WASM module |
| Compressed core/log dumps | .bz2, .xz, .tar.bz2, .tar.xz | libarchive WASM | Read-only via libarchive |
| Disk / image captures | .iso | libarchive WASM | Read-only; entries are flattened into the merged ZIP |
Tier capacity for fleet merges
How many host bundles you can merge in one pass, plus size and entry ceilings. Free cannot merge (one file only).
| Tier | Bundles per merge | Max size / bundle | Max entries / bundle |
|---|---|---|---|
| Free | 1 (cannot merge) | 50 MB | 500 |
| Pro | 20 | 500 MB | 50,000 |
| Pro-media | 100 | 2 GB | 500,000 |
| Developer | unlimited | 2 GB | 500,000 |
Cookbook
Incident-shaped merges with the exact output paths, so you can predict how per-host collisions resolve before you attach the result.
Three host bundles, shared layout
Every node's diag has metrics.json and dmesg.log at the root. The first node keeps the bare path; later nodes get prefixed, so each host's data is distinguishable.
Inputs (drop order): node-01-diag.zip -> metrics.json, dmesg.log node-02-diag.zip -> metrics.json, dmesg.log node-03-diag.zip -> metrics.json, dmesg.log merged-3-archives.zip: metrics.json (node-01 — first writer) dmesg.log (node-01) node-02-diag/metrics.json node-02-diag/dmesg.log node-03-diag/metrics.json node-03-diag/dmesg.log Chips: Input archives: 3 | Entries: 6 | Collisions: 4
Mixed Linux + appliance dumps
Two Linux tarballs and a vendor 7z, merged for a single vendor ticket attachment.
Inputs: app-node.tar.gz (gunzips to one stream) db-node.tar.gz (gunzips to one stream) appliance.7z (read via libarchive WASM) merged-3-archives.zip: <contents of each, collisions renamed by stem> Chips show total Entries and any Collisions
Single bundle attached by mistake
Dropping only one host's archive does nothing useful — the merger needs at least two.
Input: node-01-diag.zip Error: Drop at least two archives to merge. Fix: add a second bundle (or merge a host bundle with an empty placeholder).
Encrypted appliance dump
A password-protected vendor ZIP cannot be merged directly because the merger forwards no password.
Input:
appliance-secure.zip (AES-encrypted entries)
node-01-diag.zip
Result: merge errors reading the encrypted archive.
Fix: extract the appliance dump first with its password,
then merge the extracted, re-zipped output.Convert merged ZIP for a vendor portal
Some vendor ticket systems require tar.gz. Chain the converter after the merge.
Step 1: merge node-*.zip -> merged-12-archives.zip Step 2: Archive Format Converter -> merged-12-archives.tar.gz See /archive-tools/archive-format-converter
Edge cases and what actually happens
Identical layout across many hosts
ExpectedA high Collisions count is normal for fleet bundles — every node has the same paths. The first node keeps them and the rest are filed under <bundle-stem>/, so no host's data is overwritten.
Bundle stems are not unique
CautionCollision prefixes use the filename stem (extension stripped). If two inputs share a stem (e.g. both named diag.zip from different folders), their renamed entries could land at the same prefixed path. Name bundles by host before merging.
Single bundle dropped
RejectedThe merger needs at least two inputs and throws Drop at least two archives to merge. immediately.
Encrypted appliance dump
Fails to readNo password is forwarded during merge, so password-protected entries can't be extracted and the merge errors. Decrypt and re-zip the bundle first.
Bundle over the tier cap
RejectedA bundle larger than the per-file limit (50 MB Free / 500 MB Pro / 2 GB Pro-media+Developer) or exceeding the per-archive entry cap is rejected. Split oversized dumps with the archive splitter first.
Too many bundles for the tier
RejectedPro allows 20 inputs, Pro-media 100, Developer unlimited. Merging more than the tier permits is blocked; merge in batches or upgrade.
tar.gz members not individually merged
By designA .tar.gz is gunzipped as a single stream (gzip magic), so it may contribute one inner file rather than expanded members. Extract the tarball first if you need per-file granularity in the merge.
Corrupt host dump
ErrorIf one bundle is truncated or unreadable, the entire merge fails — there is no partial result. Test the suspect bundle with the archive integrity tester and exclude it.
Empty diagnostic bundle
SupportedA host that produced an empty archive contributes nothing and does not error, but still counts toward the two-input minimum.
Sensitive data handling
PreservedAll processing is in-browser with no upload, so merging customer logs and internal telemetry doesn't create a server-side copy — a useful property for on-call data-handling rules.
Frequently asked questions
Can I merge one diagnostic bundle per host into a single attachment?
Yes — that is the core SRE use case. Drop every per-host archive (two or more) and you get one merged-N-archives.zip. Colliding paths from identically-laid-out bundles are renamed by bundle stem so each host's data survives.
Will node-02's dmesg.log overwrite node-01's?
No. The first bundle in drop order keeps the bare path; node-02's copy is filed at node-02-diag/dmesg.log. The Collisions chip counts every such rename.
Does it read vendor 7z and RAR dumps?
Yes, as inputs, via a libarchive WASM bridge. Output is ZIP only — convert afterward if the vendor needs tar.gz.
Is anything uploaded? We handle customer logs.
Nothing is uploaded. Archive tools have no server-side path; extraction and re-zipping happen in the browser, so sensitive incident data stays on the engineer's machine.
How many host bundles can I merge at once?
Pro allows 20 inputs, Pro-media 100, and Developer is unlimited. The Free tier permits only one file and therefore cannot merge.
What size and entry limits apply per bundle?
Per file: 50 MB (Free), 500 MB (Pro), 2 GB (Pro-media/Developer). Per archive: 500 / 50,000 / 500,000 entries. Split oversized dumps first.
Can I run this from a runbook or CI pipeline?
Not automatically — the merger is an interactive browser tool with no end-user API or headless mode. For unattended fleet merges, script tar/zip in your pipeline; use the merger for on-call, ad-hoc packaging.
Why did my encrypted bundle fail to merge?
The merger forwards no password, so password-protected entries can't be read. Extract the encrypted bundle with its password, re-zip it, then merge that output.
Can I keep each host in its own subfolder deliberately?
Use the batch extraction manager — it extracts each archive into its own subfolder, which gives a clean per-host layout. The merger only prefixes on collision.
What does a high Collisions count mean?
It means many inputs shared the same paths — completely normal for fleet bundles with identical diagnostic layouts. Every renamed entry is preserved; nothing was dropped.
Can I set compression to keep the attachment small?
There is no compression option — output is fflate level 6. To shrink the result further, re-run it through the smart archive compressor.
What if two bundles have the same filename?
Collision prefixes use the filename stem, so two inputs with the same name can produce overlapping prefixed paths. Rename bundles by host before merging to keep them distinct.
Privacy first
Every JAD Archive tool runs entirely in your browser using fflate, @zip.js/zip.js, and the libarchive WASM bridge. Your archives never leave your device — verified by zero outbound network requests during processing.