From ee6b9ee1f97eb92b37bdc9328c84f1854d15662c Mon Sep 17 00:00:00 2001 From: Michael Marineau Date: Fri, 16 May 2014 18:49:45 -0700 Subject: [PATCH] fix(disk_util): Set btrfs default subvolume This avoids needing to always pass the subvol=root mount option. --- build_library/disk_util | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/build_library/disk_util b/build_library/disk_util index 418c5e2857..3c6001984c 100755 --- a/build_library/disk_util +++ b/build_library/disk_util @@ -7,6 +7,7 @@ import argparse import contextlib import json import os +import re import subprocess import sys import tempfile @@ -320,6 +321,18 @@ def Sudo(cmd, stdout_null=False): null.close() +def BtrfsSubvolId(path): + """Get the subvolume id from a given path.""" + + out = subprocess.check_output( + ['sudo', 'btrfs', 'subvolume', 'show', path]) + m = re.search(r'^\s*Object ID:\s*(\d+)$', out, re.MULTILINE) + if not m: + raise Exception('Failed to parse btrfs output: %r', out) + + return int(m.group(1)) + + def FormatBtrfs(part, device): """Format an ext2 or ext4 filesystem. @@ -342,6 +355,8 @@ def FormatBtrfs(part, device): Sudo(['mount', '-t', 'btrfs', device, btrfs_mount]) try: Sudo(['btrfs', 'subvolume', 'create', subvol_path]) + subvol_id = BtrfsSubvolId(subvol_path) + Sudo(['btrfs', 'subvolume', 'set-default', subvol_id, btrfs_mount]) finally: Sudo(['umount', btrfs_mount]) os.rmdir(btrfs_mount)