質問
cryptsetup close
flatpakアプリがバックグラウンドで実行されているとLUKSボリュームを取得できません。はい、Flatpakアプリはバックグラウンドでのみ実行できます。サンドボックスなどでcryptsetupを使用したくありません。うん、そうです。の一つ質問。
再現段階
mkdir ~/mnt
dd if=/dev/zero of=file.img bs=1MiB count=100
sudo losetup /dev/loop4 file.img
sudo cryptsetup luksFormat /dev/loop4
sudo cryptsetup open /dev/loop4 my_crypt
sudo mkfs.fat /dev/mapper/my_crypt
sudo mount /dev/mapper/my_crypt ~/mnt
echo ayylmao | sudo tee ~/mnt/foobar.txt
sync
# <open a flatpak app, such as flatseal, in the background>
sudo umount ~/mnt
sudo cryptsetup close my_crypt
# output:
# device-mapper: remove ioctl on my_crypt failed: Device or resource busy
# <the above line multiple times>
# Device my_crypt is still in use.
# <now close the flatpak app>
sudo cryptsetup close my_crypt
# Now it runs successfully
sudo losetup -d /dev/loop4
ループデバイスと比較すると、「実際の」LUKSデバイスと墓S.
追加診断
xdg-dbus-proxy
Flatpakアプリケーションを起動したときに「デフォルト」ネームスペースからアンマウントされた場合でも、何らかの理由でLUKSデバイスのファイルシステムをマウントされたままにする新しいネームスペースから呼び出されるプロセスが作成されるようですmnt
。その後も同じでした。たとえば、lsns
flatsealを開始する前の出力は次のようになります。
NS TYPE NPROCS PID USER COMMAND
4026531834 time 40 1452 renzev -bash
4026531835 cgroup 40 1452 renzev -bash
4026531836 pid 40 1452 renzev -bash
4026531837 user 40 1452 renzev -bash
4026531838 uts 40 1452 renzev -bash
4026531839 ipc 40 1452 renzev -bash
4026531840 net 40 1452 renzev -bash
4026531841 mnt 40 1452 renzev -bash
Flatsealを起動した後の出力は次のとおりです。
NS TYPE NPROCS PID USER COMMAND
4026531834 time 44 1452 renzev -bash
4026531835 cgroup 44 1452 renzev -bash
4026531836 pid 42 1452 renzev -bash
4026531837 user 41 1452 renzev -bash
4026531838 uts 44 1452 renzev -bash
4026531839 ipc 44 1452 renzev -bash
4026531840 net 42 1452 renzev -bash
4026531841 mnt 41 1452 renzev -bash
4026532233 user 1 11485 renzev xdg-dbus-proxy --args=42
4026532254 mnt 1 11485 renzev xdg-dbus-proxy --args=42
4026532256 mnt 2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532257 pid 2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532258 net 2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532391 user 2 11488 renzev bwrap --args 40 com.github.tchx84.
名前空間に移動してマウントされたファイルシステムを調べると、次のようになります~/mnt
。「default」ネームスペースからマウント解除した後もまだマウントされています。:
sudo nsenter -t 11485 -m bash
mount | grep mnt
/dev/mapper/my_crypt on /home/renzev/mnt type vfat (ro,nosuid,nodev,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
名前空間内でデバイスを手動でアンマウントしようとすると、次のような興味深い出力が表示されます。
mountpoint /home/renzev/mnt
/home/renzev/mnt is a mountpoint
umount /home/renzev/mnt
umount: /home/renzev/mnt: not mounted.
システムの詳細
無効なLinuxです。 cryptsetup 2.6.1フラグ:UDEV BLKID KEYRING KERNEL_CAPI。フラットパック1.15.6。 Linux 6.3.13_1。
質問
すべてのFlatpakアプリケーションを閉じずにLUKSデバイスをどのように終了しますか?
答え1
この問題を解決するのを助けてくれた@ABに感謝します!この回答が今後他の人に役立つことを願って、非常に徹底的に説明するよう努力します。スタート!
紹介する
名前空間は、プロセス間の分離を可能にするLinuxの機能です。さまざまな種類のシステムリソースを分離するために使用されるさまざまな種類の名前空間があります。この問題で私たちが興味を持っているのは、マウントされmount namespaces
たブロックデバイス(ドライブ、暗号化されたボリューム、ディスクイメージ、CD、DVDなど)のさまざまなプロセスにさまざまなビューを提供することです。 Flatpakはサンドボックス機能の一部としてマウントネームスペースを使用します。
Linuxでは、マウントには「伝播」という属性があります。これはprivate
またはshared
。 2つの違いをよく理解していませんが、重要なのは、ほとんどの最新のLinuxディストリビューションでは、ルートファイルシステム/
ですshared
。
質問
私のシステムでは、ルートファイルシステムprivate
がshared
。何らかの理由で、これは暗号化されたボリュームをアンマウントしようとすると、flatpakによって生成されたさまざまなマウント名前空間内でアンマウントイベントが伝播されないことを意味します。したがって、ボリュームが「デフォルト」ネームスペースからアンマウントされても、flatpakのネームスペース内にマウントされたままになり、LUKSパーティションを使用中に保ち、そのボリュームに対する操作を防ぎcryptsetup
ますclose
。
解決策
解決策は、電波を介してインストールされて/
いることを確認することですshared
。shared
ルートファイルシステムエントリにオプションを追加して再起動します/etc/fstab
。たとえば、修正前の私の/etc/fstab
姿は次のようになりました。
PARTLABEL=VOID_ROOT / btrfs lazytime,noatime,autodefrag,compress=zstd:3,discard=async,space_cache=v2,ssd 0 1
PARTLABEL=VOID_SWAP none swap sw 0 0
PARTLABEL=VOID_ESP /mnt/esp vfat defaults,noauto 0 0
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
修正したら、次のようになります。
PARTLABEL=VOID_ROOT / btrfs shared,lazytime,noatime,autodefrag,compress=zstd:3,discard=async,space_cache=v2,ssd 0 1
PARTLABEL=VOID_SWAP none swap sw 0 0
PARTLABEL=VOID_ESP /mnt/esp vfat defaults,noauto 0 0
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0