每次重新启动后删除 lib 模块文件夹

每次重新启动后删除 lib 模块文件夹

uname -r:4.13.0-16-generic(ubuntu 17.10 服务器)

我遇到一个问题,重启后 iptables 不起作用:

iptables-apply /etc/network/iptables
[ ok ] Stopping fail2ban (via systemctl): fail2ban.service.
Applying new iptables rules from '/etc/network/iptables'... modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.13.0-16-generic
iptables-restore v1.6.1: iptables-restore: unable to initialize table 'filter'

Error occurred at line: 3
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
failed.
Error: unknown error applying new iptables rules: /etc/network/iptables
Reverting to old iptables rules... done.

我尝试重新安装内核和 iptables:

apt install --reinstall linux-generic linux-image-4.13.0-16-generic linux-image-extra-4.13.0-16-generic linux-headers-4.13.0-16-generic iptables

当我重新安装它(无需重新启动)时,iptables 在服务重新启动后即可工作。

当我重新启动机器时,我再次遇到相同的错误。

我注意到每次重新启动后,以下文件夹都会消失:

/lib/modules/4.13.0-16-generic/kernel/net/ipv4/netfilter

ipv4 文件夹中只剩下 2 个文件:gre.ko udp_tunnel.ko

将丢失的文件复制到此位置不起作用,将在下次重新启动时删除。

知道如何解决这个问题吗?

答案1

我在 Ubuntu 16.04 上也得到了同样的结果。我没有解决办法,但我对为什么会发生这种情况有一些了解。在本书过程中,系统最初在基于 RAM 的文件系统上启动:initramfs。稍后在引导过程中,硬盘接管,但 initramfs 中的 module 目录被挂载到硬盘的 module 目录上。请注意, 的输出mount包括以下行:

copymods on /lib/modules type tmpfs (rw,relatime)

好的,对 /lib/modules 进行任何更改,例如通过执行

sudo apt-get install --reinstall linux-image-$(uname -r)

系统重启后将会丢失。那么这应该如何运作呢?好吧,当apt install命令添加新模块时,它应该在/usr/share/initramfs-tools/hooks.然后apt install调用运行的安装程序脚本update-initramfs会生成 CPIO 存档,/boot/initrd.img-(uname -r)该存档是您的 initramfs 映像,该映像现在应该包含 iptables 在系统重新启动时工作所需的模块。

错误在于相关条目实际上从未在中创建/usr/share/initramfs-tools/hooks,因此相关条目未在 initramfs 中创建,因而在系统重新启动时不会保留。

此时我被困住了。

答案2

正如 @scottwh2 所提到的,问题可能是copymodsramfs 卷安装在/lib/modules.要检查这一点,请运行mount | grep /lib/modules.

要删除它,请运行

apt remove cloud-initramfs-copymods

然后重新启动。

重新启动后,仔细检查该copymods条目是否已从mount.

答案3

我在 Ubuntu Server 16.04 上遇到了同样的问题。命令:

mount | grep /lib/modules

显示:

copymods on /lib/modules type tmpfs (rw,relatime)

因此,首先我尝试删除 cloud-initramfs-copymods,但该软件包未安装在我的系统中。然后我安装了它:

apt-get install cloud-initramfs-copymods

之后我就把它删除了:

apt-get remove cloud-initramfs-copymods

重新启动后,我的服务器 copymods 消失了,并且重新启动后模块不会被删除!所以感谢斯科特WH2假口袋我成功解决了我的问题。

相关内容