mount
しばらく前に、後で隠されたディレクトリのファイルにアクセスできるようにしたいと思いました。 SEでいくつかのQA回答を見つけた覚えがありますが、私が試した回答のどれも効果がなかったことを覚えています。たぶん彼らは以前のLinuxカーネルで作業していたかもしれません。これで、最新のカーネル(現在5.x)の1つを含むディストリビューションを使用しようとしています。
マウントによって隠されたディレクトリツリー部分にアクセスするために「標準」ツールを使用する方法が実際にある場合は、答えを作成してください。
私はいくつかの解決策を考えました。
- ディレクトリのハードリンクへのソフトリンクを作成するためのツールがありますか? AFAIK規格は
ln
これを行うことはできません。ln -s
(AFAIKと試行錯誤による)inodeではなくファイルツリーの場所へのリンクを作成します。その場所が指す位置が変更されると(上部マウントを介して)、シンボリックリンクは古い場所ではなく新しい場所を指します。
@terdonのコメントに応じて追加されました。
ユーザーの観点(少なくとも私の読者man ln
など)では、シンボリックリンクはオペレーティングシステム(システムユーティリティを含む)がinode(ハードリンク)と区別されるリンクの種類です。これはfind
ループを通過しないリンクです。
物理inodeデータを半手動で読み取った後
dd
(マウント前)、後で別のデータに適用します(デフォルトではハードリンク)。どうすればいいですか?カーネルのフォルダへのハードリンクを有効にします。 (私はこれを特別な作業にほとんど使用しない計画です。循環的推論を知っていますが、私が知っている限り、多くのUnixがこれを持っていて動作します。)どうすればよいですか?
PS:質問を複数に分割する方が良いかもしれません...
補足 2.ln -s
テスト:
$ echo 123 > 1/1/te.xt
$ ln -s 1/1 2
$ ls 2
te.xt
$ sudo mount -o loop /path/ubuntu-20.04.3-desktop-amd64.iso 1
$ ls 2 # 2 is displayed as broken link in GUI
2
3つを追加しました。mount --bind
以下で試してみてください。デフォルトのマウントポイントパスのコンテンツにアクセスする- 失敗
$ mount --bind 1 2
$ ls 2
1
$ sudo mount -o loop /path/ubuntu-20.04.3-desktop-amd64.iso 1
$ ls 2
boot casper dists EFI install isolinux md5sum.txt pool preseed ubuntu
追加4:前のレベルにマウントバインディング - 同じ方法で失敗します(ところで、tmpfsシステムですが、ext4でも機能しますか?で読むように--bind
提案した内容の説明が見つかりませんでしたman mount
)。
補足5:オーバーシャドウイングコマンドの後に実行する必要があることがわかり
ました。mount --bind
mount
答え1
..
ディレクトリツリーに循環が発生し、ディレクトリエントリが一意でないため、ディレクトリへのハードリンクを作成できません。ディレクトリへのハードリンクを作成できないため、ディレクトリハードリンクへのソフトリンクを作成できません。
そうでなければファイルシステム自体に対するバイナリパッチ、この場合は、次のように、または他の方法で中断できます。少なくともfsck
それはあなたをガタガタさせ、ファイルシステムドライバも吐き出すかどうか疑問に思います。
にいくつかのデータがあり、他のものを/foo
マウントするときにそのデータを使用できるようにする必要がある場合は、/foo
最も簡単な方法は名前を/foo
に変更し/bar
て新しい空のディレクトリを作成し、その新しい/foo
ディレクトリに別のファイルシステムをマウントすることです/foo
。
Linuxでは、バインドマウントを使用して何かをマウントし、ソースファイルがに表示されるようにソース/foo
ファイル全体をバインドマウントできます。しかし、残りの部分もそこに表示されるので、などが表示されます。/
/bar
/foo
/bar/foo
/
/bar/bin
/bar/etc
# mkdir /foo /bar
# touch /foo/file-in-root-fs.txt
# mount -t tmpfs tmpfs /foo
# mount --bind / /bar
# ls -l /bar/foo
total 0
-rw-r--r-- 1 root root 0 Dec 1 14:36 file-in-root-fs.txt
新しいインストールの下に1つのディレクトリだけがバインドマウントできることを確認しようとしましたが、方法が見つかりませんでした。
/foo
インストールを最初にバインド/bar
してから、インストールしようとする直接的な試みも、新しい/foo
インストールを両方の場所にコピーするようです。 (これは古いカーネルにありますが)
# mount --bind /foo /bar
# mount -t tmpfs tmpfs /foo
# ls -ldi /foo /bar
46378188 drwxrwxrwt 2 root root 40 Dec 1 14:37 /bar/
46378188 drwxrwxrwt 2 root root 40 Dec 1 14:37 /foo/