Source code for crash.commands.mount
# -*- coding: utf-8 -*-
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
"""
SUMMARY
-------
Display mounted file systems
-f display common mount flags
-v display superblock and vfsmount addresses
-d display device obtained from super_block
"""
import argparse
from crash.commands import Command, ArgumentParser
from crash.subsystem.filesystem.mount import d_path, for_each_mount
from crash.subsystem.filesystem.mount import mount_device, mount_fstype
from crash.subsystem.filesystem.mount import mount_super, mount_flags
from crash.subsystem.filesystem.mount import mount_root
import gdb
[docs]class MountCommand(Command):
"""display mounted file systems"""
def __init__(self, name: str) -> None:
parser = ArgumentParser(prog=name)
parser.add_argument('-v', action='store_true', default=False)
parser.add_argument('-f', action='store_true', default=False)
parser.add_argument('-d', action='store_true', default=False)
super().__init__(name, parser)
[docs] def execute(self, args: argparse.Namespace) -> None:
if args.v:
print("{:^16} {:^16} {:^10} {:^16} {}"
.format("MOUNT", "SUPERBLK", "TYPE", "DEVNAME", "PATH"))
for mnt in for_each_mount():
self.show_one_mount(mnt, args)
[docs] def show_one_mount(self, mnt: gdb.Value, args: argparse.Namespace) -> None:
if mnt.type.code == gdb.TYPE_CODE_PTR:
mnt = mnt.dereference()
flags = ""
if args.f:
flags = " ({})".format(mount_flags(mnt))
path = d_path(mnt, mount_root(mnt))
if args.v:
print("{:016x} {:016x} {:<10} {:<16} {}"
.format(int(mnt.address), int(mount_super(mnt)),
mount_fstype(mnt), mount_device(mnt), path))
else:
print("{} on {} type {}{}"
.format(mount_device(mnt), path, mount_fstype(mnt), flags))
MountCommand("mount")