質問

質問

質問

cryptsetup closeflatpakアプリがバックグラウンドで実行されていると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-proxyFlatpakアプリケーションを起動したときに「デフォルト」ネームスペースからアンマウントされた場合でも、何らかの理由でLUKSデバイスのファイルシステムをマウントされたままにする新しいネームスペースから呼び出されるプロセスが作成されるようですmnt。その後も同じでした。たとえば、lsnsflatsealを開始する前の出力は次のようになります。

        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

質問

私のシステムでは、ルートファイルシステムprivateshared。何らかの理由で、これは暗号化されたボリュームをアンマウントしようとすると、flatpakによって生成されたさまざまなマウント名前空間内でアンマウントイベントが伝播されないことを意味します。したがって、ボリュームが「デフォルト」ネームスペースからアンマウントされても、flatpakのネームスペース内にマウントされたままになり、LUKSパーティションを使用中に保ち、そのボリュームに対する操作を防ぎcryptsetupますclose

解決策

解決策は、電波を介してインストールされて/いることを確認することですsharedsharedルートファイルシステムエントリにオプションを追加して再起動します/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

関連情報