web-dev-qa-db-ja.com

特定のディレクトリがマウントされているかどうかを確認するにはどうすればよいですか?

特定のディレクトリを確認する方法は、Linuxマシンにマウントされています。たとえば、testという名前のフォルダーがあります。マウントされているかどうかを確認したいと思います。

25
unixx

ファイルシステムのマウントポイントであることを確認する場合は、(ほとんどのLinuxベースのシステムで)mountpointコマンドを使用します。

_if mountpoint -q -- "$dir"; then
  printf '%s\n' "$dir is a mount point"
fi
_

これは、_._と_.._が同じデバイス番号(stat()結果の_st_dev_)を持っているかどうかを確認することで行われます。したがって、mountpointコマンドがない場合は、次のようにすることができます。

_Perl -le '$dir = shift; exit(1) unless
  (@a = stat "$dir/." and @b = stat "$dir/.." and
  ($a[0] != $b[0] || $a[1] == $b[1]))' "$dir"
_

mountpointと同様に、_/_がマウントポイントではない場合でも_/_に対してtrueを返します(chroot jail内にある場合など)、またはbindのマウントポイントに対してfalseを返します。同じファイルシステムをそれ自体の中にマウントします。

mountpointとは逆に、シンボリックリンクの場合、シンボリックリンクのターゲットがマウントポイントであるかどうかをチェックします。

28

HalosGhostがコメントで言及しているように、ディレクトリ自体が必ずしもマウントされているとは限りません。むしろ、それらはマウントされたデバイス上に存在します。これを確認するには、次のようにdfコマンドを使用できます。

$ df -h /boot/
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              99M   55M   40M  59% /boot

ここで、ディレクトリ/bootはファイルシステムの一部であり、/dev/hda1。これは、システム上の物理デバイス、HDDです。

mountコマンドを使用してシステムにクエリを実行し、現在どのデバイスがマウントされているかを確認することで、少し異なる方法でこれを実行することもできます。

$ mount | column -t
/dev/mapper/VolGroup00-LogVol00  on  /                         type  ext3         (rw)
proc                             on  /proc                     type  proc         (rw)
sysfs                            on  /sys                      type  sysfs        (rw)
devpts                           on  /dev/pts                  type  devpts       (rw,gid=5,mode=620)
/dev/hda1                        on  /boot                     type  ext3         (rw)
tmpfs                            on  /dev/shm                  type  tmpfs        (rw)
/dev/mapper/lvm--raid-lvm0       on  /export/raid1             type  ext3         (rw)
none                             on  /proc/sys/fs/binfmt_misc  type  binfmt_misc  (rw)
sunrpc                           on  /var/lib/nfs/rpc_pipefs   type  rpc_pipefs   (rw)
nfsd                             on  /proc/fs/nfsd             type  nfsd         (rw)

ここでは、デバイスのタイプとファイルシステムのタイプが現在システムにマウントされていることがわかります。 3列目は、ファイルシステム内のシステムのどこにマウントされているかを示しています。

15
slm

まあ、他の人が言ったように、あなたはあなたの質問を編集して、あなたが達成しようとしていることを明確にするべきです。私が理解している限り、ディレクトリが特定のデバイスにマウントされているかどうかを確認する必要があります。以下のようなものも試すことができます。

df -P /test | tail -1 | cut -d' ' -f 1

したがって、基本的に、上記のコマンドは、デバイスがディレクトリにマウントされている場合、ディレクトリのマウントポイントを通知します。

5
Ramesh

新しいXFSファイルシステムのマウントを確認したいときに、同じ質問を探していました。

コマンド findmnt が見つかりました:findmnt /directoryname

[root@CentOS7-Server /]# findmnt /mnt
TARGET SOURCE    FSTYPE OPTIONS
/mnt   /dev/sdb1 xfs    rw,relatime,seclabel,attr2,inode64,noquota
[root@CentOS7-Server /]# 
3
xharx

素晴らしくて短いPythonワンライナーは Gillesの答え に基づいて構築できます:

$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /mnt/HDD
True

$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /etc                
False

/proc/self/mountsファイルを解析するmountpointコマンドのカスタム実装をPythonで作成しました。コマンドが/proc/self/mountinfoを解析することを除いて、ステファンの回答のmountと同じような動作です。使い方は非常に簡単です:is_mountpoint.py /path/to/dir

#!/usr/bin/env python3
from os import path
import sys

def main():

    if not sys.argv[1]:
       print('Missing a path')
       sys.exit(1)

    full_path = path.realpath(sys.argv[1])
    with open('/proc/self/mounts') as mounts:
       print
       for line in mounts:
           if full_path in line:
              print(full_path,' is mountpoint')
              sys.exit(0)
    print(full_path,' is not a mountpoint')
    sys.exit(1)

if __name__ == '__main__':
    main()

試運転:

$ python3 ./is_mountpoint.py /mnt/HDD                                          
/mnt/HDD  is mountpoint
$ lsblk | grep HDD
└─sdb6   8:22   0 405.3G  0 part /mnt/HDD
$ python3 ./is_mountpoint.py $HOME                                             
/home/xieerqi  is not a mountpoint
2

あなたの質問は少し混乱しますが、それを確認する方法の1つであると思います:mount |awk '{print $3}'| grep -w <your_directory>。出力が空の場合、デバイスはディレクトリにマウントされていません。空でない場合は、一部のデバイスがディレクトリにマウントされています。他の方法はdf <your_directory>を使用することです。最後のフィールドがディレクトリ名と等しい場合-一部のデバイスがそれにマウントされています。

0
gena2x