フォルダがどの物理デバイスにあるかを確認するには?

フォルダがどの物理デバイスにあるかを確認するには?

具体的には次のとおりです。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/md2md デバイスのコンポーネントを表示するには、以下を使用または表示できます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

realpathGNU 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.

関連情報