如何使用 Python 检查卷是否安装在应安装的位置?

如何使用 Python 检查卷是否安装在应安装的位置?

我有一个用 Python 编写的备份脚本,它会在将源目录复制到目标目录之前创建目标目录。我已将其配置/external-backup为目标目录,也就是我安装外部硬盘的位置。我只是在未打开(或安装)硬盘的情况下运行了该脚本,发现它工作正常,尽管在内部硬盘上进行了备份,但内部硬盘没有足够的空间进行备份。

我的问题是:在写入之前,如何检查卷是否安装在正确的位置?如果我能检测到未/external-backup安装,我就可以阻止写入。

附加问题是,为什么允许这样做,当操作系统知道该目录应该位于另一台设备上时,如果我稍后安装该设备(外部硬盘),数据(在内部硬盘上)会发生什么?显然,在同一路径的不同设备上不能有两个副本!

提前致谢!

答案1

我会看看os.path.ismount()

答案2

对于只有内核才知道的事情的明确答案,请询问内核:

cat /proc/mounts

可以使用任何你喜欢的工具来读取/解析该文件,就像它是普通文件一样。包括 Python。快速示例:

#!/usr/bin/python

d = {}

for l in file('/proc/mounts'):
    if l[0] == '/':
        l = l.split()
        d[l[0]] = l[1]

import pprint

pprint.pprint(d)

答案3

最简单的检查方法是调用mountviasubprocess并查看它是否出现在那里。为了获得额外的积分,请使用os.readlink()的内容来/dev/disk/by-*确定它是哪个设备。

答案4

老问题了,但我想我会贡献我的解决方案(基于丹尼斯·威廉姆森伊格纳西奥·巴斯克斯·艾布拉姆斯的答案)无论如何。由于我在非 Linux 环境中使用它来检查正在挂载的远程目录,/进程表格无法使用且未实施任何额外检查:

def is_mounted(special, directory):
    search_prefix = '{} on {}'.format(special, directory.rstrip('/'))

    if os.path.ismount(directory):
        mounts = subprocess.check_output(['mount']).split('\n')

        for line in mounts:
            if line[:len(search_prefix)] == search_prefix:
                return True;

    return False

欢迎改进!

相关内容