[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] qcow2 corruption analysis tool
From: |
John Snow |
Subject: |
[Qemu-block] qcow2 corruption analysis tool |
Date: |
Mon, 18 Apr 2016 19:47:56 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 |
This may not be particularly exciting, but I recently had occasion to
learn some of the specifics of the qcow2 file format. Instead of
augmenting the existing qemu-img check tool, I took the chance to write
a little standalone tool as a learning exercise.
I have polished up the fruits of my labor and uploaded it to github:
https://github.com/jnsnow/qcheck
Please feel free to comment or critique as you see fit. If you see
things of-use that should be backported in qemu, report that here
on-list. If you have suggestions, comments etc to improve the standalone
tool, you can comment on the github issue tracker (or send me a mail to
my personal address, if you happen to know it.)
This is my 'initial commit' and still has a lot of stray threads of
various past incarnations, so there's a lot of cleanup that could be done.
I have released it as GPLv2, because I yanked the RBTree data structure
out of the Linux kernel. There is always the understanding that if the
non-kernel bits of source are interesting to you that you may ask me to
re-license those files.
I took no particular care to be compatible on Windows, OSX or BSD, so
odds are good that it isn't...
==
qcheck as a utility takes a qcow2 file as input and attempts to validate
the header, metadata, and all data pointers for simple errors and
problems like alignment, overlaps and collisions, and a few other simple
problems.
It is currently a read-only tool, it does not attempt to /repair/
problems, just report them in a verbose way to help identify the root
cause of failure in a corruption incident.
It does not use or attempt to invoke any qemu component, to hopefully be
slightly more tolerant of errant files.
It keeps a full map of the entire file with regards to what clusters are
metadata, guest data, vacant, leaked and so on. In the future I may
augment this with visualizations.
It does not currently support or attempt to validate snapshot tables or
VMState data. It probably has a lot of bugs regarding the handling and
analysis of V2/V3 qcow2 files.
==
Usage:
./qcheck [opts] <qcow2_file>
Additional logging presets and filters can be used:
Logging presets: these are all mutually exclusive, except for debug.
-s --silent: No output whatsoever.
-q --quiet: Fatal and nonfatal qcheck errors. (--log fw)
-b --basic: Basic analysis and summaries. This is the default.
(--log fwshiHLR)
-v --verbose: Detailed problem analysis. (--log fwshiHLRpc)
-x --deluge: Everything except debug output.
-d --debug: The same as `--log d`.
`--deluge --debug` or `-xd` enables all output.
-l [...] --log=[...]: detailed logging filters. Specify individual
output streams.
All filters are additive and will combine with presets.
-e [...] --exclude=[...]: exclude these filters.
Will subtract filters from presets.
'f': Fatal errors
'w': Nonfatal errors
's': Analysis summaries
'h': Section headers
'i': Info / misc.
'p': Detailed problems reports
'c': Successful test messages (Confirmation)
'd': Debugging messages
'H': qcow2 header information
'L': L1 table
'l': L2 tables
'R': Refcount Table
'2': Refcount Block entries (if 2+)
'1': Refcount Block entries (if 1)
'0': Refcount Block entries (if 0)
'M': Dump metadata rangeset
'D': Dump guest data rangeset
'V': Dump vacant rangeset
'F': Dump leaked ([F]orgotten) rangeset
'A': Dump allocated rangeset
'U': Dump unallocated rangeset
'E': Dump entire rangeset
Thanks,
--js
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-block] qcow2 corruption analysis tool,
John Snow <=