summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/btrfs-dump-tree/ldd.txt198
-rw-r--r--cmd/btrfs-dump-tree/main.go72
2 files changed, 253 insertions, 17 deletions
diff --git a/cmd/btrfs-dump-tree/ldd.txt b/cmd/btrfs-dump-tree/ldd.txt
new file mode 100644
index 0000000..2560bd9
--- /dev/null
+++ b/cmd/btrfs-dump-tree/ldd.txt
@@ -0,0 +1,198 @@
+/usr/bin/avahi-discover-standalone:
+ libgtk-3.so.0 => not found
+--
+/usr/lib/libavahi-libevent.so:
+ libevent-2.1.so.7 => not found
+/usr/lib/libavahi-libevent.so.1:
+ libevent-2.1.so.7 => not found
+/usr/lib/libavahi-libevent.so.1.0.0:
+ libevent-2.1.so.7 => not found
+/usr/lib/libavahi-qt5.so:
+ libQt5Core.so.5 => not found
+/usr/lib/libavahi-qt5.so.1:
+ libQt5Core.so.5 => not found
+/usr/lib/libavahi-qt5.so.1.0.2:
+ libQt5Core.so.5 => not found
+/usr/lib/libavahi-ui-gtk3.so:
+ libgtk-3.so.0 => not found
+ libgdk-3.so.0 => not found
+/usr/lib/libavahi-ui-gtk3.so.0:
+ libgtk-3.so.0 => not found
+ libgdk-3.so.0 => not found
+/usr/lib/libavahi-ui-gtk3.so.0.1.4:
+ libgtk-3.so.0 => not found
+ libgdk-3.so.0 => not found
+--
+/usr/bin/btrfs-convert:
+ libreiserfscore.so.0 => not found
+--
+/usr/lib/collectd/amqp.so:
+ librabbitmq.so.4 => not found
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/ceph.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/connectivity.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/curl_json.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/dbi.so:
+ libdbi.so.1 => not found
+--
+/usr/lib/collectd/ipmi.so:
+ libOpenIPMIpthread.so.0 => not found
+ libOpenIPMIutils.so.0 => not found
+ libOpenIPMI.so.0 => not found
+--
+/usr/lib/collectd/log_logstash.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/memcachec.so:
+ libmemcached.so.11 => not found
+--
+/usr/lib/collectd/mqtt.so:
+ libmosquitto.so.1 => not found
+--
+/usr/lib/collectd/mysql.so:
+ libmariadb.so.3 => not found
+--
+/usr/lib/collectd/notify_desktop.so:
+ libnotify.so.4 => not found
+ libgdk_pixbuf-2.0.so.0 => not found
+/usr/lib/collectd/notify_email.so:
+ libesmtp.so.6 => not found
+--
+/usr/lib/collectd/nut.so:
+ libupsclient.so.4 => not found
+--
+/usr/lib/collectd/ovs_events.so:
+ libyajl.so.2 => not found
+/usr/lib/collectd/ovs_stats.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/pinba.so:
+ libprotobuf-c.so.1 => not found
+/usr/lib/collectd/ping.so:
+ liboping.so.0 => not found
+/usr/lib/collectd/postgresql.so:
+ libpq.so.5 => not found
+--
+/usr/lib/collectd/procevent.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/snmp.so:
+ libnetsnmp.so.40 => not found
+/usr/lib/collectd/snmp_agent.so:
+ libnetsnmpagent.so.40 => not found
+--
+/usr/lib/collectd/sysevent.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/virt.so:
+ libvirt.so.0 => not found
+--
+/usr/lib/collectd/write_http.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/collectd/write_log.so:
+ libyajl.so.2 => not found
+/usr/lib/collectd/write_prometheus.so:
+ libprotobuf-c.so.1 => not found
+--
+/usr/lib/collectd/write_stackdriver.so:
+ libyajl.so.2 => not found
+--
+/usr/lib/git-core/git-credential-gnome-keyring:
+ libgnome-keyring.so.0 => not found
+--
+/usr/bin/memusagestat:
+ libgd.so.3 => not found
+--
+/usr/lib/guile/2.2/extensions/guile-gnutls-v-2.so:
+ libcrypt.so.1 => not found
+/usr/lib/guile/2.2/extensions/guile-gnutls-v-2.so.0:
+ libcrypt.so.1 => not found
+/usr/lib/guile/2.2/extensions/guile-gnutls-v-2.so.0.0.0:
+ libcrypt.so.1 => not found
+--
+/usr/bin/gxditview:
+ libXaw.so.7 => not found
+ libXmu.so.6 => not found
+ libXt.so.6 => not found
+--
+/usr/bin/xtotroff:
+ libXt.so.6 => not found
+--
+/usr/bin/grub-mount:
+ libfuse.so.2 => not found
+--
+/usr/bin/guile:
+ libcrypt.so.1 => not found
+--
+/usr/lib/guile/2.2/extensions/guile-readline.so:
+ libcrypt.so.1 => not found
+/usr/lib/guile/2.2/extensions/guile-readline.so.0:
+ libcrypt.so.1 => not found
+/usr/lib/guile/2.2/extensions/guile-readline.so.0.0.0:
+ libcrypt.so.1 => not found
+/usr/lib/libguile-2.2.so:
+ libcrypt.so.1 => not found
+/usr/lib/libguile-2.2.so.1:
+ libcrypt.so.1 => not found
+/usr/lib/libguile-2.2.so.1.4.1:
+ libcrypt.so.1 => not found
+--
+/usr/bin/ftpd:
+ libcrypt.so.1 => not found
+--
+/usr/lib/tc/q_atm.so:
+ libatm.so.1 => not found
+--
+/usr/bin/make:
+ libcrypt.so.1 => not found
+--
+/usr/lib/ssh/ssh-sk-helper:
+ libfido2.so.1 => not found
+--
+/usr/bin/pinentry-gnome3:
+ libgcr-base-3.so.1 => not found
+/usr/bin/pinentry-gtk-2:
+ libgtk-x11-2.0.so.0 => not found
+ libgdk-x11-2.0.so.0 => not found
+/usr/bin/pinentry-qt:
+ libQt5Widgets.so.5 => not found
+ libQt5Gui.so.5 => not found
+ libQt5Core.so.5 => not found
+--
+/usr/lib/python3.9/lib-dynload/_decimal.cpython-39-x86_64-linux-gnu.so:
+ libmpdec.so.2 => not found
+--
+/usr/lib/python3.9/lib-dynload/_tkinter.cpython-39-x86_64-linux-gnu.so:
+ libtk8.6.so => not found
+ libtcl8.6.so => not found
+--
+/usr/lib/python2.7/lib-dynload/_ctypes.so:
+ libffi.so.8 => not found
+--
+/usr/lib/python2.7/lib-dynload/_tkinter.so:
+ libtk8.6.so => not found
+ libtcl8.6.so => not found
+--
+/usr/lib/python2.7/lib-dynload/nis.so:
+ libnsl.so.3 => not found
+--
+/usr/bin/qemu-keymap:
+ libxkbcommon.so.0 => not found
+--
+/usr/lib/lua/5.1/rrd.so:
+ liblua5.1.so.5.1 => not found
+/usr/lib/lua/5.1/rrd.so.0:
+ liblua5.1.so.5.1 => not found
+/usr/lib/lua/5.1/rrd.so.0.0.0:
+ liblua5.1.so.5.1 => not found
+--
+/usr/lib/ruby/vendor_ruby/2.7.0/x86_64-linux/RRD.so:
+ libruby.so.2.7 => not found
diff --git a/cmd/btrfs-dump-tree/main.go b/cmd/btrfs-dump-tree/main.go
index 1b3b993..bdfd339 100644
--- a/cmd/btrfs-dump-tree/main.go
+++ b/cmd/btrfs-dump-tree/main.go
@@ -4,8 +4,6 @@ import (
"fmt"
"os"
- "github.com/davecgh/go-spew/spew"
-
"lukeshu.com/btrfs-tools/pkg/btrfs"
)
@@ -16,6 +14,8 @@ func main() {
}
}
+const version = "5.17"
+
func Main(imgfilename string) (err error) {
maybeSetErr := func(_err error) {
if _err != nil && err == nil {
@@ -38,30 +38,68 @@ func Main(imgfilename string) (err error) {
},
}
- superblocks, err := fs.Devices[0].Superblocks()
+ superblock, err := fs.Superblock()
if err != nil {
return err
}
- spew := spew.NewDefaultConfig()
- spew.DisablePointerAddresses = true
-
- sum, err := superblocks[0].Data.CalculateChecksum()
- if err != nil {
- return err
+ fmt.Printf("btrfs-progs v%s \n", version)
+ if superblock.Data.RootTree != 0 && false { // XXX
+ fmt.Printf("root tree\n")
+ printTree(fs, superblock.Data.RootTree)
+ }
+ if superblock.Data.ChunkTree != 0 {
+ fmt.Printf("chunk tree\n")
+ printTree(fs, superblock.Data.ChunkTree)
+ }
+ if superblock.Data.LogTree != 0 {
+ fmt.Printf("log root tree\n")
+ printTree(fs, superblock.Data.LogTree)
+ }
+ if superblock.Data.BlockGroupRoot != 0 {
+ fmt.Printf("block group tree\n")
+ printTree(fs, superblock.Data.BlockGroupRoot)
}
- fmt.Printf("superblock checksum: %x\n", sum)
- spew.Dump(superblocks[0].Data)
- syschunks, err := superblocks[0].Data.ParseSysChunkArray()
+ return nil
+}
+
+// printTree mimics btrfs-progs kernel-shared/print-tree.c:btrfs_print_tree()
+func printTree(fs *btrfs.FS, root btrfs.LogicalAddr) {
+ node, err := fs.ReadNode(root)
if err != nil {
- return err
+ fmt.Printf("error: %v\n", err)
+ return
}
- spew.Dump(syschunks)
+ printHeaderInfo(node)
+ // TODO
+}
- if err := btrfs.ScanForNodes(fs.Devices[0], superblocks[0].Data); err != nil {
- return err
+// printHeaderInfo mimics btrfs-progs kernel-shared/print-tree.c:print_header_info()
+func printHeaderInfo(node btrfs.Node) {
+ var typename string
+ switch node := node.(type) {
+ case *btrfs.InternalNode:
+ typename = "node"
+ fmt.Printf("node %d level %d items %d free space %d",
+ node.Header.Addr,
+ node.Header.Data.Level,
+ node.Header.Data.NumItems,
+ node.Header.Data.MaxItems-node.Header.Data.NumItems)
+ case *btrfs.LeafNode:
+ typename = "leaf"
+ fmt.Printf("leaf %d items %d free space %d",
+ node.Header.Addr,
+ node.Header.Data.NumItems,
+ node.FreeSpace())
}
+ fmt.Printf(" generation %d owner %v\n",
+ node.GetNodeHeader().Data.Generation,
+ node.GetNodeHeader().Data.Owner)
- return nil
+ fmt.Printf("%s %d flags %s backref revision %d\n",
+ typename,
+ node.GetNodeHeader().Addr,
+ node.GetNodeHeader().Data.Flags,
+ node.GetNodeHeader().Data.BackrefRev)
}