mirror of
https://github.com/LCTT/TranslateProject.git
synced 2026-08-23 04:03:29 +08:00
@@ -0,0 +1,109 @@
|
||||
使用统一阻止列表和白名单来更新主机文件
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
网上有许多持续维护的含有不同垃圾域的有用列表。将这些列表复制到你的主机文件中可以轻松阻止大量的域,你的系统将根本不用去连接它们。此方法可以在不安装浏览器插件的情况下工作,并且将为系统上任何浏览器(和任何其他程序)提供阻止操作。
|
||||
|
||||
在本教程中,我将向你展示如何在 Linux 中启动并运行 Steven Black 的[统一主机脚本][1]。该脚本将使用来自多个来源的最新已知的广告服务器、网络钓鱼网站和其他网络垃圾的地址来更新你的计算机主机文件,同时提供一个漂亮、干净的方式来管理你自己的黑名单/白名单,其分别来自于该脚本管理的各个列表。
|
||||
|
||||
在将 30,000 个域放入主机文件之前,需要注意两点。首先,这些巨大的列表包含可能需要解除封锁的服务器,以便进行在线购买或其他一些临时情况。如果你弄乱了你的主机文件,你要知道网上的某些东西可能会出现问题。为了解决这个问题,我将向你展示如何使用方便的打开/关闭开关,以便你可以快速禁用你的阻止列表来购买喜马拉雅盐雾灯(它是等离子灯)。我仍然认为这些列表的目的之一是将所有的一切都封锁(有点烦人,直到我想到了做一个关闭开关)。如果你经常遇到你需要的服务器被阻止的问题,只需将其添加到白名单文件中即可。
|
||||
|
||||
第二个问题是性能受到了轻微的影响, 因为每次调用一个域时, 系统都必须检查整个列表。只是有一点点影响, 而没有大到让我因此而放弃黑名单,让每一个连接都通过。你具体要怎么选择自己看着办。
|
||||
|
||||
主机文件通过将请求定向到 127.0.0.1 或 0.0.0.0(换句话说定向到空地址)来阻止请求。有人说使用 0.0.0.0 是更快,问题更少的方法。你可以将脚本配置为使用 `-ip nnn.nnn.nnn.nnn` 这样的 ip 选项来作为阻止 ip,但默认值是 0.0.0.0,这是我使用的值。
|
||||
|
||||
我曾经将 Steven Black 的脚本做的事每隔一段时间就手动做一遍,进到每一个站点,将他们的列表拷贝/粘贴到我的主机文件中,做一个查找替换将其中的 127 变成 0 等等。我知道整件事情可以自动化,这样做有点傻,但我从来没有花时间解决这个问题。直到我找到这个脚本,现在这事已经是一个被遗忘的杂务。
|
||||
|
||||
让我们先下载一份最新的 Steven Black 的代码拷贝(大约 150MB),以便我们可以进行下一步。你需要安装 git,因此如果还没安装,进入到终端输入:
|
||||
|
||||
```
|
||||
sudo apt-get install git
|
||||
```
|
||||
|
||||
安装完之后,输入:
|
||||
|
||||
```
|
||||
mkdir unifiedhosts
|
||||
cd unifiedhosts
|
||||
git clone https://github.com/StevenBlack/hosts.git
|
||||
cd hosts
|
||||
```
|
||||
|
||||
当你打开了 Steven 的脚本时,让我们来看看有什么选项。该脚本有几个选项和扩展,但扩展我不会在这里提交,但如果你到了这一步并且你有兴趣,[readme.md][3] 可以告诉你所有你需要知道的。
|
||||
|
||||
你需要安装 python 来运行此脚本,并且与版本有关。要找到你安装的 Python 版本,请输入:
|
||||
|
||||
```
|
||||
python --version
|
||||
```
|
||||
|
||||
如果你还没安装 Python:
|
||||
|
||||
```
|
||||
sudo apt-get install python
|
||||
```
|
||||
|
||||
对于 Python 2.7,如下所示,输入 `python` 来执行脚本。对于 Python 3,在命令中的 `python` 替换成 `python3`。执行后,该脚本会确保它具有每个列表的最新版本,如果没有,它会抓取一个新的副本。然后,它会写入一个新的主机文件,包括了你的黑名单/白名单中的任何内容。让我们尝试使用 `-r` 选项来替换我们的当前的主机文件,而 `-a` 选项可以脚本不会问我们任何问题。回到终端:
|
||||
|
||||
```
|
||||
python updateHostsFile.py -r -a
|
||||
```
|
||||
|
||||
该命令将询问你的 root 密码,以便能够写入 `/etc/`。为了使新更新的列表处于激活状态,某些系统需要清除 DNS 缓存。在同一个硬件设备上,我观察到不同的操作系统表现出非常不同的行为,在没有刷新缓存的情况下不同的服务器变为可访问/不可访问所需的时间长度都不同。我已经看到了从即时更新(Slackware)到重启更新(Windows)的各种情况。有一些命令可以刷新 DNS 缓存,但是它们在每个操作系统甚至每个发行版上都不同,所以如果没有生效,只需要重新启动就行了。
|
||||
|
||||
现在,只要将你的个人例外添加到黑名单/白名单中,并且只要你想要更新主机文件,运行该脚本就好。该脚本将根据你的要求调整生成的主机文件,每次运行文件时会自动追加你额外的列表。
|
||||
|
||||
最后,我们来创建一个打开/关闭开关,对于打开和关闭功能每个都创建一个脚本,所以回到终端输入下面的内容创建关闭开关(用你自己的文本编辑器替换 leafpad):
|
||||
|
||||
```
|
||||
leafpad hosts-off.sh
|
||||
```
|
||||
|
||||
在新文件中输入下面的内容:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
sudo mv /etc/hosts /etc/hostsDISABLED
|
||||
```
|
||||
|
||||
接着让它可执行:
|
||||
|
||||
```
|
||||
chmod +x hosts-off.sh
|
||||
```
|
||||
|
||||
相似地,对于打开开关:
|
||||
|
||||
```
|
||||
leafpad hosts-on.sh
|
||||
```
|
||||
在新文件中输入下面的内容:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
sudo mv /etc/hostsDISABLED /etc/hosts
|
||||
```
|
||||
|
||||
最后让它可执行:
|
||||
|
||||
```
|
||||
chmod +x hosts-on.sh
|
||||
```
|
||||
|
||||
你所需要做的是为每个脚本创建一个快捷方式,标记为 HOSTS-ON 和 HOSTS-OFF,放在你能找到它们的地方。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.darrentoback.com/this-script-updates-hosts-files-using-a-multi-source-unified-block-list-with-whitelisting
|
||||
|
||||
作者:[dmt][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.darrentoback.com/about-me
|
||||
[1]:https://github.com/StevenBlack/hosts
|
||||
[2]:https://github.com/StevenBlack/hosts.git
|
||||
[3]:https://github.com/StevenBlack/hosts/blob/master/readme.md
|
||||
@@ -0,0 +1,267 @@
|
||||
使用 Kdump 检查 Linux 内核崩溃
|
||||
============================================================
|
||||
|
||||
> 让我们先看一下 kdump 的基本使用方法,和 kdump/kexec 在内核中是如何实现。
|
||||
|
||||

|
||||
|
||||
[kdump][16] 是获取崩溃的 Linux 内核转储的一种方法,但是想找到解释其使用和内部结构的文档可能有点困难。在本文中,我将研究 kdump 的基本使用方法,和 kdump/kexec 在内核中是如何实现。
|
||||
|
||||
[kexec][17] 是一个 Linux 内核到内核的引导加载程序,可以帮助从第一个内核的上下文引导到第二个内核。kexec 会关闭第一个内核,绕过 BIOS 或固件阶段,并跳转到第二个内核。因此,在没有 BIOS 阶段的情况下,重新启动变得更快。
|
||||
|
||||
kdump 可以与 kexec 应用程序一起使用 —— 例如,当第一个内核崩溃时第二个内核启动,第二个内核用于复制第一个内核的内存转储,可以使用 `gdb` 和 `crash` 等工具分析崩溃的原因。(在本文中,我将使用术语“第一内核”作为当前运行的内核,“第二内核” 作为使用 kexec 运行的内核,“捕获内核” 表示在当前内核崩溃时运行的内核。)
|
||||
|
||||
kexec 机制在内核以及用户空间中都有组件。内核提供了几个用于 kexec 重启功能的系统调用。名为 kexec-tools 的用户空间工具使用这些调用,并提供可执行文件来加载和引导“第二内核”。有的发行版还会在 kexec-tools 上添加封装器,这有助于捕获并保存各种转储目标配置的转储。在本文中,我将使用名为 distro-kexec-tools 的工具来避免上游 kexec 工具和特定于发行版的 kexec-tools 代码之间的混淆。我的例子将使用 Fedora Linux 发行版。
|
||||
|
||||
### Fedora kexec-tools 工具
|
||||
|
||||
使用 `dnf install kexec-tools` 命令在 Fedora 机器上安装 fedora-kexec-tools。在安装 fedora-kexec-tools 后可以执行 `systemctl start kdump` 命令来启动 kdump 服务。当此服务启动时,它将创建一个根文件系统(initramfs),其中包含了要挂载到目标位置的资源,以保存 vmcore,以及用来复制和转储 vmcore 到目标位置的命令。然后,该服务将内核和 initramfs 加载到崩溃内核区域内的合适位置,以便在内核崩溃时可以执行它们。
|
||||
|
||||
Fedora 封装器提供了两个用户配置文件:
|
||||
|
||||
1. `/etc/kdump.conf` 指定修改后需要重建 initramfs 的配置参数。例如,如果将转储目标从本地磁盘更改为 NFS 挂载的磁盘,则需要由“捕获内核”所加载的 NFS 相关的内核模块。
|
||||
2. `/etc/sysconfig/kdump` 指定修改后不需要重新构建 initramfs 的配置参数。例如,如果只需修改传递给“捕获内核”的命令行参数,则不需要重新构建 initramfs。
|
||||
|
||||
如果内核在 kdump 服务启动之后出现故障,那么“捕获内核”就会执行,其将进一步执行 initramfs 中的 vmcore 保存过程,然后重新启动到稳定的内核。
|
||||
|
||||
### kexec-tools 工具
|
||||
|
||||
编译 kexec-tools 的源代码得到了一个名为 `kexec` 的可执行文件。这个同名的可执行文件可用于加载和执行“第二内核”,或加载“捕获内核”,它可以在内核崩溃时执行。
|
||||
|
||||
加载“第二内核”的命令:
|
||||
|
||||
```
|
||||
# kexec -l kernel.img --initrd=initramfs-image.img –reuse-cmdline
|
||||
```
|
||||
|
||||
`--reuse-command` 参数表示使用与“第一内核”相同的命令行。使用 `--initrd` 传递 initramfs。 `-l` 表明你正在加载“第二内核”,其可以由 `kexec` 应用程序本身执行(`kexec -e`)。使用 `-l` 加载的内核不能在内核崩溃时执行。为了加载可以在内核崩溃时执行的“捕获内核”,必须传递参数 `-p` 取代 `-l`。
|
||||
|
||||
加载捕获内核的命令:
|
||||
|
||||
```
|
||||
# kexec -p kernel.img --initrd=initramfs-image.img –reuse-cmdline
|
||||
```
|
||||
|
||||
`echo c > /pros/sysrq-trigger` 可用于使内核崩溃以进行测试。有关 kexec-tools 提供的选项的详细信息,请参阅 `man kexec`。在转到下一个部分之前,请看这个 kexec_dump 的演示:
|
||||
|
||||
[kexec_dump_demo (YouTube)](https://www.youtube.com/embed/iOq_rJhrKhA?rel=0&origin=https://opensource.com&enablejsapi=1)
|
||||
|
||||
### kdump: 端到端流
|
||||
|
||||
下图展示了流程图。必须在引导“第一内核”期间为捕获内核保留 crashkernel 的内存。您可以在内核命令行中传递 `crashkernel=Y@X`,其中 `@X` 是可选的。`crashkernel=256M` 适用于大多数 x86_64 系统;然而,为崩溃内核选择适当的内存取决于许多因素,如内核大小和 initramfs,以及 initramfs 中包含的模块和应用程序运行时的内存需求。有关传递崩溃内核参数的更多方法,请参阅 [kernel-parameters 文档][18]。
|
||||
|
||||

|
||||
|
||||
您可以将内核和 initramfs 镜像传递给 `kexec` 可执行文件,如(`kexec-tools`)部分的命令所示。“捕获内核”可以与“第一内核”相同,也可以不同。通常,一样即可。Initramfs 是可选的;例如,当内核使用 `CONFIG_INITRAMFS_SOURCE` 编译时,您不需要它。通常,从第一个 initramfs 中保存一个不一样的捕获 initramfs,因为在捕获 initramfs 中自动执行 vmcore 的副本能获得更好的效果。当执行 `kexec` 时,它还加载了 `elfcorehdr` 数据和 purgatory 可执行文件(LCTT 译注:purgatory 就是一个引导加载程序,是为 kdump 定作的。它被赋予了“炼狱”这样一个古怪的名字应该只是一种调侃)。 `elfcorehdr` 具有关于系统内存组织的信息,而 purgatory 可以在“捕获内核”执行之前执行并验证第二阶段的二进制或数据是否具有正确的 SHA。purgatory 也是可选的。
|
||||
|
||||
当“第一内核”崩溃时,它执行必要的退出过程并切换到 purgatory(如果存在)。purgatory 验证加载二进制文件的 SHA256,如果是正确的,则将控制权传递给“捕获内核”。“捕获内核”根据从 `elfcorehdr` 接收到的系统内存信息创建 vmcore。因此,“捕获内核”启动后,您将看到 `/proc/vmcore` 中“第一内核”的转储。根据您使用的 initramfs,您现在可以分析转储,将其复制到任何磁盘,也可以是自动复制的,然后重新启动到稳定的内核。
|
||||
|
||||
### 内核系统调用
|
||||
|
||||
内核提供了两个系统调用:`kexec_load()` 和 `kexec_file_load()`,可以用于在执行 `kexec -l` 时加载“第二内核”。它还为 `reboot()` 系统调用提供了一个额外的标志,可用于使用 `kexec -e` 引导到“第二内核”。
|
||||
|
||||
`kexec_load()`:`kexec_load()` 系统调用加载一个可以在之后通过 `reboot()` 执行的新的内核。其原型定义如下:
|
||||
|
||||
```
|
||||
long kexec_load(unsigned long entry, unsigned long nr_segments,
|
||||
struct kexec_segment *segments, unsigned long flags);
|
||||
```
|
||||
|
||||
用户空间需要为不同的组件传递不同的段,如内核,initramfs 等。因此,`kexec` 可执行文件有助于准备这些段。`kexec_segment` 的结构如下所示:
|
||||
|
||||
```
|
||||
struct kexec_segment {
|
||||
void *buf;
|
||||
/* 用户空间缓冲区 */
|
||||
size_t bufsz;
|
||||
/* 用户空间中的缓冲区长度 */
|
||||
void *mem;
|
||||
/* 内核的物理地址 */
|
||||
size_t memsz;
|
||||
/* 物理地址长度 */
|
||||
};
|
||||
```
|
||||
|
||||
当使用 `LINUX_REBOOT_CMD_KEXEC` 调用 `reboot()` 时,它会引导进入由 `kexec_load` 加载的内核。如果标志 `KEXEC_ON_CRASH` 被传递给 `kexec_load()`,则加载的内核将不会使用 `reboot(LINUX_REBOOT_CMD_KEXEC)` 来启动;相反,这将在内核崩溃中执行。必须定义 `CONFIG_KEXEC` 才能使用 `kexec`,并且为 `kdump` 定义 `CONFIG_CRASH_DUMP`。
|
||||
|
||||
`kexec_file_load()`:作为用户,你只需传递两个参数(即 `kernel` 和 `initramfs`)到 `kexec` 可执行文件。然后,`kexec` 从 sysfs 或其他内核信息源中读取数据,并创建所有段。所以使用 `kexec_file_load()` 可以简化用户空间,只传递内核和 initramfs 的文件描述符。其余部分由内核本身完成。使用此系统调用时应该启用 `CONFIG_KEXEC_FILE`。它的原型如下:
|
||||
|
||||
```
|
||||
long kexec_file_load(int kernel_fd, int initrd_fd, unsigned long
|
||||
cmdline_len, const char __user * cmdline_ptr, unsigned long
|
||||
flags);
|
||||
```
|
||||
|
||||
请注意,`kexec_file_load` 也可以接受命令行,而 `kexec_load()` 不行。内核根据不同的系统架构来接受和执行命令行。因此,在 `kexec_load()` 的情况下,`kexec-tools` 将通过其中一个段(如在 dtb 或 ELF 引导注释等)中传递命令行。
|
||||
|
||||
目前,`kexec_file_load()` 仅支持 x86 和 PowerPC。
|
||||
|
||||
#### 当内核崩溃时会发生什么
|
||||
|
||||
当第一个内核崩溃时,在控制权传递给 purgatory 或“捕获内核”之前,会执行以下操作:
|
||||
|
||||
* 准备 CPU 寄存器(参见内核代码中的 `crash_setup_regs()`);
|
||||
* 更新 vmcoreinfo 备注(请参阅 `crash_save_vmcoreinfo()`);
|
||||
* 关闭非崩溃的 CPU 并保存准备好的寄存器(请参阅 `machine_crash_shutdown()` 和 `crash_save_cpu()`);
|
||||
* 您可能需要在此处禁用中断控制器;
|
||||
* 最后,它执行 kexec 重新启动(请参阅 `machine_kexec()`),它将加载或刷新 kexec 段到内存,并将控制权传递给进入段的执行文件。输入段可以是下一个内核的 purgatory 或开始地址。
|
||||
|
||||
#### ELF 程序头
|
||||
|
||||
kdump 中涉及的大多数转储核心都是 ELF 格式。因此,理解 ELF 程序头部很重要,特别是当您想要找到 vmcore 准备的问题。每个 ELF 文件都有一个程序头:
|
||||
|
||||
* 由系统加载器读取,
|
||||
* 描述如何将程序加载到内存中,
|
||||
* 可以使用 `Objdump -p elf_file` 来查看程序头。
|
||||
|
||||
vmcore 的 ELF 程序头的示例如下:
|
||||
|
||||
```
|
||||
# objdump -p vmcore
|
||||
vmcore:
|
||||
file format elf64-littleaarch64
|
||||
Program Header:
|
||||
NOTE off 0x0000000000010000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**0 filesz
|
||||
0x00000000000013e8 memsz 0x00000000000013e8 flags ---
|
||||
LOAD off 0x0000000000020000 vaddr 0xffff000008080000 paddr 0x0000004000280000 align 2**0 filesz
|
||||
0x0000000001460000 memsz 0x0000000001460000 flags rwx
|
||||
LOAD off 0x0000000001480000 vaddr 0xffff800000200000 paddr 0x0000004000200000 align 2**0 filesz
|
||||
0x000000007fc00000 memsz 0x000000007fc00000 flags rwx
|
||||
LOAD off 0x0000000081080000 vaddr 0xffff8000ffe00000 paddr 0x00000040ffe00000 align 2**0 filesz
|
||||
0x00000002fa7a0000 memsz 0x00000002fa7a0000 flags rwx
|
||||
LOAD off 0x000000037b820000 vaddr 0xffff8003fa9e0000 paddr 0x00000043fa9e0000 align 2**0 filesz
|
||||
0x0000000004fc0000 memsz 0x0000000004fc0000 flags rwx
|
||||
LOAD off 0x00000003807e0000 vaddr 0xffff8003ff9b0000 paddr 0x00000043ff9b0000 align 2**0 filesz
|
||||
0x0000000000010000 memsz 0x0000000000010000 flags rwx
|
||||
LOAD off 0x00000003807f0000 vaddr 0xffff8003ff9f0000 paddr 0x00000043ff9f0000 align 2**0 filesz
|
||||
0x0000000000610000 memsz 0x0000000000610000 flags rwx
|
||||
```
|
||||
|
||||
在这个例子中,有一个 note 段,其余的是 load 段。note 段提供了有关 CPU 信息,load 段提供了关于复制的系统内存组件的信息。
|
||||
|
||||
vmcore 从 `elfcorehdr` 开始,它具有与 ELF 程序头相同的结构。参见下图中 `elfcorehdr` 的表示:
|
||||
|
||||

|
||||
|
||||
`kexec-tools` 读取 `/sys/devices/system/cpu/cpu%d/crash_notes` 并准备 `CPU PT_NOTE` 的标头。同样,它读取 `/sys/kernel/vmcoreinfo` 并准备 `vmcoreinfo PT_NOTE` 的标头,从 `/proc/iomem` 读取系统内存并准备存储器 `PT_LOAD` 标头。当“捕获内核”接收到 `elfcorehdr` 时,它从标头中提到的地址中读取数据,并准备 vmcore。
|
||||
|
||||
#### Crash note
|
||||
|
||||
Crash notes 是每个 CPU 中用于在系统崩溃的情况下存储 CPU 状态的区域;它有关于当前 PID 和 CPU 寄存器的信息。
|
||||
|
||||
#### vmcoreinfo
|
||||
|
||||
该 note 段具有各种内核调试信息,如结构体大小、符号值、页面大小等。这些值由捕获内核解析并嵌入到 `/proc/vmcore` 中。 `vmcoreinfo` 主要由 `makedumpfile` 应用程序使用。在 Linux 内核,`include/linux/kexec.h` 宏定义了一个新的 `vmcoreinfo`。 一些示例宏如下所示:
|
||||
|
||||
* `VMCOREINFO_PAGESIZE()`
|
||||
* `VMCOREINFO_SYMBOL()`
|
||||
* `VMCOREINFO_SIZE()`
|
||||
* `VMCOREINFO_STRUCT_SIZE()`
|
||||
|
||||
#### makedumpfile
|
||||
|
||||
vmcore 中的许多信息(如可用页面)都没有用处。`makedumpfile` 是一个用于排除不必要的页面的应用程序,如:
|
||||
|
||||
* 填满零的页面;
|
||||
* 没有私有标志的缓存页面(非专用缓存);
|
||||
* 具有私有标志的缓存页面(专用缓存);
|
||||
* 用户进程数据页;
|
||||
* 可用页面。
|
||||
|
||||
此外,`makedumpfile` 在复制时压缩 `/proc/vmcore` 的数据。它也可以从转储中删除敏感的符号信息; 然而,为了做到这一点,它首先需要内核的调试信息。该调试信息来自 `VMLINUX` 或 `vmcoreinfo`,其输出可以是 ELF 格式或 kdump 压缩格式。
|
||||
|
||||
典型用法:
|
||||
|
||||
```
|
||||
# makedumpfile -l --message-level 1 -d 31 /proc/vmcore makedumpfilecore
|
||||
```
|
||||
|
||||
详细信息请参阅 `man makedumpfile`。
|
||||
|
||||
### kdump 调试
|
||||
|
||||
新手在使用 kdump 时可能会遇到的问题:
|
||||
|
||||
#### `Kexec -p kernel_image` 没有成功
|
||||
|
||||
* 检查是否分配了崩溃内存。
|
||||
* `cat /sys/kernel/kexec_crash_size` 不应该有零值。
|
||||
* `cat /proc/iomem | grep "Crash kernel"` 应该有一个分配的范围。
|
||||
* 如果未分配,则在命令行中传递正确的 `crashkernel=` 参数。
|
||||
* 如果没有显示,则在 `kexec` 命令中传递参数 `-d`,并将输出信息发送到 kexec-tools 邮件列表。
|
||||
|
||||
#### 在“第一内核”的最后一个消息之后,在控制台上看不到任何东西(比如“bye”)
|
||||
|
||||
* 检查 `kexec -e` 之后的 `kexec -l kernel_image` 命令是否工作。
|
||||
* 可能缺少支持的体系结构或特定机器的选项。
|
||||
* 可能是 purgatory 的 SHA 验证失败。如果您的体系结构不支持 purgatory 中的控制台,则很难进行调试。
|
||||
* 可能是“第二内核”早已崩溃。
|
||||
* 将您的系统的 `earlycon` 或 `earlyprintk` 选项传递给“第二内核”的命令行。
|
||||
* 使用 kexec-tools 邮件列表共享第一个内核和捕获内核的 `dmesg` 日志。
|
||||
|
||||
### 资源
|
||||
|
||||
#### fedora-kexec-tools
|
||||
|
||||
* GitHub 仓库:`git://pkgs.fedoraproject.org/kexec-tools`
|
||||
* 邮件列表:[kexec@lists.fedoraproject.org][7]
|
||||
* 说明:Specs 文件和脚本提供了用户友好的命令和服务,以便 `kexec-tools` 可以在不同的用户场景下实现自动化。
|
||||
|
||||
#### kexec-tools
|
||||
|
||||
* GitHub 仓库:git://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git
|
||||
* 邮件列表:[kexec@lists.infradead.org][8]
|
||||
* 说明:使用内核系统调用并提供用户命令 `kexec`。
|
||||
|
||||
#### Linux kernel
|
||||
|
||||
* GitHub 仓库: `git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git`
|
||||
* 邮件列表:[kexec@lists.infradead.org][9]
|
||||
* 说明:实现了 `kexec_load()`、`kexec_file_load()`、`reboot()` 系统调用和特定体系结构的代码,例如 `machine_kexec()` 和 `machine_crash_shutdown()`。
|
||||
|
||||
#### Makedumpfile
|
||||
|
||||
* GitHub 仓库: `git://git.code.sf.net/p/makedumpfile/code`
|
||||
* 邮件列表:[kexec@lists.infradead.org][10]
|
||||
* 说明:从转储文件中压缩和过滤不必要的组件。
|
||||
|
||||
(题图:[Penguin][13]、 [Boot][14],修改:Opensource.com. [CC BY-SA 4.0][15])
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
作者简介:
|
||||
|
||||
Pratyush Anand - Pratyush 正在以以为 Linux 内核专家的身份与 Red Hat 合作。他主要负责 Red Hat 产品和上游所面临的几个 kexec/kdump 问题。他还处理 Red Hat 支持的 ARM64 平台周围的其他内核调试、跟踪和性能问题。除了 Linux 内核,他还在上游的 kexec-tools 和 makedumpfile 项目中做出了贡献。他是一名开源爱好者,并在教育机构举办志愿者讲座,促进了 FOSS。
|
||||
|
||||
-------
|
||||
|
||||
|
||||
via: https://opensource.com/article/17/6/kdump-usage-and-internals
|
||||
|
||||
作者:[Pratyush Anand][a]
|
||||
译者:[firmianay](https://github.com/firmianay)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/pratyushanand
|
||||
[1]:https://opensource.com/resources/what-is-linux?src=linux_resource_menu
|
||||
[2]:https://opensource.com/resources/what-are-linux-containers?src=linux_resource_menu
|
||||
[3]:https://developers.redhat.com/promotions/linux-cheatsheet/?intcmp=7016000000127cYAAQ
|
||||
[4]:https://developers.redhat.com/cheat-sheet/advanced-linux-commands-cheatsheet?src=linux_resource_menu&intcmp=7016000000127cYAAQ
|
||||
[5]:https://opensource.com/tags/linux?src=linux_resource_menu
|
||||
[6]:https://opensource.com/article/17/6/kdump-usage-and-internals?rate=7i_-TnAGi8Q9GR7fhULKlQUNJw8KWgzadgMY9TDuiAY
|
||||
[7]:mailto:kexec@lists.fedoraproject.org
|
||||
[8]:mailto:kexec@lists.infradead.org
|
||||
[9]:mailto:kexec@lists.infradead.org
|
||||
[10]:mailto:kexec@lists.infradead.org
|
||||
[11]:http://sched.co/AVB4
|
||||
[12]:https://opensource.com/user/143191/feed
|
||||
[13]:https://pixabay.com/en/penguins-emperor-antarctic-life-429136/
|
||||
[14]:https://pixabay.com/en/shoe-boots-home-boots-house-1519804/
|
||||
[15]:https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[16]:https://www.kernel.org/doc/Documentation/kdump/kdump.txt
|
||||
[17]:https://linux.die.net/man/8/kexec
|
||||
[18]:https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt
|
||||
[19]:https://opensource.com/users/pratyushanand
|
||||
@@ -6,21 +6,16 @@
|
||||
|
||||
### 简介:Bro 网络分析框架
|
||||
|
||||
Bro是一个开源网络分析框架,侧重于网络安全监控。这是一项长达 15 年的研究成果,被各大学、研究实验室、超级计算机中心和许多开放科学界广泛使用。它主要由伯克利国际计算机科学研究所和 Urbana-Champaign 国家超级计算机应用中心开发。
|
||||
Bro 是一个开源的网络分析框架,侧重于网络安全监控。这是一项长达 15 年的研究成果,被各大学、研究实验室、超级计算机中心和许多开放科学界广泛使用。它主要由伯克利国际计算机科学研究所和伊利诺伊大学厄巴纳-香槟分校的国家超级计算机应用中心开发。
|
||||
|
||||
Bro 的功能包括:
|
||||
|
||||
* Bro 的脚本语言支持特定站点的监控策略
|
||||
|
||||
* Bro 的脚本语言支持针对站点定制监控策略
|
||||
* 针对高性能网络
|
||||
|
||||
* 分析器支持许多协议,可以在应用层面实现高级语义分析
|
||||
|
||||
* 它保留了关于其监视的网络的广泛应用层统计信息
|
||||
|
||||
* 它保留了其所监控的网络的丰富的应用层统计信息
|
||||
* Bro 能够与其他应用程序接口实时地交换信息
|
||||
|
||||
* 它的日志全面地记录一切信息,并提供网络活动的高级存档
|
||||
* 它的日志全面地记录了一切信息,并提供网络活动的高级存档
|
||||
|
||||
本教程将介绍如何从源代码构建,并在 Ubuntu 16.04 服务器上安装 Bro。
|
||||
|
||||
@@ -29,38 +24,25 @@ Bro 的功能包括:
|
||||
Bro 有许多依赖文件:
|
||||
|
||||
* Libpcap ([http://www.tcpdump.org][2])
|
||||
|
||||
* OpenSSL 库 ([http://www.openssl.org][3])
|
||||
|
||||
* BIND8 库
|
||||
|
||||
* Libz
|
||||
|
||||
* Bash (BroControl 所需要)
|
||||
|
||||
* Python 2.6+ (BroControl 所需要)
|
||||
|
||||
从源代码构建还需要:
|
||||
|
||||
* CMake 2.8+
|
||||
|
||||
* Make
|
||||
|
||||
* GCC 4.8+ or Clang 3.3+
|
||||
|
||||
* SWIG
|
||||
|
||||
* GNU Bison
|
||||
|
||||
* Flex
|
||||
|
||||
* Libpcap headers
|
||||
|
||||
* OpenSSL headers
|
||||
|
||||
* zlib headers
|
||||
|
||||
### 入门
|
||||
### 起步
|
||||
|
||||
首先,通过执行以下命令来安装所有必需的依赖项:
|
||||
|
||||
@@ -68,7 +50,7 @@ Bro 有许多依赖文件:
|
||||
# apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev
|
||||
```
|
||||
|
||||
#### 安装定位 IP 地理位置的GeoIP数据库
|
||||
#### 安装定位 IP 地理位置的 GeoIP 数据库
|
||||
|
||||
Bro 使用 GeoIP 的定位地理位置。安装 IPv4 和 IPv6 版本:
|
||||
|
||||
@@ -109,7 +91,7 @@ $ ./configure
|
||||
$ make
|
||||
```
|
||||
|
||||
make 命令需要一些时间来构建一切。确切的时间取决于服务器的性能。
|
||||
`make` 命令需要一些时间来构建一切。确切的时间取决于服务器的性能。
|
||||
|
||||
可以使用一些参数来执行 `configure` 脚本,以指定要构建的依赖关系,特别是 `--with-*` 选项。
|
||||
|
||||
@@ -128,9 +110,7 @@ make 命令需要一些时间来构建一切。确切的时间取决于服务器
|
||||
Bro 的配置文件位于 `/usr/local/bro/etc` 目录下。 这里有三个文件:
|
||||
|
||||
* `node.cfg`,用于配置要监视的单个节点(或多个节点)。
|
||||
|
||||
* `broctl.cfg`,BroControl 的配置文件。
|
||||
|
||||
* `networks.cgf`,包含一个使用 CIDR 标记法表示的网络列表。
|
||||
|
||||
#### 配置邮件设置
|
||||
@@ -141,7 +121,7 @@ Bro 的配置文件位于 `/usr/local/bro/etc` 目录下。 这里有三个文
|
||||
# $EDITOR /usr/local/bro/etc/broctl.cfg
|
||||
```
|
||||
|
||||
查看 **Mail Options** 选项,并编辑 `MailTo` 行如下:
|
||||
查看 `Mail Options` 选项,并编辑 `MailTo` 行如下:
|
||||
|
||||
```
|
||||
# Recipient address for emails sent out by Bro and BroControl
|
||||
@@ -150,7 +130,7 @@ MailTo = admin@example.com
|
||||
|
||||
保存并关闭。还有许多其他选项,但在大多数情况下,默认值就足够好了。
|
||||
|
||||
#### 选择要监视的节点
|
||||
#### 选择要监视的节点
|
||||
|
||||
开箱即用,Bro 被配置为以独立模式运行。在本教程中,我们就是做一个独立的安装,所以没有必要改变。但是,也请查看 `node.cfg` 配置文件:
|
||||
|
||||
@@ -167,11 +147,11 @@ host=localhost
|
||||
interface=eth0
|
||||
```
|
||||
|
||||
请确保接口与 Ubuntu 16.04 服务器的公共接口相匹配。
|
||||
请确保 `inferface` 与 Ubuntu 16.04 服务器的公网接口相匹配。
|
||||
|
||||
保存并退出。
|
||||
|
||||
### 配置监视节点的网络
|
||||
#### 配置监视节点的网络
|
||||
|
||||
最后一个要编辑的文件是 `network.cfg`。使用文本编辑器打开它:
|
||||
|
||||
@@ -202,7 +182,7 @@ X.X.X.X/X Private IP space
|
||||
|
||||
### 使用 BroControl 管理 Bro 的安装
|
||||
|
||||
管理 Bro 需要使用 BroControl,它以交互式 shell 和命令行工具的形式出现。启动 shell:
|
||||
管理 Bro 需要使用 BroControl,它支持交互式 shell 和命令行工具两种形式。启动该 shell:
|
||||
|
||||
```
|
||||
# /usr/local/bro/bin/broctl
|
||||
@@ -231,9 +211,9 @@ bro standalone localhost running 6807 20 Jul 12:30:50
|
||||
|
||||
via: https://www.unixmen.com/how-to-install-bro-ubuntu-1604/
|
||||
|
||||
作者:[ Giuseppe Molica][a]
|
||||
作者:[Giuseppe Molica][a]
|
||||
译者:[firmianay](https://github.com/firmianay)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
translating by firmianay
|
||||
|
||||
DYNAMIC PORT FORWARDING / MOUNT A SOCKS SERVER WITH SSH
|
||||
=================
|
||||
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
此脚本使用含多来源统一阻止列表的白名单来更新主机文件
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
网上有许多持续维护的含有不同垃圾域的有用列表。将这些列表复制到你的主机文件中可以轻松阻止大量的域,你的系统则无法连接它们。此方法在不安装浏览器插件的情况下工作,并且将处理系统上任何浏览器(和任何其他程序)的阻止操作。
|
||||
|
||||
在本教程中,我将向你展示如何在 Linux 中启动并运行 Steven Black 的[统一主机脚本][1]。该脚本将使用最新的已知广告服务器、网络钓鱼网站和其他网络垃圾邮件更新(多个来源)的计算机主机文件,同时提供一个漂亮、干净的方式来管理自己的黑名单/白名单,与脚本管理的列表分开管理。
|
||||
|
||||
在将 30,000 个域放入主机文件之前,需要注意两点。首先,这些巨大的列表包含可能需要解除封锁的服务器,以便进行在线购买或其他一些临时情况。当网上的事情出现问题时,你会意识到你遇到一个麻烦了,因为你搞砸了你的主机文件。为了解决这个问题,我将向你展示如何使用方便的打开/关闭开关,以便你可以快速禁用阻止列表购买喜马拉雅盐雾灯(它是等离子灯)。我仍然认为这些列表的一个特点是将所有的一切都封锁(这只是烦人,直到我想到了关闭开关)。如果你经常遇到你需要的服务器被阻止的问题,只需将其添加到白名单文件中即可。
|
||||
|
||||
第二个问题是性能受到了轻微的影响, 因为每次调用一个域时, 系统都必须检查整个列表。也许会有一个小的命中, 但不够大, 因此我放弃名单, 让每一个连接都通过。但是, 请你自己考虑。
|
||||
|
||||
主机文件通过将请求定向到 127.0.0.1 或 0.0.0.0(换句话说定向到空地址)来阻止请求。有人说使用 0 是更快,问题更少的方法。你可以将脚本配置为使用 “-ip nnn.nnn.nnn.nnn” 这样的 ip
|
||||
选项来作为阻止 ip, 但默认值是 0.0.0.0, 这是我使用的值。
|
||||
|
||||
|
||||
我曾经将 Steven 脚本做的事每隔一段时间就手动做一遍,进到每一个站点,将他们的列表拷贝/粘贴到我的主机文件中,做一个查找替换将其中一些变成 0 等等。我知道整件事情可以自动化,这样做有点傻,但我从来没有花时间解决这个问题。直到我找到这个脚本, 现在这已经是一个被遗忘的杂务。
|
||||
|
||||
让我们先下载一份 Black 代码拷贝(大约 150MB),以便我们可以进行下一步。你需要安装 git,因此如果还没安装,进入到终端输入:
|
||||
|
||||
**sudo apt-get install git**
|
||||
|
||||
安装完之后,输入:
|
||||
|
||||
**mkdir unifiedhosts**
|
||||
**cd unifiedhosts**
|
||||
**git clone** [**https://github.com/StevenBlack/hosts.git** ][2]
|
||||
**cd hosts**
|
||||
|
||||
当您的光标在 Steven 的脚本中闪烁时,让我们来谈谈选择。该脚本有几个选项和扩展,但扩展我不会在这里覆盖,但如果你到了这一步并且你有兴趣,[readme.md][3] 可以告诉你所有你需要知道的。
|
||||
|
||||
你需要安装 python 来运行此脚本,并且与版本有关。要找到你安装的 Python 版本,请输入:
|
||||
|
||||
**python --version**
|
||||
|
||||
如果你还没安装 Python:
|
||||
|
||||
**sudo apt-get install python**
|
||||
|
||||
对于 Python 2.7,如下所示,输入 “python” 来执行脚本。对于 Python 3,在命令中的 “python” 替换成 “python3”。执行后,该脚本会确保它具有每个列表的最新版本,如果没有,它会抓取一个新的副本。然后,它会写入一个新的 hosts 文件,包括了黑名单/白名单中的任何内容。让我们尝试使用 -r 选项来替换我们的活动主机文件以及 -a 选项,以便脚本不会发生任何问题。回到终端:
|
||||
|
||||
**python updateHostsFile.py -r -a**
|
||||
|
||||
该命令将询问你的密码,以便能够写入 /etc/。为了使新更新的列表处于活动状态,某些系统需要清除 DNS 缓存。在同一个硬件上,我观察到不同的操作系统表现出非常不同的行为,在没有刷新缓存的情况下不同的服务器变为可访问/不可访问所需的时间长度都不同。我已经看到了从即时(Slackware)到重启更新(Windows)的所有情况。有一些命令可以刷新 DNS 缓存,但是它们在每个操作系统甚至每个发行版上都不同,所以如果没有生效,只需要重新启动就行了。
|
||||
|
||||
现在,只要将你的个人例外添加到黑名单/白名单中,并且只要你想要更新主机文件,运行该脚本就好。该脚本将根据你的要求调整生成的主机文件,每次运行文件时会自动追加你额外的列表。
|
||||
|
||||
最后,我们来创建一个打开/关闭开关。我们每个功能都需要一个脚本,所以回到终端输入下面的内容创建关闭开关(用你自己的文本编辑器替换 leafpad):
|
||||
|
||||
**leafpad hosts-off.sh**
|
||||
|
||||
在新文件中输入下面的内容:
|
||||
|
||||
**#!/bin/sh**
|
||||
**sudo mv /etc/hosts /etc/hostsDISABLED**
|
||||
|
||||
接着让它可执行:
|
||||
|
||||
**chmod +x hosts-off.sh**
|
||||
|
||||
相似地,对于打开开关:
|
||||
|
||||
**leafpad hosts-on.sh
|
||||
**
|
||||
在新文件中输入下面的内容:
|
||||
|
||||
**#!/bin/sh**
|
||||
**sudo mv /etc/hostsDISABLED /etc/hosts
|
||||
**
|
||||
最后让它可执行:
|
||||
|
||||
**chmod +x hosts-on.sh
|
||||
|
||||
**你所需要做的是为每个脚本创建一个快捷方式,标记它们的 HOSTS-ON 和 HOSTS-OFF,你就能找到它们了。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.darrentoback.com/this-script-updates-hosts-files-using-a-multi-source-unified-block-list-with-whitelisting
|
||||
|
||||
作者:[dmt][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.darrentoback.com/about-me
|
||||
[1]:https://github.com/StevenBlack/hosts
|
||||
[2]:https://github.com/StevenBlack/hosts.git
|
||||
[3]:https://github.com/StevenBlack/hosts/blob/master/readme.md
|
||||
@@ -1,50 +1,50 @@
|
||||
Linux Kernel Utilities (LKU) – A Set Of Shell Scripts To Compile, Install & Update Latest Kernel In Ubuntu/LinuxMint
|
||||
Linux Kernel Utilities(LKU) - 一套在 Ubuntu/LinuxMint 上编译、安装和更新最新内核的 Shell 脚本
|
||||
============================================================
|
||||
|
||||
|
||||
Installing & Upgrading latest Linux kernel in the manual way is not a small task for everyone, including experience guys. It requires depth knowledge on Linux core. We have already covered in the past about UKUU (Ubuntu Kernel Upgrade Utility) which automatically detect the latest mainline kernel from kernel.ubuntu.com and popup the nice GUI for installation.
|
||||
以手动方式安装和升级最新的 Linux 内核对于每个人来说都不是一件小事,甚至包括一些有经验的人。它需要对 Linux 内核有深入的了解。过去我们已经介绍了 UKUU(Ubuntu Kernel Upgrade Utility),它可以从 kernel.ubuntu.com 网站上自动检测最新的主线内核,并弹出一个不错的窗口界面进行安装。
|
||||
|
||||
[Linux Kernel Utilities][2] (LKU) offers set of shell scripts (Three Shell Scripts) which help users to compile & install latest Linux kernel from kernel.org, also install precompiled latest Ubuntu kernel from kernel.ubuntu.com. Even it has an option to choose required kernel (manual kernel selection) based on our requirement.
|
||||
[Linux Kernel Utilities][2] (LKU)提供一组 shell 脚本(三个 Shell 脚本),可以帮助用户从 kernel.org 获取并编译和安装最新的 Linux 内核,还可以从 kernel.ubuntu.com 获取安装最新的 Ubuntu 内核。甚至可以根据需要选择所需的内核(手动内核选择)。
|
||||
|
||||
This script will also check the downloaded archive against the PGP signature file and possible to choose generic and lowlatency kernels.
|
||||
该脚本还将根据 PGP 签名文件检查下载的存档,并且可以选择通用和低版本的内核。
|
||||
|
||||
Suggested Read : [Ukuu – An Easy Way To Install/Upgrade Linux Kernel In Ubuntu based Systems][3]
|
||||
建议阅读:[Ukuu – An Easy Way To Install/Upgrade Linux Kernel In Ubuntu based Systems][3]
|
||||
|
||||
It remove/purge all inactive kernels and won’t leave backup kernel for safety purpose. It is highly recommended that a reboot be performed before executing this script.
|
||||
它可以删除或清除所有非活动的内核,并且不会为了安全目的留下备份的内核。强烈建议在执行此脚本之前重新启动。
|
||||
|
||||
* compile_linux_kernel.sh : Users can able to compile & install required or latest kernel from kernel.org
|
||||
* compile_linux_kernel.sh :用户可以从 kernel.org 编译和安装所需的或最新的内核
|
||||
|
||||
* update_ubuntu_kernel.sh : Users can able to install & update required or latest precompiled ubuntu kernel from kernel.ubuntu.com
|
||||
* update_ubuntu_kernel.sh : 用户可以从 kernel.ubuntu.com 安装并更新所需或最新的预编译 Ubuntu 内核
|
||||
|
||||
* remove_old_kernels.sh : This will remove/purge all inactive kernels and will keep only the currently loaded version
|
||||
* remove_old_kernels.sh : 这将删除或清除所有非活动内核,并且只保留当前加载的版本
|
||||
|
||||
Kernel.org has regular release cycle (every three months once) which comes with new features, Improved Hardware & System Performance. Most of the distributions doesn’t offer/include the latest kernel except rolling release distributions such as Arch Linux, openSUSE Tumbleweed, etc., since it has a standard release cycle.
|
||||
Kernel.org 有固定的发布周期(每三个月一次),发布内容包括新功能,改进的硬件和系统性能。由于它具有标准的发布周期,除了滚动发布的版本(如 Arch Linux,openSUSE Tumbleweed 等),大多数发行版都不提供最新的内核。
|
||||
|
||||
#### How to Install Linux Kernel Utilities (LKU)
|
||||
#### 如何安装 Linux Kernel Utilities (LKU)
|
||||
|
||||
As we told in the beginning of the article, its set of shell script so just clone the developer github repository and run the appropriate shell file to perform the activity.
|
||||
正如我们在文章的开头所说的,它的 shell 脚本集只是克隆开发人员的 github 仓库并运行相应的 shell 文件来执行这个过程。
|
||||
|
||||
```
|
||||
$ git clone https://github.com/mtompkins/linux-kernel-utilities.git && cd linux-kernel-utilities
|
||||
```
|
||||
|
||||
#### Install Specific kernel
|
||||
#### 安装指定版本内核
|
||||
|
||||
For testing purpose we are going to install `Linux v4.4.10-xenial` kernel. Before proceeding the new kernel installation we need to check current installed kernel version with help of `uanme -a` command so that we can check whether the new kernel get installed or not?
|
||||
为了测试的目的,我们将安装 `Linux v4.4.10-xenial` 内核。在安装新内核之前,我们需要通过 `uanme -a` 命令检查当前安装的内核版本,以便我们可以检查新内核是否可以安装
|
||||
|
||||
```
|
||||
$ uname -a
|
||||
Linux magi-VirtualBox 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
|
||||
```
|
||||
|
||||
As per the above output, our system has `4.4.0-21-generic` kernel.
|
||||
根据上面的输出,我们的系统使用 4.4.0-21 通用内核。
|
||||
|
||||
Just run `update_ubuntu_kernel.sh` shell file. In the very first time script will check whether all dependencies are met or not? and will install missing dependencies automatically. It detect which distribution it is and retrieve Precompiled kernels available from kernel.ubuntu.com. Now, choose your desired kernel from the list and input the value, and hit `Enter` then sit-back because it’s going to download the kernel images (linux-headers-4.4.10, linux-headers-4.4.10-xxx-generic & linux-image-4.4.10-xxx-generic).
|
||||
只需运行 `update_ubuntu_kernel.sh` shell 文件。第一次运行脚本时会检查是否满足所有的依赖关系,然后自动安装缺少的依赖项。它会检测系统使用的发行版,并检索 kernel.ubuntu.com 中可用的预编译内核。现在,从列表中选择你需要的内核并输入序号,然后按 Enter 键,它将下载内核映像(linux-headers-4.4.10,linux-headers-4.4.10-xxx-generic 和 linux-image-4.4.10-xxx-generic)。
|
||||
|
||||
Once the kernel images get downloaded, it will popup the `sudo` password to start the new kernel installation.
|
||||
一旦内核镜像被下载,它将要求输入 `sudo` 密码来启动新内核的安装。
|
||||
|
||||
```
|
||||
$ ./update_ubuntu_kernel.sh
|
||||
$ ./update_ubuntu_kernel.sh
|
||||
|
||||
[+] Checking Distro
|
||||
\_ Distro identified as LinuxMint.
|
||||
@@ -168,7 +168,7 @@ Do you want the lowlatency kernel? (y/[n]):
|
||||
|
||||
[+] Checking AntiVirus flag and disabling if necessary
|
||||
[+] Installing kernel . . .
|
||||
[sudo] password for magi:
|
||||
[sudo] password for magi:
|
||||
Selecting previously unselected package linux-headers-4.4.10-040410.
|
||||
(Reading database ... 230647 files and directories currently installed.)
|
||||
Preparing to unpack linux-headers-4.4.10-040410_4.4.10-040410.201605110631_all.deb ...
|
||||
@@ -210,22 +210,22 @@ done
|
||||
\_ Done
|
||||
```
|
||||
|
||||
Post installation do the reboot to use the newly installed kernel.
|
||||
安装后需要重新启动以使用新安装的内核。
|
||||
|
||||
```
|
||||
$ sudo reboot now
|
||||
```
|
||||
|
||||
yes, we are using newly installed kernel `4.4.10-040410-generic`
|
||||
现在,你正在使用的就是新安装的 `4.4.10-040410-generic` 版本内核。
|
||||
|
||||
```
|
||||
$ uname -a
|
||||
Linux magi-VirtualBox 4.4.10-040410-generic #201605110631 SMP Wed May 11 10:33:23 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
|
||||
```
|
||||
|
||||
#### Install Latest Kernel
|
||||
#### 安装最新版本内核
|
||||
|
||||
Its same as above but we don’t want to choose the descried one, its automatically install most recent latest kernel.
|
||||
过程与上述相同,它将自动安装最新版本的内核。
|
||||
|
||||
```
|
||||
$ ./update_ubuntu_kernel.sh --latest
|
||||
@@ -269,28 +269,28 @@ done
|
||||
\_ Done
|
||||
```
|
||||
|
||||
Post installation do the reboot to use the newly installed kernel.
|
||||
安装后需要重新启动以使用新安装的内核。
|
||||
|
||||
```
|
||||
$ sudo reboot now
|
||||
```
|
||||
|
||||
yes, we are using newly installed kernel `4.11.3-041103-generic`.
|
||||
现在,你正在使用的就是最新版本 `4.11.3-041103-generic` 的内核。
|
||||
|
||||
```
|
||||
$ uname -a
|
||||
Linux magi-VirtualBox 4.11.3-041103-generic #201705251233 SMP Thu May 25 16:34:52 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
|
||||
```
|
||||
|
||||
#### Remove/Purge Old Kernel
|
||||
#### 删除或清除旧内核
|
||||
|
||||
Just run `remove_old_kernels.sh` shell file to remove/purge all inactive kernels.
|
||||
只需要运行 `remove_old_kernels.sh` shell 文件即可删除或清除所有非活动状态的内核。
|
||||
|
||||
```
|
||||
$ ./remove_old_kernels.sh
|
||||
$ ./remove_old_kernels.sh
|
||||
|
||||
++++++++++++++++++++++++++++++++
|
||||
+++ W A R N I N G +++
|
||||
+++ W A R N I N G +++
|
||||
++++++++++++++++++++++++++++++++
|
||||
|
||||
A reboot is recommended before running this script to ensure the current kernel tagged
|
||||
@@ -303,7 +303,7 @@ You have been warned.
|
||||
|
||||
[?]Continue to automagically remove ALL old kernels? (y/N)y
|
||||
\_ Removing ALL old kernels . . .
|
||||
[sudo] password for magi:
|
||||
[sudo] password for magi:
|
||||
Reading package lists... Done
|
||||
Building dependency tree
|
||||
Reading state information... Done
|
||||
@@ -338,7 +338,7 @@ run-parts: executing /etc/kernel/postrm.d/zz-update-grub 4.4.9-040409-lowlatency
|
||||
via: http://www.2daygeek.com/lku-linux-kernel-utilities-compile-install-update-latest-kernel-in-linux-mint-ubuntu/
|
||||
|
||||
作者:[ 2DAYGEEK ][a]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
译者:[firmianay](https://github.com/firmianay)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
@@ -1,311 +0,0 @@
|
||||
使用 Kdump 检查 Linux 内核崩溃
|
||||
============================================================
|
||||
|
||||
### 我们先看一下 kdump 使用的基础知识,和 kdump/kexec 内核实现的内部结构。
|
||||
|
||||

|
||||
|
||||
Image by : [Penguin][13], [Boot][14]. Modified by Opensource.com. [CC BY-SA 4.0][15].
|
||||
|
||||
[Kdump][16] 是获取崩溃的 Linux 内核转储的一种方法,但是想找到解释其使用和内部结构的文档可能有点困难。在本文中,我将研究 kdump 使用的基础知识,并查看 kdump/kexec 内核实现的内部结构。
|
||||
|
||||
[Kexec][17] 是一个 Linux 内核到内核的引导加载程序,可以帮助从第一个内核的上下文引导到第二个内核。Kexec 关闭第一个内核,绕过 BIOS 或固件阶段,并跳转到第二个内核。因此,在没有 BIOS 阶段的情况下,重新启动变得更快。
|
||||
|
||||
Kdump 可以与 kexec 应用程序一起使用 - 例如,当第一个内核崩溃时第二个内核启动,第二个内核用于复制第一个内核的内存转储,可以使用 gdb 和 crash 等工具分析崩溃的原因。(在本文中,我将使用术语 _first kernel_ 作为当前运行的内核,_second kernel_ 作为使用 kexec 运行的内核,_capture kernel_ 表示在当前内核崩溃时运行内核。)
|
||||
|
||||
更多 Linux 资料:
|
||||
|
||||
* [What is Linux?][1]
|
||||
|
||||
* [What are Linux containers?][2]
|
||||
|
||||
* [Download Now: Linux commands cheat sheet][3]
|
||||
|
||||
* [Advanced Linux commands cheat sheet][4]
|
||||
|
||||
* [Our latest Linux articles][5]
|
||||
|
||||
kexec 机制在内核以及用户空间中都有组件。内核提供了几个用于 kexec 重启功能的系统调用。名为 kexec-tools 的用户空间工具使用这些调用,并提供可执行文件来加载和引导第二个内核。有的发行版还会在 kexec-tools 上添加包装器,这有助于捕获并保存各种转储目标配置的转储。在本文中,我将使用名为 distro-kexec-tools 的工具来避免上游 kexec 工具和特定于发行版的 kexec-tools 代码之间的混淆。我的例子将使用 Fedora Linux 发行版。
|
||||
|
||||
### Fedora kexec-tools 工具
|
||||
|
||||
使用 **dnf install kexec-tools** 命令在 Fedora 机器上安装 fedora-kexec-tools。在按章 fedora-kexec-tools 后可以执行 **systemctl start kdump** 命令来启动 kdump 服务。当此服务启动时,它将创建一个根文件系统(initramfs),其中包含了装载目标的资源,用于保存 vmcore,以及复制和转储 vmcore 的命令。然后,该服务将内核和 initramfs 加载到崩溃内核区域内的合适位置,以便在内核崩溃时可以执行它们。
|
||||
|
||||
Fedora 包装器提供了两个用户配置文件:
|
||||
|
||||
1. **/etc/kdump.conf** 指定修改后需要重建 initramfs 的配置参数。例如,如果将转储目标从本地磁盘更改为 NFS 装载的磁盘,则需要使用与 NFS 相关的内核模块才能由捕获内核加载。
|
||||
|
||||
2. **/etc/sysconfig/kdump** 指定修改后不需要重新构建 initramfs 的配置参数。例如,如果只需修改传递给捕获内核的命令行参数,则不需要重新构建 initramfs。
|
||||
|
||||
如果内核在 kdump 服务启动之后出现故障,那么捕获内核被执行,进一步会执行 initramfs 中的 vmcore 保存过程,然后重新启动到稳定的内核。
|
||||
|
||||
### kexec-tools 工具
|
||||
|
||||
编译 kexec-tools 的源代码得到了一个名为 **kexec** 的可执行文件。相同的可执行文件可用于加载和执行第二个内核或加载捕获内核,可以在内核崩溃时执行。
|
||||
|
||||
加载第二个内核的命令:
|
||||
|
||||
```
|
||||
# kexec -l kernel.img --initrd=initramfs-image.img –reuse-cmdline
|
||||
```
|
||||
|
||||
**--reuse-command** 参数表示使用与第一个内核相同的命令行。使用 **--initrd** 传递 initramfs。 **-l** 表示正在加载第二个内核,可以由 kexec 应用程序本身执行(**kexec -e**)。使用 **-l** 加载的内核不能在内核崩溃时执行。为了加载可以在内核崩溃时执行的捕获内核,必须传递参数 **-l**。
|
||||
|
||||
加载捕获内核的命令:
|
||||
|
||||
```
|
||||
# kexec -p kernel.img --initrd=initramfs-image.img –reuse-cmdline
|
||||
```
|
||||
|
||||
**echo c > /pros/sysrq-trigger** 可用于使内核崩溃以进行测试。有关 kexec-tools 提供的选项的详细信息,请参阅 **man kexec**。在转到下一个部分之前,请看这个 kexec_dump 的演示:
|
||||
|
||||
[kexec_dump_demo (YouTube)](https://www.youtube.com/embed/iOq_rJhrKhA?rel=0&origin=https://opensource.com&enablejsapi=1)
|
||||
|
||||
### Kdump: 端到端流
|
||||
|
||||
图 1 展示了流程图。必须在引导第一个内核期间为捕获内核保留 Crashkernel 的内存。您可以在内核命令行中传递 **crashkernel=Y@X**,其中 **@X** 是可选的。**crashkernel=256M** 适用于大多数 x86_64 系统;然而,为崩溃内核选择适当的内存取决于许多因素,如内核大小和 initramfs,以及 initramfs 中包含的模块和应用程序运行时的内存需求。有关传递崩溃内核参数的更多方法,请参阅 [kernel-parameters documentation][18] 文档。
|
||||
|
||||

|
||||
|
||||
您可以将内核和 initramfs 镜像传递给 **kexec** 可执行文件,如(**kexec-tools**)部分的命令所示。捕获内核可以与第一个内核相同,也可以不同。通常,保持不变。Initramfs 是可选的;例如,当内核使用 **CONFIG_INITRAMFS_SOURCE** 编译时,您不需要它。通常,从第一个 initramfs 中保存一个不一样的捕获 initramfs,因为在捕获 initramfs 中自动执行 vmcore 的副本能获得更好的效果。当执行 **kexec** 时,它还加载了 **elfcorehdr** 数据和 purgatory 可执行文件。 **elfcorehdr** 具有关于系统内存组织的信息,purgatory 可以在捕获内核执行之前执行并验证第二级二进制或数据是否具有正确的 SHA。Purgatory 也是可选的。
|
||||
|
||||
当第一个内核崩溃时,它执行必要的退出过程并切换到 purgatory(如果存在)。Purgatory 验证加载二进制文件的 SHA256,如果是正确的,则将控制权传递给捕获内核。捕获内核根据从 **elfcorehdr** 接收到的系统内存信息创建 vmcore。因此,捕获内核启动后,您将看到 /proc/vmcore 中第一个内核的转储。根据您使用的 initramfs,您现在可以分析转储,将其复制到任何磁盘,也可以是自动复制的,然后重新启动到稳定的内核。
|
||||
|
||||
### 内核系统调用
|
||||
|
||||
内核提供了两个系统调用:**kexec_load()** 和 **kexec_file_load()**,可以用于在执行 **kexec -l** 时加载第二个内核。它还为 **reboot()** 系统调用提供了一个额外的标志,可用于使用 **kexec -e** 引导到第二个内核。
|
||||
|
||||
**kexec_load()**:**kexec_load()** 系统调用加载一个可以在之后通过 **reboot()** 执行的新的内核。其原型定义如下:
|
||||
|
||||
```
|
||||
long kexec_load(unsigned long entry, unsigned long nr_segments,
|
||||
struct kexec_segment *segments, unsigned long flags);
|
||||
```
|
||||
|
||||
用户空间需要为不同的组件传递不同的段,如内核,initramfs 等。因此,**kexec** 可执行文件有助于准备这些段。**kexec_segment** 的结构如下所示:
|
||||
|
||||
```
|
||||
struct kexec_segment {
|
||||
void *buf;
|
||||
/* 用户空间缓冲区 */
|
||||
size_t bufsz;
|
||||
/* 用户空间中的缓冲区长度 */
|
||||
void *mem;
|
||||
/* 内核的物理地址 */
|
||||
size_t memsz;
|
||||
/* 物理地址长度 */
|
||||
};
|
||||
```
|
||||
|
||||
当使用 **LINUX_REBOOT_CMD_KEXEC** 调用 **reboot()** 时,它会引导进入由 **kexec_load** 加载的内核。如果标志 **KEXEC_ON_CRASH** 被传递给 **kexec_load()**,则加载的内核将不会使用 **reboot(LINUX_REBOOT_CMD_KEXEC)** 来启动;相反,这将在内核崩溃中执行。必须定义 **CONFIG_KEXEC** 才能使用 **kexec**,并且为 kdump 定义 **CONFIG_CRASH_DUMP**。
|
||||
|
||||
**kexec_file_load()**:作为用户,你只需传递两个参数(即 kernel 和 initramfs)到 **kexec** 可执行文件。然后,**kexec** 从 sysfs 或其他内核信息源中读取数据,并创建所有段。所以使用 **kexec_file_load()** 可以简化用户空间,只传递内核和 initramfs 的文件描述符。其余部分由内核本身完成。使用此系统调用时应该启用 **CONFIG_KEXEC_FILE**。它的原型如下:
|
||||
|
||||
```
|
||||
long kexec_file_load(int kernel_fd, int initrd_fd, unsigned long
|
||||
cmdline_len, const char __user * cmdline_ptr, unsigned long
|
||||
flags);
|
||||
```
|
||||
|
||||
请注意,**kexec_file_load** 也可以接受命令行,而 **kexec_load()** 不行。内核根据不同的系统架构来接受和执行命令行。因此,在 **kexec_load()** 的情况下,**kexec-tools** 将通过其中一个段(如在 **dtb** 或 **ELF** 引导注释等)中传递命令行。
|
||||
|
||||
目前,**kexec_file_load()** 仅支持 x86 和 PowerPC。
|
||||
|
||||
### 当内核崩溃时会发生什么
|
||||
|
||||
当第一个内核崩溃时,在控制权传递给 purgatory 或捕获内核之前,会执行以下操作:
|
||||
|
||||
* 准备 CPU 寄存器(参见内核代码中的 **crash_setup_regs()**);
|
||||
|
||||
* 更新 vmcoreinfo 备注(请参阅 **crash_save_vmcoreinfo()**);
|
||||
|
||||
* 关闭非崩溃的 CPU 并保存准备好的寄存器(请参阅 **machine_crash_shutdown()** 和 **crash_save_cpu()**);
|
||||
|
||||
* 您可能需要在此处禁用中断控制器;
|
||||
|
||||
* 最后,它执行 kexec 重新启动(请参阅 **machine_kexec()**),它将加载或刷新 kexec 段到内存,并将控制权传递给进入段的执行文件。输入段可以是下一个内核的 purgatory 或开始地址。
|
||||
|
||||
### ELF 程序头
|
||||
|
||||
kdump中涉及的大多数转储核心都是 ELF 格式。因此,理解 ELF 程序头部很重要,特别是当您想要找到 vmcore 准备的问题。每个 ELF 文件都有一个程序头:
|
||||
|
||||
* 由系统加载器读取,
|
||||
|
||||
* 描述如何将程序加载到内存中,
|
||||
|
||||
* 可以使用 **Objdump -p elf_file** 来查看程序头。
|
||||
|
||||
vmcore 的 ELF 程序头的示例如下:
|
||||
|
||||
```
|
||||
# objdump -p vmcore
|
||||
vmcore:
|
||||
file format elf64-littleaarch64
|
||||
Program Header:
|
||||
NOTE off 0x0000000000010000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**0 filesz
|
||||
0x00000000000013e8 memsz 0x00000000000013e8 flags ---
|
||||
LOAD off 0x0000000000020000 vaddr 0xffff000008080000 paddr 0x0000004000280000 align 2**0 filesz
|
||||
0x0000000001460000 memsz 0x0000000001460000 flags rwx
|
||||
LOAD off 0x0000000001480000 vaddr 0xffff800000200000 paddr 0x0000004000200000 align 2**0 filesz
|
||||
0x000000007fc00000 memsz 0x000000007fc00000 flags rwx
|
||||
LOAD off 0x0000000081080000 vaddr 0xffff8000ffe00000 paddr 0x00000040ffe00000 align 2**0 filesz
|
||||
0x00000002fa7a0000 memsz 0x00000002fa7a0000 flags rwx
|
||||
LOAD off 0x000000037b820000 vaddr 0xffff8003fa9e0000 paddr 0x00000043fa9e0000 align 2**0 filesz
|
||||
0x0000000004fc0000 memsz 0x0000000004fc0000 flags rwx
|
||||
LOAD off 0x00000003807e0000 vaddr 0xffff8003ff9b0000 paddr 0x00000043ff9b0000 align 2**0 filesz
|
||||
0x0000000000010000 memsz 0x0000000000010000 flags rwx
|
||||
LOAD off 0x00000003807f0000 vaddr 0xffff8003ff9f0000 paddr 0x00000043ff9f0000 align 2**0 filesz
|
||||
0x0000000000610000 memsz 0x0000000000610000 flags rwx
|
||||
```
|
||||
|
||||
在这个例子中,有一个 note 段,其余的是 load 段。note 段提供了有关 CPU 信息,load 段提供了关于复制的系统内存组件的信息。
|
||||
|
||||
Vmcore 从 **elfcorehdr** 开始,它具有与 ELF 程序头相同的结构。参见图 2 中 **elfcorehdr** 的表示:
|
||||
|
||||

|
||||
|
||||
**kexec-tools** 读取 /sys/devices/system/cpu/cpu%d/crash_notes 并准备 **CPU PT_NOTE** 的头文件。同样,它读取 **/sys/kernel/vmcoreinfo** 并准备 **vmcoreinfo PT_NOTE** 的头文件,从 **/proc/iomem** 读取系统内存并准备存储器 **PT_LOAD** 标头。当捕获内核接收到 **elfcorehdr** 时,它从头文件中提到的地址中读取数据,并准备 vmcore。
|
||||
|
||||
### Crash notes
|
||||
|
||||
Crash notes 是每个 CPU 中用于在系统崩溃的情况下存储 CPU 状态的区域; 它有关于当前 PID 和 CPU 寄存器的信息。
|
||||
|
||||
### vmcoreinfo
|
||||
|
||||
该 note 段具有各种内核调试信息,如结构体大小、符号值、页面大小等。这些值由捕获内核解析并嵌入到 **/proc/vmcore** 中。 vmcoreinfo 主要由 **makedumpfile** 应用程序使用。在 Linux 内核,**include/linux/kexec.h** 宏定义了一个新的 **vmcoreinfo**。 一些示例宏如下所示:
|
||||
|
||||
* **VMCOREINFO_PAGESIZE()**
|
||||
|
||||
* **VMCOREINFO_SYMBOL()**
|
||||
|
||||
* **VMCOREINFO_SIZE()**
|
||||
|
||||
* **VMCOREINFO_STRUCT_SIZE()**
|
||||
|
||||
### makedumpfile
|
||||
|
||||
vmcore 中的许多信息(如可用页面)都没有用处。Makedumpfile 是一个用于排除不必要的页面的应用程序,如:
|
||||
|
||||
* 填满零的页面,
|
||||
|
||||
* 没有私有标志的缓存页面(非专用缓存);
|
||||
|
||||
* 具有私有标志的缓存页面(专用缓存);
|
||||
|
||||
* 用户进程数据页;
|
||||
|
||||
* 可用页面。
|
||||
|
||||
此外,makedumpfile 在复制时压缩 **/proc/vmcore** 的数据。它也可以从转储中删除敏感的符号信息; 然而,为了做到这一点,它首先需要内核的调试信息。该调试信息来自 **VMLINUX** 或 **vmcoreinfo**,其输出可以是 ELF 格式或 kdump 压缩格式。
|
||||
|
||||
典型用法:
|
||||
|
||||
```
|
||||
# makedumpfile -l --message-level 1 -d 31 /proc/vmcore makedumpfilecore
|
||||
```
|
||||
|
||||
详细信息请参阅 **man makedumpfile**。
|
||||
|
||||
### kdump 调试
|
||||
|
||||
新手在使用 kdump 时可能会遇到的问题:
|
||||
|
||||
### _Kexec -p kernel_image_ 没有成功
|
||||
|
||||
* 检查是否分配了崩溃内存。
|
||||
|
||||
* **cat /sys/kernel/kexec_crash_size** 不应该有零值。
|
||||
|
||||
* **cat /proc/iomem | grep "Crash kernel"** 应该有一个分配的范围。
|
||||
|
||||
* 如果未分配,则在命令行中传递正确的 **crashkernel=** 参数。
|
||||
|
||||
* 如果没有显示,则在 **kexec** 命令中传递参数 **-d**,并使用 kexec-tools 邮件列表共享调试输出。
|
||||
|
||||
### 在第一个内核的最后一个消息之后,在控制台上看不到任何东西(比如“bye”)
|
||||
|
||||
* 检查 **kexec -e** 之后的 **kexec -l kernel_image** 命令是否工作。
|
||||
|
||||
* 可能缺少支持的体系结构或特定机器的选项。
|
||||
|
||||
* 可能是 purgatory 的 SHA 验证失败。如果您的体系结构不支持 purgatory 中的控制台,则很难进行调试。
|
||||
|
||||
* 可能是第二个内核早已崩溃。
|
||||
|
||||
* 将您的系统的 **earlycon** 或 **earlyprintk** 选项传递给第二个内核的命令行。
|
||||
|
||||
* 使用 kexec-tools 邮件列表共享第一个内核和捕获内核的 **dmesg** 日志。
|
||||
|
||||
### 资源
|
||||
|
||||
#### fedora-kexec-tools
|
||||
|
||||
* 存储库: **git://pkgs.fedoraproject.org/kexec-tools**
|
||||
|
||||
* 邮件列表:[kexec@lists.fedoraproject.org][7]
|
||||
|
||||
* 说明:规定的文件和脚本提供了用户友好的命令和服务,以便 **kexec-tools** 可以在不同的用户场景下实现自动化。
|
||||
|
||||
#### kexec-tools
|
||||
|
||||
* 存储库: git://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git
|
||||
|
||||
* 邮件列表:[kexec@lists.infradead.org][8]
|
||||
|
||||
* 说明:使用内核系统调用并提供用户命令 **kexec**。
|
||||
|
||||
#### Linux kernel
|
||||
|
||||
* 存储库: **git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git**
|
||||
|
||||
* 邮件列表:[kexec@lists.infradead.org][9]
|
||||
|
||||
* 说明:实现了 **kexec_load()**、**kexec_file_load()**、**reboot()** 系统调用和特定体系结构的代码,例如 **machine_kexec()** 和 **machine_crash_shutdown()**。
|
||||
|
||||
#### Makedumpfile
|
||||
|
||||
* 存储库: **git://git.code.sf.net/p/makedumpfile/code**
|
||||
|
||||
* 邮件列表:[kexec@lists.infradead.org][10]
|
||||
|
||||
* 说明:从转储文件中压缩和过滤不必要的组件。
|
||||
|
||||
_Learn more in Pratyush Anand's [KDUMP: Usage and Internals][11] talk at LinuxCon ContainerCon CloudOpen China on June 20, 2017._
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
作者简介:
|
||||
|
||||
Pratyush Anand - Pratyush 正在与 Red Hat 合作,作为 Linux 内核通才。他主要负责 Red Hat 产品和上游所面临的几个 kexec/kdump 问题。他还处理 Red Hat 支持的 ARM64 平台周围的其他内核调试、跟踪和性能问题。除了 Linux 内核,他还在上游的 kexec-tools 和 makedumpfile 项目中做出了贡献。他是一名开源爱好者,并在教育机构举办志愿者讲座,促进了 FOSS。
|
||||
-------
|
||||
|
||||
|
||||
via: https://opensource.com/article/17/6/kdump-usage-and-internals
|
||||
|
||||
作者:[Pratyush Anand ][a]
|
||||
译者:[firmianay](https://github.com/firmianay)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/pratyushanand
|
||||
[1]:https://opensource.com/resources/what-is-linux?src=linux_resource_menu
|
||||
[2]:https://opensource.com/resources/what-are-linux-containers?src=linux_resource_menu
|
||||
[3]:https://developers.redhat.com/promotions/linux-cheatsheet/?intcmp=7016000000127cYAAQ
|
||||
[4]:https://developers.redhat.com/cheat-sheet/advanced-linux-commands-cheatsheet?src=linux_resource_menu&intcmp=7016000000127cYAAQ
|
||||
[5]:https://opensource.com/tags/linux?src=linux_resource_menu
|
||||
[6]:https://opensource.com/article/17/6/kdump-usage-and-internals?rate=7i_-TnAGi8Q9GR7fhULKlQUNJw8KWgzadgMY9TDuiAY
|
||||
[7]:mailto:kexec@lists.fedoraproject.org
|
||||
[8]:mailto:kexec@lists.infradead.org
|
||||
[9]:mailto:kexec@lists.infradead.org
|
||||
[10]:mailto:kexec@lists.infradead.org
|
||||
[11]:http://sched.co/AVB4
|
||||
[12]:https://opensource.com/user/143191/feed
|
||||
[13]:https://pixabay.com/en/penguins-emperor-antarctic-life-429136/
|
||||
[14]:https://pixabay.com/en/shoe-boots-home-boots-house-1519804/
|
||||
[15]:https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[16]:https://www.kernel.org/doc/Documentation/kdump/kdump.txt
|
||||
[17]:https://linux.die.net/man/8/kexec
|
||||
[18]:https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt
|
||||
[19]:https://opensource.com/users/pratyushanand
|
||||
Reference in New Issue
Block a user