`modprobe fuse` と `modprobe loop` を永続化するにはどうすればよいですか?

`modprobe fuse` と `modprobe loop` を永続化するにはどうすればよいですか?

以前は問題にならなかったのですが、今は問題になっています。特に大きな変更はしていないので、アップデートによって壊れたのかもしれません。

VeraCryptを実行すると、ループデバイスを設定できないというエラーが表示され、 を実行するように提案されますmodprobe fuse。 を実行しても機能しません。ただし、 を実行するとmodprobe fuse そして modprobe loop次回の再起動まで修正されます。

これらのモジュールは起動時に自動的にロードされるべきではないでしょうか? なぜそうではないのでしょうか? どうすれば作成できるのでしょうか?

答え1

fuseloop必要に応じて自動的にロードできます。

検索してみるとgrsecurityカーネルはこれをブロックする可能性があるしたがって、このアイデアがどれだけ優れているかについては意見の相違がありますが :-)、ほとんどのディストリビューションで使用されていると思います。

自動読み込みに一時的なバグがある場合でも、起動時にfuseと を読み込むことは問題ありません。自動読み込みメカニズムと競合することはありません。を誰が呼び出しても、の行loopに従ってモジュール オプションが設定されるはずです。options/etc/modprobe.d/modprobe

例えば、確実にloopロードされるようにする

echo 'loop' | sudo tee -a /etc/modules-load.d/modules.conf

自動ロードはどのように機能しますか? まず、/dev/fuseモジュールがロードされているかどうかに関係なく、ユーザー空間は起動時に静的に作成されます。現在のシステムのメカニズムは少し複雑です - を参照してください/lib/systemd/system/kmod-static-nodes.service。つまり、開こうとすることができるデバイス ノードがあります。開くと、カーネルは最初にモジュールをロードするように呼び出します。

私のシステムでは、適切なカーネルモジュールの読み込みをトリガーできるように静的に作成されるデバイスノードのリストは

$ cat /run/tmpfiles.d/kmod.conf
c! /dev/fuse 0600 - - - 10:229
c! /dev/btrfs-control 0600 - - - 10:234
c! /dev/loop-control 0600 - - - 10:237
d /dev/net 0755 - - -
c! /dev/net/tun 0600 - - - 10:200
c! /dev/ppp 0600 - - - 108:0
c! /dev/uinput 0600 - - - 10:223
c! /dev/uhid 0600 - - - 10:239
d /dev/vfio 0755 - - -
c! /dev/vfio/vfio 0600 - - - 10:196
c! /dev/vhci 0600 - - - 10:137
c! /dev/vhost-net 0600 - - - 10:238
c! /dev/vhost-vsock 0600 - - - 10:241
d /dev/snd 0755 - - -
c! /dev/snd/timer 0600 - - - 116:33
d /dev/snd 0755 - - -
c! /dev/snd/seq 0600 - - - 116:1
c! /dev/cuse 0600 - - - 10:203

(d行はディレクトリです)。

答え2

systemdスクリプトを使用して起動時にコマンドを実行することができます。次の内容のファイルを作成します。

modprobe fuse
modprobe loop

~/Documents/modprobe_startup.sh(または保存したい場所)にコピーします。実行可能にすることを忘れないでください。

chmod +x ~/Documents/modprobe_startup.sh

/lib/systemd/system/modprobe_startup.serviceここで、以下の内容のシンプルなsystemdサービスファイルを作成します。

[Unit]
Description=runs ~/Documents/modprobe_startup.sh

[Service]
Type=simple
ExecStart=/bin/bash /home/USERNAME/Documents/modprobe_startup.sh

[Install]
WantedBy=multi-user.target

USERNAME をシステムのユーザー名に置き換えることを忘れないでください。

インストールするには、

sudo cp /lib/systemd/system/modprobe_startup.service /etc/systemd/system/modprobe_startup.service
sudo chmod 644 /etc/systemd/system/modprobe_startup.service
systemctl enable modprobe_startup.service

再起動します。

関連情報