デフォルトのマウントポイントパスのコンテンツにアクセスする

デフォルトのマウントポイントパスのコンテンツにアクセスする

/dev/sda1ルートにパーティションがマウントされていてルートにパーティションがマウントされている場合は、/まずマウントを解除せずにそのパーティションの元の内容にアクセスする方法はありますか?/dev/sdb1/var/varsda1sdb1

答え1

Linuxでは、バインドマウントを使用してファイル階層の一部を別の場所に再マウントできます。たとえば、次のようにできます。

# mkdir /mnt/bindroot
# mount --bind / /mnt/bindroot

この時点では、/mnt/bindrootルートファイルシステムの内容が含まれますが、さまざまなディレクトリに他のファイルシステムはマウントされません。

# ls /home
user1 lost+found

# ls /mnt/bindroot/home
<whatever was in /home before a filesystem was mounted over it>

FreeBSDの場合は、nullfsマウントを使用して同様の操作を実行できますmount_nullfs。を参照してください。

答え2

Linuxでは、chdirまたはデフォルトのディレクトリを開いて(マウントによって隠される前に)、単に待機するプロセスがあれば、バインドマウントとルート権限なしでこれを行うことができます。その後、他のプロセスはまたはを介して/proc/<pid>/cwdディレクトリにアクセスできます/proc/<pid>/fd/<dir_fd>

chdir 例:

# mkdir dir; touch dir/file                   # create a sample dir and file
# (cd dir; while sleep 3600; do :; done) &    # start a bg process with its pwd being dir
[1] 3734
# mount -t tmpfs tmpfs dir                    # mount a tmpfs over dir which will hide its previous content
# ls dir
# ls /proc/3734/cwd                           # you can still access the old dir via /proc/<pid>/cwd 
file

ディレクトリを開く例:

# mkdir -p dir1; touch dir1/file
# exec 9<dir1
# mount -t tmpfs tmpfs dir1
# ls dir1
# ls /proc/self/fd/9
file

後でマウントされたディレクトリを使用してこれを行うには、専用の名前空間を作成し、名前空間内のディレクトリをアンマウントするだけです。

この場合、/proc/<pid>/root/<path_to_dir>ファイルを開いたりパスを指定せずに外部からアクセスすることもできます。

mkdir -p dir; touch dir/file
mount -t tmpfs tmpfs dir

unshare -m sh -c 'umount dir; while sleep 1000; do :; done' &
sleep .1
ls "/proc/$!/root/$PWD/dir"  # will show 'file'

/proc/<pid>/rootマンページで追加の魔法の詳細を読むことができますproc(5)。プロセスが終了した後でも、他の場所にバインドマウントして、/proc/<pid>/ns/mntプロセスの名前空間をアクティブに保つことができます。その後、再入力を使用できますnsenter(1)

答え3

注:レビューを見逃した人のために。

sudo mount --bind original_location backup_link動作します。oldlocation何かをインストールし、その上に影をインストールした後、下の場所にアクセスできます。

しかし、

  1. sudo mount --bind走らなければならないことに気づいた後ろに mount something original_location、事前ではありません。
  2. シャドウがマウントされてから、1つのシャドウよりも高いディレクトリをマウントする必要があります。sudo mount --bind parent_of_original_location backup_link

関連情報