具体的には、私はSudo mkdir /work
、それが実際に私のハードドライブにあり、他のドライブにマップされていないことを確認したいと思います。
このフォルダが物理的にどこにあるかを確認するにはどうすればよいですか?
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
_デバイス上にあることがわかります。
ブロックデバイスをネストできる他の方法(ヒューズ、ループバックファイルシステム)があり、基盤となるブロックデバイスを決定するための独自のメソッドがあり、複数のレイヤーをネストすることもできるので、下に移動する必要があります。それが来るように、あなたはそれぞれのケースを取る必要があります。
スクリプトの場合、次のものを使用できます。
$ df -P <pathname> | awk 'END{print $1}'
これは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
したがって、プログラムでデバイスの完全なパスを取得するには、以下を使用できます。
$ realpath $(df . | grep '^/' | cut -d' ' -f1)
これは私のケースプリントです:
/dev/dm-1
realpath
はGNU coreutils。