@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.
+ 0 - 0 | §No space left on device的原因

  看到这个错误,第一个反应是磁盘空间满了;但 df 一看,每个分区的空间都还富余的很。从 munin 的监控图表上看 Filesystem usage 也很平稳,但下面的 Inode usage 就有问题了,其中一个分区的 usage 已经到了100%。赶紧跑到服务器上 df -i 检查,果然是 Inode 耗尽。原来这个分区是用来扔各种日志和临时文件的,其中有某个程序产生的临时文件又小又多,又没有进行定时回滚,造成在磁盘空间耗尽之前文件系统的 Inode 就被用光了。

  Linux/Unix like OS 的文件系统中每个目录树中的节点并不是像 Windows 那样直接包含文件的具体信息,而只包含了文件名和 Inode number 。通过 Inode number 所找到对应于文件名的 Inode 节点中才真正记录了文件的大小/物理地址/所有者/访问权限/时间戳/被硬链接的次数等实际的 metadata 。因此你可以在 Linux 系统中通过硬链接( hard link ) 的方式给某个文件创建无数个位于不同目录下的文件名,而实际的文件数据只需要一份拷贝。

  但也正因为这种文件系统的结构,当你在 Linux 中进行 IO 操作的时候,需要的资源除了磁盘空间以外,还要有剩余的 Inode 才行。缺省情况下, Linux 在系统安装过程中按照1个 Inode 对应 2k 磁盘空间来计算每个分区的最大 Inode 数。一旦文件系统创建之后,每个分区可用 Inode 数就无法进行动态调整。

  正常来说,一般不太会出现某个分区的 Inode 耗尽而磁盘空间尚余的情况,除非像我碰到的这样垃圾小文件疯长而又没进行有效的清理。但如果确实需要的话,可以在创建文件系统(比如用 mke2fs )的时候根据实际需要来调整这个参数(比如分区如果用于存放超大视频文件的话 Inode 的数量可以少一些;如果打算存放的文件是大量小于 2k 的迷你文件的话就要考虑多创建一些 Inode)。

  附:Inode Definition by The Linux Information Project

  其它人碰到的 No space left on device 原因:

  超出系统中同时运行的最大 message queue 个数限制 : 在 root 下用 sysctl kernel.msgmni 检查该参数, sysctl -w kernel.msgmni=XXX 重新设定即可。

  cvs 异常断开的连接在 /tmp 目录下留下大量的临时文件导致 /tmp 目录满

标签 ( 开发/理论 ) :
+ 1 - 0 | §C#中的MD5
C# 中的 System.Security.Cryptography.MD5 只提供返回 hash 字节数组的方法,而像 PHP 的 md5 函数缺省返回的都是长度为32的16进制字符串(到了 php5 之后才增加了可选参数允许调用者得到长度为16的二进制数据)。  查看全文
标签 ( JAVA/C++ ) :
+ 0 - 0 | §RunAsUser for MSP ignored 错误

sendmail 不知道啥时候又不工作了,上次是 unknown user smmsp ,这回是 RunAsUser for MSP ignored

WARNING: RunAsUser for MSP ignored, check group ids (egid=502, want=51)
can not chdir(/var/spool/clientmqueue/): Permission denied
Program mode requires special privileges, e.g., root or TrustedUser.

据说是因为 sendmail 有时候会在对用户/组名进行对应的时候出错,所以需要把 /etc/mail/submit.cf 里面缺省的配置行

O RunAsUser=smmsp

改成直接使用 smmsp 对应的用户/组 ID的形式:

O RunAsUser=51:51

照方抓药,结果是错误依旧。看来这个问题应该是老版本 sendmail 的问题 ... OrZ

Google 来 Google 去,终于找到个新鲜的说法

It would be worth a careful examination of ${SOURCE}/sendmail/SECURITY,
especially the recommended perms :

--- begin quote ---
-r-xr-sr-x root  smmsp ... /PATH/TO/sendmail
drwxrwx--- smmsp smmsp ... /var/spool/clientmqueue
drwx------ root  wheel ... /var/spool/mqueue
-r--r--r-- root  wheel ... /etc/mail/sendmail.cf
-r--r--r-- root  wheel ... /etc/mail/submit.cf


[Notice: On some OS "wheel" is not used but "bin" or "root" instead,
however, this is not important here.]

That is, the owner of sendmail is root, the group is smmsp, and the binary
is set-group-ID. The client mail queue is owned by smmsp with group smmsp
and is group writable. The client mail queue directory must be writable by
smmsp, but it must not be accessible for others. That is, do not use world
read or execute permissions. In submit.cf the option UseMSP must be set,
and QueueFileMode must be set to 0660
.
--- end quote ---

检查下来,clientmqueuemqueue 目录的权限都没问题,唯独 sendmail 的主程序经过了几次 link :

which sendmail
/usr/sbin/sendmail    -> /etc/alternatives/mta
/etc/alternatives/mta -> /usr/sbin/sendmail.sendmail

而这个 /usr/sbin/sendmail.sendmail 的权限竟然是

-rwxr-xr-x  1 root root ... /usr/sbin/sendmail.sendmail

于是

chown root.smmsp /usr/sbin/sendmail.sendmail
chmod g+s /usr/sbin/sendmail.sendmail
/etc/init.d/sendmail stop
/etc/init.d/sendmail start

再尝试发邮件,搞定。

+ 0 - 0 | §C#调用VC++.net托管库程序集DLL
Could not load file or assembly '... ...' or one of its dependencies. 由于应用程序配置不正确,应用程序未能启动 ...  查看全文
标签 ( 开发/理论 ) :
+ 0 - 0 | §绍兴自驾游
上个月开着凯越跑绍兴FB了两天,海底光缆一断就给震到07年才来整理。。。  查看全文
标签 ( 数码影像 ) :
+ 0 - 0 | §新年新气象

2007年的第一天,似乎一切海底光缆带来的影响都在恢复正常。好兆头。

接下来抽空想做的第一件事,是给 Blog 加上通过email来发日志的功能...

Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号