diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/btrfs-dump-tree/ldd.txt | 198 | ||||
-rw-r--r-- | cmd/btrfs-dump-tree/main.go | 72 |
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) } |