diff --git a/include/dwarfs/filesystem_v2.h b/include/dwarfs/filesystem_v2.h index c474ae2a..4d01f712 100644 --- a/include/dwarfs/filesystem_v2.h +++ b/include/dwarfs/filesystem_v2.h @@ -64,7 +64,8 @@ class filesystem_v2 { filesystem_writer& writer, rewrite_options const& opts); static int identify(logger& lgr, std::shared_ptr mm, std::ostream& os, - int detail_level = 0, size_t num_readers = 1); + int detail_level = 0, size_t num_readers = 1, + bool check_integrity = false); void dump(std::ostream& os, int detail_level) const { impl_->dump(os, detail_level); diff --git a/src/dwarfs/filesystem_v2.cpp b/src/dwarfs/filesystem_v2.cpp index 88595f6a..0d388be4 100644 --- a/src/dwarfs/filesystem_v2.cpp +++ b/src/dwarfs/filesystem_v2.cpp @@ -475,7 +475,7 @@ void filesystem_v2::rewrite(logger& lgr, progress& prog, int filesystem_v2::identify(logger& lgr, std::shared_ptr mm, std::ostream& os, int detail_level, - size_t num_readers) { + size_t num_readers, bool check_integrity) { // TODO: LOG_PROXY(debug_logger_policy, lgr); filesystem_parser parser(mm); @@ -493,7 +493,7 @@ int filesystem_v2::identify(logger& lgr, std::shared_ptr mm, DWARFS_THROW(runtime_error, "checksum error in section: " + s.name()); } - if (!s.verify(*mm)) { + if (check_integrity and !s.verify(*mm)) { DWARFS_THROW(runtime_error, "integrity check error in section: " + s.name()); } diff --git a/src/dwarfsck.cpp b/src/dwarfsck.cpp index b1542f4f..ac64b444 100644 --- a/src/dwarfsck.cpp +++ b/src/dwarfsck.cpp @@ -47,6 +47,7 @@ int dwarfsck(int argc, char** argv) { size_t num_workers; int detail; bool json = false; + bool check_integrity = false; // clang-format off po::options_description opts("Command line options"); @@ -60,6 +61,9 @@ int dwarfsck(int argc, char** argv) { ("num-workers,n", po::value(&num_workers)->default_value(num_cpu), "number of reader worker threads") + ("check-integrity", + po::value(&check_integrity)->zero_tokens(), + "check integrity of each block") ("json", po::value(&json)->zero_tokens(), "print metadata in JSON format") @@ -111,7 +115,8 @@ int dwarfsck(int argc, char** argv) { filesystem_v2 fs(lgr, mm); std::cout << folly::toPrettyJson(fs.metadata_as_dynamic()) << std::endl; } else { - filesystem_v2::identify(lgr, mm, std::cout, detail, num_workers); + filesystem_v2::identify(lgr, mm, std::cout, detail, num_workers, + check_integrity); } } catch (system_error const& e) { LOG_ERROR << folly::exceptionStr(e);