Pumountが開かないデバイスを閉じるのはなぜですか?

Pumountが開かないデバイスを閉じるのはなぜですか?

起動時に/etc/crypttabによって開かれるluksデバイスがあります。 lsblkは次のようになります。

sdc                                             8:32   1 114,6G  0 disk  
└─luks-672dcc74-d002-47dc-b61b-525baf91dc7c   253:2    0 114,6G  0 crypt 

次のようにデバイスを取り付けます。

pmount /dev/mapper/luks-672dcc74-d002-47dc-b61b-525baf91dc7c

次のように削除します(両方とも機能します)。

pumount /dev/mapper/luks-672dcc74-d002-47dc-b61b-525baf91dc7c
pumount /media/mapper_luks-672dcc74-d002-47dc-b61b-525baf91dc7c

ただし、 pumount lsblk は次のようになります。

sdc                                             8:32   1 114,6G  0 disk

PumountがLuksデバイスをシャットダウンしたのはなぜですか? pumount のマニュアルページには次のものがあります。

Normally, pumount will not luksClose (see cryptsetup(1)) a device pmount did not open.

luksデバイスは、pmountではなく起動時に/ etc / crypttabによって開きます! pumountがluksデバイスを閉じるのはなぜですか?これはバグですか?

私はDebian Bullseyeを使っています。

ベストアンサー1

メモ:私は完全に初めてで、pumountテストできるDebianのインストールもありません。私はDebianからソースコードを受け取りました。そしてそこで発見したことを元にとんでもない家庭をするようになるのに…

pumount--luks-forceLUKSデバイスが開いていない場合(マンページですでに引用されているように)、デバイスを閉じるオプションがあります。

ところで、ソースコードを見ると実行にバグがあるようです。

したがって、pumount.c解析されたいくつかのオプションは次のとおりです。

int luks_force = 0;
[...]
       { "luks-force", 0, NULL, 'L'},
[...]
            case 'L':        luks_force = 1; break;

...そうです!このオプションはluks_force = 1変数を設定します。それ以外の場合はゼロに初期化されます。

しかし、それはまったく問題ではありません。なぜなら…変数はどこにも使われないからです。

これにはluks.c次のコードがあります。

void
luks_release( const char* device, int force )
{
  if(force || luks_has_lockfile(device)) {
    spawnl( CRYPTSETUP_SPAWN_OPTIONS,
            CRYPTSETUP, CRYPTSETUP, "luksClose", device, NULL );
    luks_remove_lockfile(device);
[...]

luksCloseしたがって、forceロックファイルが存在するかtrueの場合、これが発生します。

この関数はpumount.c次のように呼び出されます。

/* release LUKS device, if appropriate */
luks_release( device, 1 );

したがって、何をしてもforce常に1に設定すると、LUKSデバイスはオフになります。

最後の行は、おそらくluks_force1の代わりに変数を使用する必要がある場所です。

おすすめ記事