确定OSX中实际安装的卷和远程文件系统

托马斯·坦佩尔曼

我需要收集本地文件系统可以访问的所有已安装“挂载点”的列表。

这包括:

  • 下的任何通常安装的体积/Volumes
  • 当前在下安装的任何NFS卷/net
  • 使用“ mount”命令安装或以某种方式自动安装的任何本地或远程文件系统。

但是我需要避免访问任何可以自动挂载但当前未挂载的文件系统。即,我不想引起任何自动分配。

我当前的方法如下:

  1. FSGetVolumeInfo()循环调用以收集所有已知的卷。这将使我在/Volumes以及下的所有本地驱动器以及/net, /home在之下的NFS挂载/net
  2. 调用FSGetVolumeParms()以获取每个卷的“设备ID”(原来是网络卷的安装路径)。
  3. 如果ID是POSIX路径(即,它以“ /”开头),则readdir()在其路径的父目录中使用,以检查父目录是否实际上包含安装点项(例如,如果ID为/net/MyNetShare,那么我为readdir /net)。如果它不可用,我认为这是一个尚未挂载的卷的自动挂载点,因此将其从我的挂载卷列表中排除。
  4. 最后,如果该卷看上去已挂载,则检查它是否包含任何项目。如果可以,我将其添加到列表中。

必须执行步骤3才能查看路径是否已实际安装。如果我改为lstat()在完整路径上调用,它将尝试自动挂载文件系统,这是我需要避免的。

现在,尽管以上大多数情况下都有效,但仍然存在一些问题:

  • BSD和Carbon API的调用混合在一起,加上特殊的大小写“ device ID”值,这是很不干净的。
  • FSGetVolumeInfo()调用为我提供了诸如“ / net”和“ / home”之类的挂载点,尽管这些挂载点似乎不是实际的挂载点-挂接点宁愿出现这些内部例如,如果将NFS共享安装在“ / net / MyNFSVolume”上,则将同时收集“ / net”点和“ / net / MyNFSVolume”,但是“ / net”点不是实际卷。
  • 最糟糕的是,有时上述过程仍然会导致主动尝试与离线服务器联系,从而导致超时。

因此,谁能向我展示找到所有实际安装的卷的更好方法?

托马斯·坦佩尔曼

通过使用BSD级别功能getattrlist(),请求ATTR_DIR_MOUNTSTATUS属性,就可以测试该DIR_MNTSTATUS_TRIGGER标志。

似乎仅在当前无法安装自动安装的共享点时才设置此标志。该标志的状态似乎与automountd管理重新安装此类挂载点守护程序所维护的挂载状态直接相关:只要automountd报告由于服务器未响应而导致挂载点不可用,则“触发” ”标志已设置。

但是请注意,一旦无法访问网络共享,就不会立即设置此状态。考虑这种情况:

文件/etc/auto_master的末尾添加了以下行:

/-                      auto_mymounts

该文件/etc/auto_mymounts具有以下内容:

/mymounts/MYSERVER1      -nfs,soft,bg,intr,net    myserver1:/

这意味着将在处有一个自动挂载目录/mymounts/MYSERVER1,可访问myserver1导出的NFS共享的根目录。

假设服务器最初是可访问的。然后,我们可以浏览目录/ mymounts / MYSERVER1,然后DIR_MNTSTATUS_TRIGGER将清除标志。

接下来,让我们通过简单地终止网络连接(例如拔下以太网电缆以关闭Wi-Fi)使服务器变得不可访问。此时,当再次尝试访问/ mymounts / MYSERVER1时,我们将获得延迟和超时,甚至可能获得看似有效的结果,例如尽管服务器不可用,但目录列表仍为空。DIR_MNTSTATUS_TRIGGER标志将在此时保持清除状态。

现在,使计算机进入睡眠状态,然后再次将其唤醒。此时,automountd尝试再次重新连接所有自动安装的卷。它将注意到服务器处于脱机状态,并将挂载点置于“触发”状态。现在,DIR_MNTSTATUS_TRIGGER将根据需要设置标志。

因此,尽管此触发标志并不是判断远程服务器何时无法访问的理想指示器,但足以判断服务器何时长时间脱机,这通常是在不同网络之间移动客户端计算机时发生的,例如在工作和家庭之间,计算机处于睡眠状态,因此automountd守护程序可以检测NFS服务器的可达性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分层文件系统和卷挂载

来自分类Dev

始终安装“远程磁盘”卷(但仅在Finder中)

