DragonFly BSD
DragonFly users List (threaded) for 2010-08
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

New catastrophic HAMMER filesystem recovery tool in HEAD

From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 17 Aug 2010 10:13:55 -0700 (PDT)

    I've made a good first attempt at writing a HAMMER filesystem
    recovery directive to the hammer utility.  It is now in HEAD.
    It works on the filesystem image (similar to the 'show' directive):

	hammer -f <device> recover <empty_target_dir>

    This is not a fsck.  The filesystem image is only scanned, not modified.
    The reconstructed filesystem is stored in the target directory.

    Currently the directive has some limitations.  It does require the
    volume header to be intact, it doesn't deal with hardlinks (only
    one namespace will be restored), and it does not try to recover
    the uid, gid, modes, or times.  Only files and directories are
    recovered.  Softlinks are ignored at the moment.  Data CRCs are not
    validated at the moment.  Most of these limitations can be overcome
    with more work.


    The actual operation of the recover directive is very cool.  Apart
    from the needing the volume header it just scans the image straight
    out looking for blocks that contain B-Tree nodes.  It then scans
    those nodes looking for inode, directory-entry, and file-data
    records and creates them on the fly (piecemeal) in the <target_dir>.

    Files and directories are initially named after their object id
    but as the operation continues and more fragmentory information
    is recovered the program can reconstruct the actual file and
    directory names and the actual directory hierarchy, which it
    does by renaming the temporarily named and placed files and
    directories as appropriate, on the fly.

    HAMMER might never have an fsck command but we do now have a 'recover'
    feature and I expect it will get better and better as time passes.

					Matthew Dillon 

[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]