rip*_*234 133 filesystems
具体来说:我做了sudo mkdir /work,并想验证它确实位于我的硬盘上,而不是映射到其他驱动器。
如何检查此文件夹的物理位置?
cam*_*amh 174
该df(1)命令将告诉您文件或目录所在的设备:
df /work
Run Code Online (Sandbox Code Playgroud)
第一个字段包含文件或目录所在的设备。
例如
$ df /root
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1043289 194300 795977 20% /
Run Code Online (Sandbox Code Playgroud)
如果设备是逻辑卷,则需要确定逻辑卷位于哪个块设备上。为此,您可以使用以下lvs(8)命令:
# df /usr
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/orthanc-usr
8256952 4578000 3259524 59% /usr
# lvs -o +devices /dev/mapper/orthanc-usr
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
usr orthanc -wi-ao 8.00g /dev/sda3(0)
Run Code Online (Sandbox Code Playgroud)
最后一列告诉您usr卷组orthanc( /dev/mapper/orthanc-usr)中的逻辑卷在设备上/dev/sda3。由于卷组可以跨越多个物理卷,您可能会发现列出了多个设备。
另一种类型的逻辑块设备是 md(多设备,我认为曾经被称为元磁盘)设备,例如/dev/md2. 要查看 md 设备的组件,您可以使用mdadm --detail或查看/proc/mdstat
# df /srv
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md2 956626436 199340344 757286092 21% /srv
# mdadm --detail /dev/md2
...details elided...
Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 8 19 1 active sync /dev/sdb3
Run Code Online (Sandbox Code Playgroud)
您可以/dev/md2在/dev/sda3和/dev/sdb3设备上看到它。
还有其他方法可以嵌套块设备(保险丝、环回文件系统),它们将有自己的方法来确定底层块设备,您甚至可以嵌套多个层,因此您必须按自己的方式工作。你必须在每一个案例出现时处理它。
对于脚本,您可以使用:
$ df -P <pathname> | awk 'END{print $1}'
Run Code Online (Sandbox Code Playgroud)
这是 POSIX 兼容的。
在 Ubuntu 的现代发行版中,文件/目录和设备之间有一个附加层(设备映射器)。/dev/mapper包含指向实际特殊设备的符号链接。例如,尝试当前目录:
$ df . | grep '^/' | cut -d' ' -f1
/dev/mapper/kubuntu--vg-root
$ ls -l /dev/mapper/kubuntu--vg-root
lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1
Run Code Online (Sandbox Code Playgroud)
因此,要以编程方式获取设备的完整路径,您可以使用:
$ realpath $(df . | grep '^/' | cut -d' ' -f1)
Run Code Online (Sandbox Code Playgroud)
这是我的案例打印:
/dev/dm-1
Run Code Online (Sandbox Code Playgroud)
realpath是 GNU coreutils 的一部分。