我在重新编译内核时遇到了麻烦。下载源码包,解压运行
fakeroot make-kpkg kernel_image
Run Code Online (Sandbox Code Playgroud)
导致我出错
[...]
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
CHK include/generated/package.h
UPD include/generated/package.h
CC kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
Run Code Online (Sandbox Code Playgroud)
该问题可以通过更改使用 获得的内核配置来解决make menuconfig
。
如何摆脱这个错误并成功编译
我有一台 HP DL380G9 服务器,上面安装了两个独立的 nvidia 显卡,运行 RHEL 6 和内核 2.6.32-573。两张卡具有相同的芯片组 (NV117),但型号不同。K620(插槽 5 地址 88:00.0)、K2200(插槽 4 地址 84:00.0)。K2200 是 Linux 选择的用于输出 plymouth 和引导消息的卡。
交换卡会导致 HP 服务器 BIOS 出现页面错误,即使在清除 CMOS 和 BIOS 设置之后也是如此。换回卡解决了这个问题。BIOS 中没有选择主独立显卡的选项。Linux 似乎会选择 PCI 总线地址最低的显卡。
是否有内核命令行选项或其他一些配置文件来为默认的 pre-X11 显示器选择不同的显卡?
我有一台 IBM x3850 类型 8864 机器,我可以使用 2.6.32 内核成功启动,但是当我尝试使用 3.10 内核或更新内核时,内核无法初始化所有 PCI 插槽(我可以(手动)修复此问题,见下文) :
pci 0000:19:00.0: BAR 14: can't assign mem (size 0x1a00000)
pci 0000:19:00.0: BAR 13: can't assign io (size 0x3000)
pci 0000:19:00.0: BAR 14: can't assign mem (size 0x1600000)
pci 0000:19:00.0: BAR 13: can't assign io (size 0x3000)
pci 0000:1a:00.0: BAR 14: can't assign mem (size 0x1600000)
pci 0000:1a:00.0: BAR 13: assigned [io 0x7000-0x8fff]
pci 0000:1b:02.0: BAR 14: can't assign mem (size 0xa00000)
pci 0000:1b:04.0: BAR 14: can't assign …
Run Code Online (Sandbox Code Playgroud) 根据https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
conf/all/* is special, changes the settings for all interfaces
Run Code Online (Sandbox Code Playgroud)
forwarding - BOOLEAN
Enable IP forwarding on this interface. This controls whether packets
received _on_ this interface can be forwarded.
Run Code Online (Sandbox Code Playgroud)
ip_forward - BOOLEAN
0 - disabled (default)
not 0 - enabled
Forward Packets between interfaces.
This variable is special, its change resets all configuration
parameters to their default state (RFC1122 for hosts, RFC1812
for routers)
Run Code Online (Sandbox Code Playgroud)
因此,net.ipv4.conf.all.forwarding=0
禁用所有接口上的 IPv4 数据包转发,与net.ipv4.ip_forward=0
禁用所有接口上的 IPv4 数据包转发,与禁用所有接口上的 IPv4 数据包转发
net.ipv4.conf.all.forwarding
任何人都可以解释一下内核参数和内核参数之间的区别吗net.ipv4.ip_forward …
我的各种方式之间的混淆LUKS
/ dmcrypt
/cryptsetup
丢弃/ TRIM操作可以通过Linux的内核命令行来实现。
rd.luks.allow-discards
允许在所有 LUKS 分区上使用丢弃 (TRIM) 请求。
该systemd-cryptsetup-generator
手册页
luks.options=, rd.luks.options=
... 如果只指定了没有 UUID 的选项列表,则它们适用于其他地方未指定的任何 UUID,并且 /etc/crypttab 中没有条目。...
此处rd.luks.options=discard
推荐该参数。
关于 LUKS 和 SSD的Arch wiki 部分 显示了第三个以冒号分隔的字段:
cryptdevice=/dev/sdaX:root:allow-discards
问题:
discard
和 和有allow-discards
什么区别?前者是强制性的,后者是可选的吗?luks.options=
或rd.luks.options=
申请给定cryptdevice=/dev/sda2
(例如不是 UUID)?如果cryptdevice=
给了一个 UUID,那算不算“在别处指定的”?luks.options=
或rd.luks.options=
覆盖/添加/添加如果cryptsetup=
已经给出了选择?rd.luks.allow-discards
如果到处都需要 TRIM,那么使用似乎最简单的方法有什么缺点吗?我们知道 sysctl 命令可以通过以下方式更改内核参数:
# sysctl -w kernel.domainname="example.com"
Run Code Online (Sandbox Code Playgroud)
或直接编辑/proc/sys
目录中的文件。对于持久更改,必须将参数写入/etc/sysctl.d/<moduleName>.conf
文件,如下所示:
# echo kernel.domainname="example.com" > /etc/sysctl.d/domainname.conf
Run Code Online (Sandbox Code Playgroud)
但是,我们也可以使用 modprobe 命令更改内核参数:
# modprobe kernel domainname="example.com"
Run Code Online (Sandbox Code Playgroud)
然后是/etc/modprobe.d
目录中的 modprobe.conf 文件,它存在于多个位置:/etc/modprobe.d
和/usr/lib/modprobe.d
. 它包含多个.conf
文件,可以在模块的相应 conf 文件中提供选项,如下所示:
options kernel domainname="example.com"
Run Code Online (Sandbox Code Playgroud)
那么,每种方法之间有什么区别呢?在什么具体情况下应该使用哪种方法?
我拥有 8GB RAM Dell XPS13 9343;RAM的数量是这台电脑最大的痛点,它焊接在主板上。尽管 CPU 支持更多 RAM,但由于主板设计,即使通过固件修改重新焊接更大的内存也不是一种选择。所以为了让这台电脑仍然有用,我用更快的 M.2 NVMe 替换了 M.2 SATA 磁盘,并添加了两个额外的交换文件。
我的互联网浏览标准配置是 8GM RAM + 8GM 交换分区,而按需我有两个额外的交换文件驻留在 ext4/(root) 上。这给了我总共 32GB 的交换空间。还值得一提的是,包括所有交换在内的所有文件系统都驻留在加密的 LUKS + LVM 上。这是故意的,因为我不希望在计算机关闭时暴露我的 RAM。
这种设置通常有效;当我启用大量内存占用(通常是基于 Java + 浏览器的内容,偶尔是单个虚拟机)时,我只打开两个交换文件,在启动所有需要的应用程序后,总负载不超过 20% CPU 和总磁盘我/O 不超过 20M/s。
现在问题部分:整个解决方案偶尔 - 每周一次,当我每周使用内存密集型任务几次时变得不稳定/不可靠。有时它会重新启动 - 不确定是否是某些硬件问题的内核恐慌,但图形卡缓冲区损坏不到一秒钟,然后计算机重新启动。由于戴尔的固件,我无法使用 kdump-tools 来调试内核崩溃,我的 UEFI 无法识别 NVMe 磁盘,我只需要在引导阶段将 rEFInd 放在 USB 上。第二个问题是,偶尔当 CPU 负载增加并且我在后台播放音乐时,它会随着我的 X11 开始卡顿。
虽然有些部分是预期的,因为这不是不错的硬件,但我担心这种负载会影响音频缓冲区,因此我正在寻找一种方法来使其更稳定。恕我直言,负载应该只影响用户空间应用程序,而不会产生那些系统范围的问题。
我在它上面使用 Ubuntu,我知道存在一个低延迟内核,但想知道我是否可以先测试一些可以在运行时来回切换的更轻量级的解决方案。喜欢与文件描述符数量或通过 cgroups 分配一些优先级相关的事情吗?
我首先通过研究 的参数发现这一点,earlycon
但发现 的选项console
看起来几乎相同。两者均如下所示,并取自此来源:
从文档中console
我们有:
console= [KNL] Output console device and options.
tty<n> Use the virtual console device <n>.
ttyS<n>[,options]
ttyUSB0[,options]
Use the specified serial port. The options are of
the form "bbbbpnf", where "bbbb" is the baud rate,
"p" is parity ("n", "o", or "e"), "n" is number of
bits, and "f" is flow control ("r" for RTS or
omit it). Default is "9600n8".
See Documentation/serial-console.txt for more
information. See
Documentation/networking/netconsole.txt for …
Run Code Online (Sandbox Code Playgroud) 这两个文件都用于将参数传递给内核。那么两者到底有什么区别呢?每个文件的用途是什么?
是否可以使用内核命令行(在 中可见的那些)设置 Linux 内核sysctl
设置(那些通常在 中设置)?/etc/sysctl.d
/proc/cmdline
(使用grub
配置文件/etc/default/grub
变量GRUB_CMDLINE_LINUX="..."
。)
linux-kernel ×4
kernel ×3
linux ×3
sysctl ×2
command-line ×1
cryptsetup ×1
dm-crypt ×1
dmesg ×1
forwarding ×1
graphic-card ×1
grub ×1
grub2 ×1
kali-linux ×1
kernel-panic ×1
luks ×1
modprobe ×1
networking ×1
parameter ×1
pci ×1
rhel ×1
swap ×1
uart ×1
ubuntu ×1