ヘッドレスでNAS sdf1
は/
からマウントされ、/home
はlv00
(LVMソフトウェアRAIDによってバックアップされたボリューム)。RAIDに障害が発生したときにマシンにアクセスできるようにするため、/home/foo/.ssh
からファイルシステムのsdf1
にssh公開鍵などのコピーを持っています。
マウントされた/home
によって隠されているファイルを更新するには、通常lv00
の/mnt/home
を再マウントし、必要な操作を行ってから、lv00
を移動します元の場所に戻ります。
アンマウントせずにこれを達成する方法はありますか/home
?
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh
(--bind
とは対照的に)--rbind
を使用する限り、その上にマウントされたものなしでマウントのクローンを取得します。
私は同様のことを達成しようとしましたが、 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つの間接参照があっても機能します。 /
にバインドマウントすると、/
の親フォルダがないため、運が悪くなります。
mount --move
を使用すると、マウントを解除せずにマウントを新しい場所に移動できます。
$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home