当たり前といえば当たり前だと思いますが...。

環境

% uname -rsm
Linux 4.20.8-arch1-1-ARCH x86_64

手順

デバイスをマウントさせるスクリプトを用意しておき、以下の手順をおこないます。

  1. unshare -m スクリプト を実行。マウント名前空間を分離させる
  2. 別の名前空間(というかデフォルトの名前空間?)からデバイスを mkfs する

という手順を実施すると、 mkfs で失敗します。

詳細

以下のようなスクリプトを用意します。ファイルを生成し、ループバックデバイスを使ってマウントします。

sweep() {
  echo got signal
  umount /mnt
  losetup -d ${dev}
  echo bye
  exit 0
}

trap sweep INT TERM QUIT

dev=$(losetup -f)

dd if=/dev/zero of=./hoge.img bs=1M count=10
losetup ${dev} ./hoge.img
mkfs.ext4 -F ${dev}
mount ${dev} /mnt

echo ----
mount
echo ----

echo loop... $$
while true; do
  sleep 1
done

スクリプトを unshare で実行します。

% sudo unshare -m ./mount1.sh
略
/dev/loop0 on /mnt type ext4 (rw,relatime)   ← /dev/loop0 が /mnt にマウントされた
----
loop... 28543  ←プロセスID

別の端末を開き(上記プロセスとは異なるマウント名前空間)、 mount を実行します。 /dev/loop0 on /mnt が無いことを確認します。

% mount
略

その端末で mkfs を実行すると失敗します。「システムにより使用されている」と言われます。

% sudo mkfs.ext4 -F /dev/loop0
mke2fs 1.44.5 (15-Dec-2018)
/dev/loop0 contains a ext4 file system
    last mounted on Thu Mar  7 17:32:58 2019
/dev/loop0 is apparently in use by the system; will not make a filesystem here!

質問

プロセス 28543/dev/loop0 をマウントしているので、異なるマウント名前空間からは /dev/loop0 はマウントされてないように見えるが、 実際は /dev/loop0 はプロセス 28543 により使用されている。よって、 /dev/loop0mkfs できない。

という理解であっているでしょうか?