10月 25

阿里云主机 yum 工具报错处理

试用了阿里云主机系统版本:Centos6.2 x64

安装gcc报错:

# yum install gcc

Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates)
Requires: kernel-headers
Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates)
Requires: kernel-headers >= 2.2.1
You could try using –skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), ‘yum check’ output follows:
kernel-2.6.32-220.13.1.el6.x86_64 has missing requires of kernel-firmware >= (‘0’, ‘2.6.32’, ‘220.13.1.el6’)

解决方法:

# vim /etc/yum.conf 注释
“#exclude=kernel*”

去除检查安装软的依赖

开始安装

# yum clean all

# yum install gcc -y

3月 30

centos 硬盘只读

       通过ftp上传文件失败。直接登录服务器查看,权限都没有问题,直接创建文件,系统也是报系统只读。
       首先卸载分区,然后扫描,结果如下:
# fsck -f /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
fsck.ext3: Attempt to read block from filesystem resulted in short read while trying to open /dev/sdb1
Could this be a zero-length partition?

        很奇怪怎么分区为0呀,是不是主磁道坏了,如果是就比较麻烦了,真实不应该卸载。应该先把需要的数据考出来就好了。只能尝试修复了。之前看多过相关修复的页面如下:
http://www.cyberciti.biz/tips/surviving-a-linux-filesystem-failures.html
修复前先看看,系统日志里是否有些提示,如下:
kernel: sdb: Write Protect is off
kernel: SCSI device sdb: drive cache: write back
       奇怪硬盘被写保护了。直接看看硬盘状态
fdisk -l
      没有查询到相关的硬盘信息。这个就没有办法了,系统认不到,但是全部坏掉的几率不大,因为之前还可以读出文件。重启操作系统。
硬盘又认出来了。做扫描,果然有坏块,修复完毕挂载,一切正常。有惊无险。

       通过资料查询,此种处理为保护数据,应该是比较安全的。
提醒:如果参照面页面进行处理,输入命令“hdparm -W0 /dev/sdb”关闭写缓冲区,这个我没有测试。如果要重启,分区又不是必要的要将/etc/fstab中的扫描部分停掉,以避免因为扫描失败不能进入系统。
http://www.linuxforums.org/forum/red-hat-fedora-linux/136472-possible-sata-related-system-slowdowns.html

3月 11

优化linux资源处理限制

系统报出错误”Too many open files”,说明系统资源调用需要进行调整。

ulimit 通过一些参数选项来管理不同种类的系统资源。

ulimit 命令的格式为:ulimit [options] [limit]

具体的 options 含义以及简单示例可以参考以下表格。

选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
-p 管道缓冲区的大小,以 Kbyts 为单位。 ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。
-s 线程栈大小,以 Kbytes 为单位。 ulimit – s 512;限制线程栈的大小为 512 Kbytes。
-t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。
-u 用户最大可用的进程数。 ulimit – u 64;限制用户最多可以使用 64 个进程。
-v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

可以使用ulimit命令修改系统资源处理限制,但是修改只对当前操作起作用,当用户注销后参数回还原为默认值。可以通过修改系统配置文件使参数生效。

使用管理员权限打开/etc/security/limits.conf

在文件中添加

* soft nofile 8192
* hard nofile 20480

添加后保存文件,再次登录使用ulimit -a命令查看是否修改成功。

修改内容分为四列:

第一列为分配用户,可以为用户名、用户组名(@group) ,统配符 * 表示缺省规则

第二列为执行模式,hard 强制实行由管理员设置由Linux Kernel执行,用户无权改变。
soft 非强制执行,用户可以改变在之前存在的,但是用户注销后参数还原为默认值。

第三列为资源种类:

core – core 文件的大小 (KB)
data – 最大的data大小 (KB)
fsize – maximum filesize (KB)
memlock – max locked-in-memory address space (KB)
nofile – max number of open files
rss – max resident set size (KB)
stack – max stack size (KB)
cpu – max CPU time (MIN)
nproc – max number of processes
as – address space limit
maxlogins – max number of logins for this user.

第四列为数值。

参考文档:

http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/index.html