如何确定路径是位于物理设备上还是位于内存中?

时间:2019-07-03 14:32:29

标签: linux

我正在寻找一种方法,以编程方式知道路径是指向物理设备还是位于内存中。

我注意到du命令为/sys/proc中的路径打印的大小为零,但是我不确定这是否可靠,因为我认为磁盘上的文件大小可以为零。

1 个答案:

答案 0 :(得分:1)

由于Linux中使用的原理(一个具有挂载点的文件系统,网络透明性,所有内容都是一个文件(或文件夹)),这很难实现。想象一下:一个安装在您系统中的网络文件系统。它不在您计算机的任何物理设备中-这是物理设备吗?

想到的唯一启发式是将文件系统与预定义列表进行比较:检查mount的输出,例如:

tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204096k,mode=755)
/dev/sda2 on / type ext4 (rw,relatime,errors=remount-ro)

第一列是源设备-在第一个条目上没有设备连接,只有虚拟文件系统tmpfs,而在第二个条目中,我们看到了正确的设备/dev/sda2

设备不能保证物理存储,例如/dev/mem,它可以直接访问计算机的内存。

因此,我的建议是找出适用于路径的安装点(尝试lsblk),在mount的输出中找到该安装点。如果此挂载点与/dev/WHATEVER形式的设备整数不匹配,则假定它在内存中

使用@Chris的建议,例如此findmnt -T /proc/net/stat/arp_cache

TARGET SOURCE FSTYPE OPTIONS
/proc  proc   proc   rw,nosuid,nodev,noexec,relatime

相关的列是SOURCE