来自分类Dev

Linux操作系统中/ etc / shadow和卷影缓存文件的用途是什么?

来自分类Dev

在Linux中的C / C ++中,如何确定已安装或已卸载分区的文件系统类型

来自分类Dev

在Linux中的C / C ++中,如何确定已安装或已卸载分区的文件系统类型

来自分类Dev

在.NET中确定网络路径的文件系统

来自分类Dev

远程Docker和卷绑定

来自分类Dev

如何检查其中的卷组以及卷组中的文件系统Linux中的详细信息

来自分类Dev

如何在Linux中命名卷,以便我可以识别文件系统中的每个卷?

来自分类Dev

安装OSX:文件系统验证或修复失败

来自分类Dev

initramfs和实际的主文件系统有什么区别?

来自分类Dev

逆转累积和以确定R中的实际值

来自分类Dev

确定VBA中图片对象的实际大小和显示大小

来自分类Dev

创建安装在另一个文件系统下的btrfs子卷

来自分类Dev

Git仓库在文件系统中的实际位置在哪里?

来自分类Dev

如何确定文件系统上Windows的版本和版本?

来自分类Dev

MTP安装的设备在文件系统中的哪里?

来自分类Dev

MTP安装的设备在文件系统中的哪里?

来自分类Dev

从Git中的提交哈希确定远程和分支/标签

来自分类Dev

在OSX和Linux之间使用哪个文件系统

来自分类Dev

如何在Windows Server 2008中删除系统卷信息文件夹中的文件

来自分类Dev

如何检查是否已安装openssl或cryptopp并使用系统(已安装)中实际存在的库?

来自分类Dev

如何检查是否已安装openssl或cryptopp并使用系统(已安装)中实际存在的库?

来自分类Dev

本地文件系统作为Django中的远程存储

来自分类Dev

本地文件系统作为Django中的远程存储

来自分类Dev

OSX:绝对桌面文件路径?(包括/卷)

来自分类Dev

如何防止Windows 7创建系统还原文件和卷影副本?

来自分类Dev

增加文件系统和分区大小-vgdisplay“未找到卷组”

来自分类Dev

EC2卷和已挂载的文件系统之间的映射

Related 相关文章

  1. 1

    分层文件系统和卷挂载

  2. 2

    始终安装“远程磁盘”卷(但仅在Finder中)

  3. 3

    Linux操作系统中/ etc / shadow和卷影缓存文件的用途是什么?

  4. 4

    在Linux中的C / C ++中,如何确定已安装或已卸载分区的文件系统类型

  5. 5

    在Linux中的C / C ++中,如何确定已安装或已卸载分区的文件系统类型

  6. 6

    在.NET中确定网络路径的文件系统

  7. 7

    远程Docker和卷绑定

  8. 8

    如何检查其中的卷组以及卷组中的文件系统Linux中的详细信息

  9. 9

    如何在Linux中命名卷,以便我可以识别文件系统中的每个卷?

  10. 10

    安装OSX:文件系统验证或修复失败

  11. 11

    initramfs和实际的主文件系统有什么区别?

  12. 12

    逆转累积和以确定R中的实际值

  13. 13

    确定VBA中图片对象的实际大小和显示大小

  14. 14

    创建安装在另一个文件系统下的btrfs子卷

  15. 15

    Git仓库在文件系统中的实际位置在哪里?

  16. 16

    如何确定文件系统上Windows的版本和版本?

  17. 17

    MTP安装的设备在文件系统中的哪里?

  18. 18

    MTP安装的设备在文件系统中的哪里?

  19. 19

    从Git中的提交哈希确定远程和分支/标签

  20. 20

    在OSX和Linux之间使用哪个文件系统

  21. 21

    如何在Windows Server 2008中删除系统卷信息文件夹中的文件

  22. 22

    如何检查是否已安装openssl或cryptopp并使用系统(已安装)中实际存在的库?

  23. 23

    如何检查是否已安装openssl或cryptopp并使用系统(已安装)中实际存在的库?

  24. 24

    本地文件系统作为Django中的远程存储

  25. 25

    本地文件系统作为Django中的远程存储

  26. 26

    OSX:绝对桌面文件路径?(包括/卷)

  27. 27

    如何防止Windows 7创建系统还原文件和卷影副本?

  28. 28

    增加文件系统和分区大小-vgdisplay“未找到卷组”

  29. 29

    EC2卷和已挂载的文件系统之间的映射

热门标签

归档