Measured on real images · Reproducible

How fast does OPBS read
your Macrium images?

Restoring a Macrium image is mostly one job: decompress every block and check it against the MD5 Macrium stored inside the image. We measured that exact path — every block, every hash — on real .mrimg and .mrimgx files. The script that produced these numbers is in the repo, so you can rerun it yourself.

The headline numbers

Median of 3 full read+verify passes. Single-threaded decompress + MD5, laptop CPU, no disks written.

152–210 MB/s — Reflect X .mrimgx (zstd)
167 MB/s — Reflect 7/8 .mrimg (QuickLZ), 859 MB NTFS
100% of blocks MD5-verified against Macrium's own digests
100 ms to parse a full 1.25 GB disk image (mrimg info)
What "read+verify" means here. The benchmark streams every block of the partition through the same MacriumPartitionReader a restore uses: each block is decompressed (zstd for .mrimgx, QuickLZ for .mrimg) and its MD5 is compared against the digest Macrium wrote into the image. A single decode error fails the read. This is the hard, CPU-bound part of a restore — writing the result to disk is bounded by your target drive on top of this.

Full results

Five real-world samples: three Reflect X images, one small Reflect 7/8 image, and a 1.25 GB Reflect 7/8 full-disk image of a real machine (931.5 GB GPT disk, NTFS partitions).

Image Format Compress File size Partition read Parse Read+verify
EA9A…D76F Reflect X .mrimgx zstd medium 17.8 MB 100 MB FAT32 3 ms 210 MB/s
8DB9…986A Reflect X .mrimgx zstd medium 17.8 MB 100 MB FAT32 5 ms 195 MB/s
0EDC…131 Reflect X .mrimgx zstd medium 17.8 MB 100 MB FAT32 16 ms 152 MB/s
6D88…845 Reflect 7/8 .mrimg QuickLZ high 1.17 GB 859 MB NTFS 42 ms 167 MB/s
14CC…036 Reflect 7/8 .mrimg QuickLZ high 5.6 MB 16 MB (small) 8 ms 62 MB/s *
* Small-sample noise. The 16 MB partition is dominated by fixed per-call overhead; its number understates steady-state throughput. The 859 MB NTFS partition is the meaningful .mrimg figure.
Machine. Intel Core i7-8665U @ 1.90 GHz (4 cores / 8 threads, laptop), 34 GB RAM, Windows 11, Node 24, OPBS 0.6.87 build. Decode is single-threaded in this path — faster CPUs scale linearly; the QuickLZ decoder is a clean-room TypeScript implementation, the zstd path uses the native codec.

Method & reproduction

No vendor claims, no cherry-picked workloads. Drop real Macrium images in the folder, run one script, read the JSON.

git clone https://github.com/bobeire/opbs && cd opbs
npm install && npm run build && npm run build:native
# copy your .mrimg / .mrimgx files into imagefilesamples/ (or the repo root)
node tools/benchmark-mrimg.js 3

The script prints one JSON line per run plus a median summary — the same format shown in the table above. benchmark-mrimg.js on GitHub ↗

What this means in practice

Honest scope. These numbers cover reading Macrium images. OPBS-native .opbs images use a different codec pipeline (multithreaded zstd) and aren't measured here. Restores to disk also write at your disk's speed on top of the read numbers.

Restore your Macrium images

Free · GPL-3.0 · Every block verified before it lands on disk