diff --git a/build_library/build_image_util.sh b/build_library/build_image_util.sh index 7712141c36a..5ba0127a233 100755 --- a/build_library/build_image_util.sh +++ b/build_library/build_image_util.sh @@ -806,6 +806,8 @@ EOF sudo fstrim "${root_fs_dir}/usr" || true fi + "${BUILD_LIBRARY_DIR}/disk_util" --disk_layout="${disk_layout}" btrfsresetallocation \ + "${root_fs_dir}/usr" # Make the filesystem un-mountable as read-write and setup verity. if [[ ${disable_read_write} -eq ${FLAGS_TRUE} ]]; then # Unmount /usr partition diff --git a/build_library/disk_util b/build_library/disk_util index f94317e3c1d..944d27eddba 100755 --- a/build_library/disk_util +++ b/build_library/disk_util @@ -768,6 +768,25 @@ def Tune(options): if not action_done: raise Exception("No options specified!") +def SudoOutputToConsole(cmd): + print(SudoOutput(cmd).decode()) + +def LogBtrfsUsage(mount_point, section=None): + print('Btrfs usage for mount point `%s` %s' % (mount_point, section)) + try: + SudoOutputToConsole(['btrfs', 'fi', 'usage', mount_point]) + except Exception as ex: + print('Btrfs usage could not be retrieved for mount point `%s` %s' % (mount_point, section)) + print(ex) + +def BtrfsResetAllocation(options): + + LogBtrfsUsage(options.disk_image, 'before disk resize') + try: + Sudo(['btrfs', 'fi', 'resize', '-500m', options.disk_image]) + except Exception as ex: + print(ex) + LogBtrfsUsage(options.disk_image, 'after disk resize') def Verity(options): """Hash verity protected filesystems. @@ -1119,6 +1138,10 @@ def main(argv): a = actions.add_parser('parseonly', help='validate config') a.set_defaults(func=DoParseOnly) + a = actions.add_parser('btrfsresetallocation', help='btrfs reset allocation') + a.add_argument('disk_image', help='path to disk image file') + a.set_defaults(func=BtrfsResetAllocation) + options = parser.parse_args(argv[1:]) options.func(options)