mount --bind
私のサーバーのSFTPユーザーがアクセスできるように、ディレクトリを別のディレクトリにマウントしました。
mount --bind /path/share /path/home/user/stuff
入れてみましたが/etc/fstab
とても上手です。
cd
マウントされたディレクトリに移動してこれを実行すると、pwd
そのディレクトリが実際に物理的に存在するようです。
/path/home/user/stuff/share
「元の」ディレクトリがどこにあるかを示すコマンドはありますか(シンボリックリンクのように:元のls -fsl
パスを見るとき)。
答え1
私はあなたが探していると思いますmount -l
。
答え2
はい、ディレクトリはそこにインストールしたのでそこにあります。mount --bind
既存のインストールを使用し、それを別のマウントポイントに接続するようにカーネルに指示します。カーネルに関する限り、
mount /dev/something /path/share
mount --bind /path/share /path/home/user/stuff
そして
mount /dev/something /path/home/user/stuff
mount --bind /path/share /path/home/user/stuff
それは同じです。これを区別する方法は2つあります。
/path/share
マウントポイントでない場合(つまり/path
、またはマウントされているより大きなファイルシステムの一部である場合/
)、ファイルシステムのルートにないため、バインドマウントがわかります。- プログラム
mount
は仕事を/etc/mtab
。
このdf
コマンドは、ディレクトリがこのオプションでマウントされたファイルシステムにある場合に元のパスが何であるかを確認できる/etc/mtab
ように読み取ります。bind
df -P /path/to/file | awk 'NR==2 {print $1}'
(2行目の最初のフィールド)この情報は常に信頼できるとは限りません。たとえば、次のように元のファイルシステムがアンマウントされ、現在この場所や他の場所に何もインストールされていない可能性があります。
mount /dev/something /path/share
mount --bind /path/share /path/home/user/stuff
unmount /dev/something
mount /dev/somethingelse /path/share
答え3
Linuxでは、findmnt
(from util-linux
)を使ってこれを行うことができます。
~$ sudo mount --bind /usr/local mnt
~$ cd mnt/bin
~/mnt/bin$ pwd
/home/stephane/mnt/bin
~/mnt/bin$ findmnt -T .
TARGET SOURCE FSTYPE OPTIONS
/home/stephane/mnt /dev/mapper/VG-LV[/usr/local] ext4 rw,noatime,discard,errors=remount-ro,data=ordered
答え4
デイジーの答えによるとどうですか?
use strict;
use warnings;
use File::Basename;
my $mntpath = $ARGV[0] or die "Missing required parameter <pathname>\n";
$mntpath = dirname ($mntpath) while (! grep / on $mntpath type /, `mount`);