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

Ben*_*ers 12 linux python mount

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

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

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

提前致谢!

Den*_*son 25

我会看看os.path.ismount()

  • @McJeff:这是真的,它没有告诉 *which* 它告诉 *if*。如果那里没有设备,它将返回 false 并且对该路径的写入将写入 *parent* 文件系统中的底层目录。因此,如果它返回 false,则发出错误并且不要在那里写入。目录`/external-backup` 不在外部设备上,而是在父文件系统上。系统只知道 `mount` 告诉它什么,它不知道什么*应该*在那里。Unix 文件系统上的“挂载点”没有什么特别之处。它只是一个常规目录。 (3认同)

Ins*_*yte 6

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

cat /proc/mounts
Run Code Online (Sandbox Code Playgroud)

可以使用您喜欢的任何工具读取/解析该文件,就好像它是普通文件一样。包括Python。Quick-n-dirty 示例:

#!/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)
Run Code Online (Sandbox Code Playgroud)