summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-04-01 21:10:35 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2023-04-04 14:08:38 -0600
commit6b8c24fb78f0face6532c1170ff0dca46dd56223 (patch)
tree50a2991d9632f3f0886ded434684d4a5480dbd87
parentc1578391cc2089cd224fd8325c333038e0ba7b7b (diff)
cmd/btrfs-rec: Have RebuiltForrest be opt-in on the CLI
-rw-r--r--cmd/btrfs-rec/main.go11
-rwxr-xr-xscripts/main.sh1
-rwxr-xr-xscripts/mount.sh1
3 files changed, 12 insertions, 1 deletions
diff --git a/cmd/btrfs-rec/main.go b/cmd/btrfs-rec/main.go
index e6305da..49a9649 100644
--- a/cmd/btrfs-rec/main.go
+++ b/cmd/btrfs-rec/main.go
@@ -48,7 +48,9 @@ var (
var globalFlags struct {
logLevel textui.LogLevelFlag
pvs []string
+
mappings string
+ rebuild bool
stopProfiling profile.StopFunc
@@ -94,6 +96,9 @@ func main() {
"load chunk/dev-extent/blockgroup data from external JSON file `mappings.json`")
noError(argparser.MarkPersistentFlagFilename("mappings"))
+ argparser.PersistentFlags().BoolVar(&globalFlags.rebuild, "rebuild", false,
+ "attempt to rebuild broken btrees when reading")
+
globalFlags.stopProfiling = profile.AddProfileFlags(argparser.PersistentFlags(), "profile.")
globalFlags.openFlag = os.O_RDONLY
@@ -180,6 +185,10 @@ func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*co
func runWithReadableFS(runE func(btrfs.ReadableFS, *cobra.Command, []string) error) func(*cobra.Command, []string) error {
return runWithRawFS(func(fs *btrfs.FS, cmd *cobra.Command, args []string) error {
- return runE(btrfsutil.NewOldRebuiltForrest(fs), cmd, args)
+ var rfs btrfs.ReadableFS = fs
+ if globalFlags.rebuild {
+ rfs = btrfsutil.NewOldRebuiltForrest(fs)
+ }
+ return runE(rfs, cmd, args)
})
}
diff --git a/scripts/main.sh b/scripts/main.sh
index dddb9bb..1e143eb 100755
--- a/scripts/main.sh
+++ b/scripts/main.sh
@@ -68,6 +68,7 @@ run-btrfs-rec $gendir/3.trees.json \
run-btrfs-rec $gendir/4.ls-files.txt \
--mappings=$gendir/2.mappings.json \
+ --rebuild \
inspect ls-files
run-btrfs-rec $gendir/4.ls-trees.txt \
--mappings=$gendir/2.mappings.json \
diff --git a/scripts/mount.sh b/scripts/mount.sh
index bf84163..4894e94 100755
--- a/scripts/mount.sh
+++ b/scripts/mount.sh
@@ -15,6 +15,7 @@ mkdir -p "$mountpoint"
sudo ./bin/btrfs-rec \
--pv="$image"
--mappings="$gendir/2.mappings.json" \
+ --rebuild \
inspect mount \
--skip-filesums \
"$mountpoint"