bdiff appears to be available on Linux (at least as part of the Heirloom Toolchest).
I would probably just use regular old diff with this switch however:
diff --speed-large-files bigfileA bigfileB
Why it doesn't work?
See comment by @EvanTeitelman,
--speed-large-files doesn't affect how files are loaded into memory.
Can be demonstrated/confirmed not to work using the following command:
fallocate -l 10G testa; fallocate -l 10G testb && \
diff --speed-large-files -a testa testb
Hard to confirm this but I found a tool called
bsdiff which derives from
bdiff. I've confirmed that this tool is in Ubuntu, simply
apt-get install bsdiff.
Why it might work?
Again thanks @EvanTeitelman in the comments, the
bsdiff above is a diff tool for binary files.
bsdiff is a binary diff tool and can deal with large files. It's unclear just how large. See the following links to a thread which discuss it's use.
I think you could also use rdiff to do this as well. Rdiff is able to deal with very large files.
Create a signature of one file:
rdiff signature A sigs.txt
Use generated signature file sigs.txt and the other big file B to create the delta:
rdiff delta sigs.txt B deltaAB.txt
Delta contains all the info you need to recreate file B when you have just A and the delta file deltaAB.txt.
To recreate B, run:
rdiff patch A deltaAB.txt B
Why it works?
I found this blog post titled: A Better diff Or What To Do When GNU diff Runs Out Of Memory ("diff: memory exhausted"), which reports that a rdiff of 4.5GB files only consumed ~66MB of RAM.
lfhex is an application for viewing and editing files in hex, octal, binary, or ascii text. The main strength of lfhex is it's ability to work with files much larger than system memory. It's a GUI tool however.