标签: linux-kernel

观察内核空间中的硬盘写入(使用驱动程序/模块)

如果这篇文章有点密集/混乱,请提前道歉,但我很难更好地制定它......基本上,我想研究硬盘写入时会发生什么,我想知道:

  • 我在下面的理解是否正确 - 如果不是,我哪里出错了?
  • 在磁盘写入期间,是否有更好的工具来“捕获”有关 PC 上发生的所有方面的日志数据?

更详细地说 - 首先,我使用的操作系统是:

$ uname -a
Linux mypc 2.6.38-16-generic #67-Ubuntu SMP Thu Sep 6 18:00:43 UTC 2012 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

所以,我有以下简单的(例如,跳过通常的操作失败检查)用户空间 C 程序,wtest.c

#include <stdio.h>
#include <fcntl.h>  // O_CREAT, O_WRONLY, S_IRUSR

int main(void) {
  char filename[] = "/tmp/wtest.txt";
  char buffer[] = "abcd";
  int fd;
  mode_t perms = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH;

  fd = open(filename, O_RDWR|O_CREAT, perms);
  write(fd,buffer,4);
  close(fd);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用gcc -g -O0 -o wtest wtest.c. 现在,由于我正在尝试写入/tmp,我注意到它是根目录下的一个目录/ …

debugging trace linux-kernel

13
推荐指数
1
解决办法
3450
查看次数

ENOANO(无阳极)的用途是什么?

这个问题只是出于无聊的好奇心,但我怀疑其他人也会好奇。搜索 errno.h(Linux 2.6),我发现 ENOANO “No Anode”。没有“无阴极”错误的迹象。查看内核源代码索引,它似乎没有被称为阳极的设备使用,只是一些晦涩的设备驱动程序故意将其用作奇怪的错误代码。谷歌搜索没有发现任何有趣的东西。

这可能是一个笑话吗?它是否在诸如 POSIX 之类的标准文档中定义,但没有用?

history linux-kernel exit-status

13
推荐指数
1
解决办法
1880
查看次数

如何在 Linux 上启用随机 PID?

我目前正在从安全角度比较 OpenBSD、FreeBSD 和 Linux 上的随机 PID 实现。

只要考虑到 OpenBSD 和 FreeBSD,我的工作就完成了。然而,虽然这里的答案指出仅通过sysctl设置就可以在 Linux 上启用随机 PID ,但我无法确定它是哪个设置。

网上的研究只导致主流Linux内核拒绝补丁和讨论,也没有出现在grsecurity特性中(很明显在我的Linux机器上PID到处都是增量的,sysctl似乎没有参数名称相关,并在其中搜索了一些内核源代码没有显示任何相关信息)。

PID 随机化真的可以在 Linux 上使用吗?

security process linux-kernel

13
推荐指数
1
解决办法
2528
查看次数

NMI 收到不明原因 20 — 您是否启用了奇怪的省电模式?

我正在使用 Debian GNU/Linux 7.8(喘气)。今天在运行我的 MATLAB 程序时,我在终端中收到了这条消息。

Message from syslogd@sas21 at Jul 18 16:40:49 ...
 kernel:[1747708.091929] Uhhuh. NMI received for unknown reason 20 on CPU 4.

Message from syslogd@sas21 at Jul 18 16:40:49 ...
 kernel:[1747708.091932] Do you have a strange power saving mode enabled?

Message from syslogd@sas21 at Jul 18 16:40:49 ...
 kernel:[1747708.091932] Dazed and confused, but trying to continue
Run Code Online (Sandbox Code Playgroud)

我还记得中间听到了一些哔声。

这是什么意思?我应该怎么做?

linux power-management linux-kernel

13
推荐指数
1
解决办法
2万
查看次数

找不到内核 3.10.0-229.el7.x86_64 的内核头文件

当我service vboxdrv setup在 CentOS 7 终端中键入命令时,出现以下错误:

Your kernel headers for kernel 3.10.0-229.el7.x86_64 cannot be found  
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

当我通过键入打开日志文件时vi /var/log/vbox-install.log,内容是:

Uninstalling modules from DKMS
  removing old DKMS module vboxhost version  5.0.4

------------------------------
Deleting module version: 5.0.4
completely from the DKMS tree.
------------------------------
Done.
Attempting to install using DKMS

Creating symlink /var/lib/dkms/vboxhost/5.0.4/source ->
                 /usr/src/vboxhost-5.0.4

DKMS: add completed.
Failed to install using DKMS, attempting to install without
Makefile:185: *** Error: unable to find the sources of your current Linux kernel. …
Run Code Online (Sandbox Code Playgroud)

kernel terminal centos virtualbox linux-kernel

13
推荐指数
1
解决办法
5万
查看次数

控制台中有 256 种颜色 (tty)

假设,我有一个没有X server. 我只能从控制台登录。看来,默认情况下 linux 控制台仅支持 8 种颜色:

# tput colors
8
Run Code Online (Sandbox Code Playgroud)

是否可以在控制台中使用 256 种颜色,就像我在终端仿真器(即终结器)中使用的一样?

在谷歌搜索时,我发现了许多类似的问题(其中许多已经超过 10 年),但没有明确的答案。有人建议使用帧缓冲区,其他人建议将 TERM 参数附加到内核引导选项。

目前,我只传递一个额外的选项作为内核启动参数:

append="video=1280x720"
Run Code Online (Sandbox Code Playgroud)

我相信传递视频分辨率仅适用于kernel mode setting支持的现代内核,但我不确定。

是否可以在现代 linux 控制台 (tty) 中使用 256 种颜色

如何?

我正在使用内核 4.1 的 Debian Wheezy

更新:

根据@muru 的建议,我尝试了fbterm. 虽然它可以使用 256 种颜色,但它的字体非常难看/乱码。此外,左下角有一个不断闪烁的光标,我觉得这很分散注意力。

我可以在没有 fbterm/framebuffer 的情况下在控制台中使用 256 色吗?

控制台中的 8 色限制从何而来?

colors tty console linux-kernel

13
推荐指数
1
解决办法
1万
查看次数

什么阻止发行版使用最新的 Linux 内核?

大多数 Linux 发行版都附带特定的内核版本,并且仅在点发布 ( x.y.zto x.y.(z+1)) 和安全更新时对其进行更新。

另一方面,我知道 Linux 有一个非常严格的政策,即不更改内核 ABI 并且永远不会破坏用户空间。事实上,Linus 已经有许多针对想要(有意或无意地)以非向后兼容方式更改内核的开发人员的公开发脾气。

我不明白为什么发行版使用“稳定”内核而不是总是更新到最新的内核。这不是批评,我只是想知道原因。

linux linux-kernel

13
推荐指数
2
解决办法
2116
查看次数

Linux 交换的静默磁盘错误和可靠性

我的理解是硬盘驱动器和 SSD 在驱动器内部实现了一些基本的错误纠正,并且大多数 RAID 配置(例如 mdadm)将依赖于此来决定驱动器何时无法纠正错误并需要脱机。但是,这取决于存储在其错误诊断中是否 100% 准确。事实并非如此,像两驱动器 RAID-1 镜像这样的常见配置将容易受到攻击:假设一个驱动器上的某些位被悄悄损坏并且驱动器没有报告读取错误。因此,像 btrfs 和 ZFS 这样的文件系统实现了自己的校验和,以免信任有问题的驱动器固件、故障 SATA 电缆等。

同样,RAM 也可能存在可靠性问题,因此我们有 ECC RAM 来解决这个问题。

我的问题是:在两盘配置(即使用主线内核驱动程序)上,保护 Linux 交换文件免受静默损坏/位腐烂没有被驱动器固件捕获的规范方法什么?在我看来,这里缺少端到端保护的配置(例如 btrfs 提供的配置)在某种程度上否定了 ECC RAM 带来的安心。但我想不出一个好方法:

  • btrfs 根本不支持交换文件。您可以从 btrfs 文件设置循环设备并对其进行交换。但这有问题:
  • Linux 上的 ZFS 允许使用 ZVOL 作为交换,我想这可以工作:http: //zfsonlinux.org/faq.html#CanIUseaZVOLforSwap - 然而,从我的阅读来看,ZFS 通常对内存有要求,并让它在交换中工作-only 应用程序听起来像一些工作来解决它。我认为这不是我的第一选择。为什么你必须使用一些树外内核模块来获得可靠的交换是我无法理解的 - 在这个时代,肯定有一种方法可以用大多数现代 Linux 发行版/内核来实现这一点?
  • Linux 内核邮件列表上实际上有一个线程,带有补丁可以在内存管理器本身内启用校验和,这正是我在这个问题中讨论的原因:http : //thread.gmane.org/gmane.linux.kernel/989246 -不幸的是,据我所知,由于我不知道的原因,补丁已经死了,并且再也没有进入上游。太糟糕了,这听起来像是一个不错的功能。另一方面,如果您将交换放在 RAID-1 上 - 如果损坏超出了校验和修复的能力,您会希望内存管理器在恐慌或其他之前尝试从另一个驱动器读取,这是可能超出了内存管理器应该做的范围。

总之:

  • RAM 有 ECC 来纠正错误
  • 永久存储上的文件有 btrfs 来纠正错误
  • 交换有??​​?<---这是我的问题

linux swap error-handling linux-kernel

13
推荐指数
1
解决办法
2009
查看次数

Debian Linux Kernel 和 Linux-libre 有什么区别?

在自由相关问题方面,Debian Linux Kernel 和 Linux-libre 之间有什么区别?

我知道 Debian Linux 内核可以加载非自由模块,而在 Linux-libre 中它们已被列入黑名单。

debian linux-kernel linux-libre

13
推荐指数
1
解决办法
6220
查看次数

iommu=soft 的含义是什么?

我有一台新的笔记本电脑(联想 A485)在工作,几乎没有问题。之后它会打印AMD-Vi: IOAPIC[32] not in IVRS table和内核恐慌。到目前为止,我已经找到了几种方法来启动和运行系统。

  • noapic - 糟糕的性能和高温,所以不是一个很好的方法
  • amd_iommu=off - 也不理想
  • ivrs_ioapic[32]=00:14.0 ivrs_ioapic[33]=00:00.2 - 这似乎工作正常
  • iommu=soft

我的问题是关于iommu=soft. 我不确定它到底是做什么的。这种模式的含义是什么?什么更可取,覆盖 IVRS 表或 iommu=soft?

linux linux-kernel amd iommu

13
推荐指数
1
解决办法
2万
查看次数