我有一个用 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
最简单的检查方法是调用mount
viasubprocess
并查看它是否出现在那里。为了获得额外的积分,请使用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
欢迎改进!