/usr/share/pyshared/landscape/lib/disk.py is in landscape-common 12.04.3-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | from __future__ import division
import os
import statvfs
def get_mount_info(mounts_file, statvfs_, filesystems_whitelist=None):
"""
This is a generator that yields information about mounted filesystems.
@param mounts_file: A file with information about mounted filesystems,
such as C{/proc/mounts}.
@param statvfs_: A function to get file status information.
@param filesystems_whitelist: Optionally, a list of which filesystems to
stat.
@return: A C{dict} with C{device}, C{mount-point}, C{filesystem},
C{total-space} and C{free-space} keys. If the filesystem information
is not available, C{None} is returned. Both C{total-space} and
C{free-space} are in megabytes.
"""
for line in open(mounts_file):
try:
device, mount_point, filesystem = line.split()[:3]
mount_point = mount_point.decode("string-escape")
except ValueError:
continue
if (filesystems_whitelist is not None and
filesystem not in filesystems_whitelist):
continue
megabytes = 1024 * 1024
try:
stats = statvfs_(mount_point)
except OSError:
continue
block_size = stats[statvfs.F_BSIZE]
total_space = (stats[statvfs.F_BLOCKS] * block_size) // megabytes
free_space = (stats[statvfs.F_BFREE] * block_size) // megabytes
yield {"device": device, "mount-point": mount_point,
"filesystem": filesystem, "total-space": total_space,
"free-space": free_space}
def get_filesystem_for_path(path, mounts_file, statvfs_,
filesystems_whitelist=None):
"""
Tries to determine to which of the mounted filesystem C{path} belongs to,
and then returns information about that filesystem or C{None} if it
couldn't be determined.
@param path: The path we want filesystem information about.
@param mounts_file: A file with information about mounted filesystems,
such as C{/proc/mounts}.
@param statvfs_: A function to get file status information.
@param filesystems_whitelist: Optionally, a list of which filesystems to
stat.
@return: A C{dict} with C{device}, C{mount-point}, C{filesystem},
C{total-space} and C{free-space} keys. If the filesystem information
is not available, C{None} is returned. Both C{total-space} and
C{free-space} are in megabytes.
"""
candidate = None
path = os.path.realpath(path)
path_segments = path.split("/")
for info in get_mount_info(mounts_file, statvfs_, filesystems_whitelist):
mount_segments = info["mount-point"].split("/")
if path.startswith(info["mount-point"]):
if ((not candidate)
or path_segments[:len(mount_segments)] == mount_segments):
candidate = info
return candidate
|