def blkid(devs=None, cache=True): """ get data about block devices from blkid and convert to dict """ if devs is None: devs = [] # 14.04 blkid reads undocumented /dev/.blkid.tab # man pages mention /run/blkid.tab and /etc/blkid.tab if not cache: cfiles = ("/run/blkid/blkid.tab", "/dev/.blkid.tab", "/etc/blkid.tab") for cachefile in cfiles: if os.path.exists(cachefile): os.unlink(cachefile) cmd = ['blkid', '-o', 'full'] cmd.extend(devs) # blkid output is <device_path>: KEY=VALUE # where KEY is TYPE, UUID, PARTUUID, LABEL out, err = util.subp(cmd, capture=True) data = {} for line in out.splitlines(): curdev, curdata = line.split(":", 1) data[curdev] = dict( tok.split('=', 1) for tok in util.shlex_split(curdata)) return data
def _lsblock_pairs_to_dict(lines): """ parse lsblock output and convert to dict """ ret = {} for line in lines.splitlines(): toks = util.shlex_split(line) cur = {} for tok in toks: k, v = tok.split("=", 1) cur[k] = v # use KNAME, as NAME may include spaces and other info, # for example, lvm decices may show 'dm0 lvm1' cur['device_path'] = get_dev_name_entry(cur['KNAME'])[1] ret[cur['KNAME']] = cur return ret