web-dev-qa-db-ja.com

フォルダーが配置されている物理デバイスを見つけるにはどうすればよいですか?

具体的には、私はSudo mkdir /work、それが実際に私のハードドライブにあり、他のドライブにマップされていないことを確認したいと思います。

このフォルダが物理的にどこにあるかを確認するにはどうすればよいですか?

120
ripper234

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(_/dev/mapper/orthanc-usr_)の論理ボリュームorthancがデバイス_/dev/sda3_にあることを示しています。ボリュームグループは複数の物理ボリュームにまたがることができるため、複数のデバイスがリストされている場合があります。

別のタイプの論理ブロックデバイスは、_/dev/md2_などのmd(複数のデバイスであり、メタディスクと呼ばれていました)デバイスです。 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_デバイス上にあることがわかります。

ブロックデバイスをネストできる他の方法(ヒューズ、ループバックファイルシステム)があり、基盤となるブロックデバイスを決定するための独自のメソッドがあり、複数のレイヤーをネストすることもできるので、下に移動する必要があります。それが来るように、あなたはそれぞれのケースを取る必要があります。

154
camh

スクリプトの場合、次のものを使用できます。

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

これはPOSIX互換です。

5
Tom Hale

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。

2
arielf