我有一台带有 autofs 安装主目录的 Solaris 10 服务器。在一台服务器上,10 分钟超时后它们不会被卸载。我们已经进入AUTOMOUNT_TIMEOUT=600
,/etc/default/autofs
我运行automount -t 600
、禁用并重新启用svc:/system/filesystem/autofs:default
服务,但似乎没有任何效果。
我的怀疑是某物系统上的文件系统定期访问所有已安装的文件系统,可能会检查它们是否可访问,从而重置自动安装程序超时,而该超时又永不过期。我刚刚做的一个测试支持了这一点 - 如果我将超时设置为 10 秒,则挂载点将被卸载,看起来 10 秒比该时间短某物正在执行检查,计时器有机会到期。
问题是我如何才能找到正在执行此操作的进程?该服务器是一个被大量使用的生产系统,我不能在它上面做任何危险的实验。
请注意,文件系统是不是保持打开状态,可以手动卸载。那某物可能会逐个安装点,cd in,cd out,继续,经常足以防止automount
卸载它。但它不会使其保持打开状态,因此使用lsof
或 时不可见fuser -c
。我想在它访问挂载点时立即捕获或记录它,以了解它在做什么。
FWIW 它是相当强大的 Solaris 10 主机 (Sparc / M5000) 上的 Solaris 10 区域。
答案1
你可以尝试 rwsnoop (http://dtracebook.com/index.php/File_System:rwsnoop) 使用 dtrace 监视 i/o 访问:
# rwsnoop - snoop read/write events.
# Written using DTrace (Solaris 10 3/05).
#
# This is measuring reads and writes at the application level. This matches
# the syscalls read, write, pread and pwrite.
祝你好运!
答案2
您可以使用该工具lsof
来确定哪个进程正在访问文件系统上的特定文件。在这种情况下,您可以使用它来检测哪个进程正在访问自动挂载的挂载点。
例子
automount
我的目录有以下内容/vz_backups
:
$ showmount -e krycek
Export list for krycek:
/export/raid1/vz_backups 192.168.1.0/24
现在 cd 到挂载点下的自动挂载:
$ cd /vz_backups/images
看到我们已经安装了它:
$ mount | grep /vz
krycek:/export/raid1/vz_backups/images on /vz_backups/images type nfs (rw,intr,tcp,rsize=16384,wsize=16384,addr=192.168.1.4)
然后您可以使用以下命令询问文件访问lsof
:
$ lsof -l | grep /vz
automount 3359 0 16r DIR 0,24 0 11960 /vz_backups
bash 28635 0 cwd DIR 0,30 4096 2981890 /vz_backups/images (krycek:/export/raid1/vz_backups/images)
lsof 31040 0 cwd DIR 0,30 4096 2981890 /vz_backups/images (krycek:/export/raid1/vz_backups/images)
grep 31041 0 cwd DIR 0,30 4096 2981890 /vz_backups/images (krycek:/export/raid1/vz_backups/images)
lsof 31042 0 cwd DIR 0,30 4096 2981890 /vz_backups/images (krycek:/export/raid1/vz_backups/images)
现在cd
退出该目录,以便没有任何东西可以访问它,并且等待自动挂载超时,或者手动umount
它,然后再次检查:
$ cd ~
$ umount /vz_backups/images
$ lsof -l | grep /vz
automount 3359 0 16r DIR 0,24 0 11960 /vz_backups
参考
答案3
您可能正在运行监视软件,该软件以低于自动安装程序超时的时间间隔运行“df”命令。在 Solaris 上,statvfs 系统调用将文件系统标记为正在使用。解决办法:使用df -l
。