web-dev-qa-db-ja.com

マウントポイントの元のコンテンツへのアクセス

ヘッドレスでNAS sdf1/からマウントされ、/homelv00(LVMソフトウェアRAIDによってバックアップされたボリューム)。RAIDに障害が発生したときにマシンにアクセスできるようにするため、/home/foo/.sshからファイルシステムのsdf1にssh公開鍵などのコピーを持っています。
マウントされた/homeによって隠されているファイルを更新するには、通常lv00/mnt/homeを再マウントし、必要な操作を行ってから、lv00を移動します元の場所に戻ります。
アンマウントせずにこれを達成する方法はありますか/home

35
Janus
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh

--bindとは対照的に)--rbindを使用する限り、その上にマウントされたものなしでマウントのクローンを取得します。

49
ephemient

私は同様のことを達成しようとしましたが、 ephemient の答えはメソッドのセマンティクスを説明しませんでした。それは私にとって失敗したので、私は以前unix.SEでほぼ同じ質問をしました。コメントの後、私は自分でそれを理解し、それに答えました。これは、ここでのこのコンテキストに適合するように私の回答を編集したバージョンです。私はこれに賛成して他の質問(および回答)を削除しました。

これが私がやろうとしていたことです:

事例

マウント:

/dev/sda1  on /     type ext4 (rw)
/dev/sdb1  on /data type ext4 (rw)
/data/home on /home type none (rw,bind)

/をマウントした後、ユーザーjoeのフォルダー/home/joeを持っています。他の場所がマウントされたら(/data)、ホームフォルダーの完全なセットが利用できるので、それらを所定の場所にバインドマウントします(/data/home on /home)。フォルダ/data/home/joeがあるため、/dev/sdb1のマウントが成功する限り、彼は/data/home/joeのコンテンツを取得します。それ以外の場合は、/home/joe/dev/sda1!)。

When成功した場合、/home/joeからバインドマウントしたものではなく、/dev/sda1の元のコンテンツ(/data/home/joe!)にアクセスするにはどうすればよいですか?

解決

私の質問に対する Patrick のコメントとephemientによる解決策(ここでは受け入れられた回答)に基づいて、私は次のことを思いつきました。

is明らかにmount --bind(またはmount -o bind)に親フォルダこれは重要な部分です)他の場所のバインドマウントの元のコンテンツにアクセスします。したがって、私の例の場合、次のことを試みる代わりに:

mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath

(つまり、すでにバインドされている場所を別の場所にマウントします)

test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath

これがパトリックのコメントの意味です

/(ルート)で再マウントしない限り、その答えは問題なく機能します。

バインドマウントされた場所への親フォルダーが利用可能である限り、上記のように1つの間接参照があっても機能します。 /にバインドマウントすると、/の親フォルダがないため、運が悪くなります。

5
0xC0000022L

mount --moveを使用すると、マウントを解除せずにマウントを新しい場所に移動できます。

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
1
Michael Mrozek