git: sbin/hammer: Add quick mode for hammer recover

Tomohiro Kusumi tkusumi at crater.dragonflybsd.org
Thu Dec 8 10:24:10 PST 2016


commit e819b271a95d8f4c7c8d587e56992c11a745946d
Author: Tomohiro Kusumi <kusumi.tomohiro at gmail.com>
Date:   Thu Dec 8 19:05:42 2016 +0900

    sbin/hammer: Add quick mode for hammer recover
    
    Since hammer recover command tries to recover filesystem data
    based on assumption on ondisk data bytes that look like B-Tree
    nodes/elms, the command can tell the recovery process is done
    once scanning offset gets to the point where there is no more
    big-blocks for B-Tree zone, without scanning through the whole
    address space of all volumes (provided B-Tree zone is alive).
    
    By specifying quick option after the target directory option,
    this command makes use of B-Tree big-block info prefetched before
    recovery process, and stops recovery once all B-Tree big-blocks
    are scanned. As shown in below example, this makes recovery
    much faster by cutting unnecessary I/Os.
    
    The drawback is that quick mode is based on assumption that
    B-Tree zone isn't corrupted. If B-Tree zone is somehow corrupted,
    prefetched info is incomplete or totally wrong, so one needs
    to linearly scan the whole address space of all volumes to
    check every possible B-Tree nodes/elms without using quick mode
    which is what's been done by default.
    
    -- example of default and quick mode
     # newfs_hammer -L TEST /dev/da1 > /dev/null
     # mount_hammer /dev/da1 /HAMMER
     # cd /HAMMER
     # git clone /usr/local/src/dragonfly > /dev/null 2>&1
     # cd
     # umount /HAMMER
    
     # time hammer -f /dev/da1 recover /tmp/a > /dev/null
     hammer -f /dev/da1 recover /tmp/a > /dev/null  309.51s user 122.96s system 21% cpu 33:50.17 total
     # cd /tmp/a/PFS00000/dragonfly/sys/vfs/hammer
     # make > /dev/null 2>&1; echo $?
     0
     # file hammer.ko
     hammer.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
    
     # time hammer -f /dev/da1 recover /tmp/b quick > /dev/null
     hammer -f /dev/da1 recover /tmp/b quick > /dev/null  0.41s user 3.41s system 14% cpu 26.652 total
     # cd /tmp/b/PFS00000/dragonfly/sys/vfs/hammer
     # make > /dev/null 2>&1; echo $?
     0
     # file hammer.ko
     hammer.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

Summary of changes:
 sbin/hammer/cmd_recover.c | 179 +++++++++++++++++++++++++++++++++++++++++++---
 sbin/hammer/hammer.8      |  11 ++-
 sbin/hammer/hammer.c      |   6 +-
 sbin/hammer/hammer.h      |   2 +-
 4 files changed, 180 insertions(+), 18 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/e819b271a95d8f4c7c8d587e56992c11a745946d


-- 
DragonFly BSD source repository



More information about the Commits mailing list