RHEL6: udev修改block设备的GROUP

通过修改udev的rules文件,可以修改设备的owner和group。
值得注意的是,因为/lib/udev/rules.d/50-udev-default.rules会把block设备的group改为disk.
所以要改block设备的group的话,rules文件需要大于50小于99.

可以新建/etc/udev/rules.d/99-persistent-localdisk.rules这个文件,加入以下规则。

KERNEL=="vda", MODE="640" , GROUP="feichashao"

dirty_ratio与dirty_background_ratio的区别

我是搬运工,搬运Better Linux Disk Caching & Performance with vm.dirty_ratio & vm.dirty_background_ratio这篇博客。
本人实验环境:Red Hat Enterprise Linux Server release 6.5 (Santiago)

参考文档

http://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/


有关Cache

文件缓存是提升性能的重要手段。毋庸置疑,读缓存(Read caching)在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据),而写缓存(Write caching)则相对复杂。Linux内核将写磁盘的操作分解成了,先写缓存,每隔一段时间再异步地将缓存写入磁盘。这提升了IO读写的速度,但存在一定风险。数据没有及时写入磁盘,所以存在数据丢失的风险。

同样,也存在cache被写爆的情况。还可能出现一次性往磁盘写入过多数据,以致使系统卡顿。之所以卡顿,是因为系统认为,缓存太大用异步的方式来不及把它们都写进磁盘,于是切换到同步的方式写入。(异步,即写入的同时进程能正常运行;同步,即写完之前其他进程不能工作)。

好消息是,你可以根据实际情况,对写缓存进行配置。
可以看一下这些参数:

[root@host ~]# sysctl -a | grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000

vm.dirty_background_ratio 是内存可以填充“脏数据”的百分比。这些“脏数据”在稍后是会写入磁盘的,pdflush/flush/kdmflush这些后台进程会稍后清理脏数据。举一个例子,我有32G内存,那么有3.2G的内存可以待着内存里,超过3.2G的话就会有后来进程来清理它。

vm.dirty_ratio 是绝对的脏数据限制,内存里的脏数据百分比不能超过这个值。如果脏数据超过这个数量,新的IO请求将会被阻挡,直到脏数据被写进磁盘。这是造成IO卡顿的重要原因,但这也是保证内存中不会存在过量脏数据的保护机制。

vm.dirty_expire_centisecs 指定脏数据能存活的时间。在这里它的值是30秒。当 pdflush/flush/kdmflush 进行起来时,它会检查是否有数据超过这个时限,如果有则会把它异步地写到磁盘中。毕竟数据在内存里待太久也会有丢失风险。

vm.dirty_writeback_centisecs 指定多长时间 pdflush/flush/kdmflush 这些进程会起来一次。

可以通过下面方式看内存中有多少脏数据:

[root@host ~]# cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 69
nr_writeback 0
nr_writeback_temp 0

这说明了,我有69页的脏数据要写到磁盘里。

继续阅读“dirty_ratio与dirty_background_ratio的区别”

RHEL6: 安装并启用Kdump

参考文档

1. The kdump Crash Recovery Service https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-kdump.html
2. 深入探索 Kdump,第 1 部分:带你走进 Kdump 的世界 http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/
3. 深入探索 Kdump,第 2 部分: Kdump 图形化配置工具 http://www.ibm.com/developerworks/cn/linux/l-cn-kdump2/
4. 深入探索 Kdump,第 3 部分: Kdump 原理探秘 http://www.ibm.com/developerworks/cn/linux/l-cn-kdump3/
5. 深入探索 Kdump,第 4 部分: kdump 的亲密战友 crash http://www.ibm.com/developerworks/cn/linux/l-cn-kdump4/

Kdump、vmcore是什么?

Kdump是一套内核崩溃转储机制。当遇到Kernel Panic的时候,它能将当前内核内存转储出来,转储出来的内存文件叫vmcore.

简单地理解,系统在启动的时候,除了用于正常工作的生产内核,还会启动一个捕获内核(也就是“备胎”)。在生产内核正常运行的时候,捕获内核就安安静静地坐着不干活;当生产内核Panic,捕获内核就会出来,帮生产内核收尸,这条尸就是vmcore。
继续阅读“RHEL6: 安装并启用Kdump”

RHEL6: 升级Kernel

a. 最好不要自行编译内核。直接下载官方的rpm包进行升级即可;
b. 下面是从2.6.32-431升级到2.6.32-504的步骤;

1. 备份重要数据;
2. 下载kernel-2.6.32-504.el6.x86_64.rpm 和 kernel-firmware-2.6.32-504.el6.noarch.rpm ;
3. 升级kernel-firmware;

[root@r6s0 tmp]# rpm -Uvh kernel-firmware-2.6.32-504.el6.noarch.rpm 

4. 安装kernel;

[root@r6s0 tmp]# rpm -ivh kernel-2.6.32-504.el6.x86_64.rpm

5. 检查grub.conf,启动时应以新内核启动;

kernel /vmlinuz-2.6.32-504.el6.x86_64

RHEL6: PAM

PAM可用于各种认证、授权。
下面做两个简单的实验,看看pam_cracklib和pam_tally2的简单用法。

参考文档

1. Linux-PAM page http://www.linux-pam.org/
2. Linux可插拔认证模块的基本概念与架构 http://www.infoq.com/cn/articles/wjl-linux-pluggable-authentication-module
3. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程 http://www.infoq.com/cn/articles/linux-pam-one
继续阅读“RHEL6: PAM”

13 - 读取传感器:数字摄像头

读取摄像头是高潮,运气好的话几行代码一调就出来,不幸的话,整一个多月发现摄像头原来是坏的orz...

时序关系

帧。 帧是一幅完整的图像。以我们所用的数字摄像头为例(型号我忘了),默认设置下1秒有30帧。

场。 一帧包含两个场,奇数场和偶数场。奇数场传送奇数行数据,偶数场传送偶数行数据。如果一帧(一副完整图片)有480行,那么奇数场和偶数场会各有240行,奇数场传第1,3,5....行,传完后到偶数场传2,4,6....行。奇数场和偶数场传送的是同一幅图像的不同行,对提取道路信息来说,只使用奇数场/偶数场的数据就足够了。每一场的开始,会出现一个场中断。

行。 如果一幅图像是640*480,那么一行就有640个像素点。 每一行的开始,会出现一个行中断。
继续阅读“13 - 读取传感器:数字摄像头”