如何查找文件夹位于哪个物理设备上?

如何查找文件夹位于哪个物理设备上?

具体来说:我做了sudo mkdir /work,并且想验证它确实位于我的硬盘驱动器上并且没有映射到其他驱动器。

如何检查该文件夹的物理位置?

答案1

df(1)命令将告诉您文件或目录所在的设备:

df /work

第一个字段包含文件或目录所在的设备。

例如

$ df /root
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1043289    194300    795977  20% /

如果设备是逻辑卷,您将需要确定逻辑卷位于哪个块设备上。为此,您可以使用以下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)

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

您可以在和设备/dev/md2上看到它。/dev/sda3/dev/sdb3

还有其他可以嵌套块设备的方法(熔断器、环回文件系统),它们有自己的方法来确定底层块设备,您甚至可以嵌套多个层,因此您必须向下工作。你必须接受每一个案例。

答案2

对于脚本,您可以使用:

$ df -P <pathname> | awk 'END{print $1}'

这是 POSIX 兼容的。

答案3

在 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

因此,要以编程方式获取设备的完整路径,您可以使用:

$ realpath $(df . | grep '^/' | cut -d' ' -f1)

这是我的案例打印:

/dev/dm-1

realpath是 GNU coreutils 的一部分。

答案4

$ findmnt -no source -T /      # mountpoint
/dev/nvme0n1p2
$ findmnt -no source -T /usr   # directory under mountpoint
/dev/nvme0n1p2
$ COLUMNS=70 man findmnt | sed -E '/^ {7}-[noT]/,/^$/!d;s/^ {7}//'           
-n, --noheadings
    Do not print a header line.

-o, --output list
    Define output columns. See the --help output to get a
    list of the currently supported columns. The TARGET
    column contains tree formatting if the --list or --raw
    options are not specified.

-T, --target path
    Define the mount target. If path is not a mountpoint file
    or directory, then findmnt checks the path elements in
    reverse order to get the mountpoint (this feature is
    supported only when searching in kernel files and
    unsupported for --fstab). It’s recommended to use the
    option --mountpoint when checks of path elements are
    unwanted and path is a strictly specified mountpoint.

相关内容