|
?
|
inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。 有时,人们使用了一些不同的术语,如 inode 和索引编号 (inumber)。这两个术语非常相似,并且相互关联,但它们所指的并不是同样的概念。inode 指的是数据结构;而索引编号实际上是 inode 的标识编号,因此也称其为inode 编号 或者索引编号。索引编号只是文件相关信息中一项重要的内容。下一个部分将介绍 inode 中的其他一些属性。 inode 表包含一份清单,其中列出了对应文件系统的所有 inode 编号。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改。 例如,使用 vi 来编辑一个文件。当您键入 vi <filename> 时,在 inode 表中找到 inode 编号之后,才允许您打开该 inode 。在 vi 的编辑会话期间,更改了该 inode 中的某些属性,当您完成操作并键入 :wq 时,将关闭并释放该 inode 。通过这种方式,如果两个用户试图对同一个文件进行编辑, inode 已经在第一个编辑会话期间分配给了另一个用户 ID (UID),因此第二个编辑任务就必须等待,直到该 inode 释放为止。
?
?
1. inode 是作甚么的???
??
??一个 filesystem 可以粗略地分成 inode table 与 data area 两部份.??
??inode table 上有许多的 inode,每个 inode 分别 记录一个档案的属性,??
??与这个档案分布在哪些 datablock 上??
??
2. 一个 inode 有多大呢???
??
??128 byte!??
??
3. inode 和 data area 的关系??
??
??在 new filesystem 时,通常会有一个参数,用来描述要分配多少比例的空间给??
??inode table. 举例来说,??
??
??newfs -i 2048??
??
??是指 file system 中,每分配 2048 byte 给 data area,就分配一个 inode??
??但是一个 inode 就并不是一定就用掉 2048 byte,也不是说 files allocation??
??的最小单位是 2048 byte,它仅仅只是代表 filesystem 中??
??inode table/data area 分配空间的比例是 128/2048 也就是 1/16??
??(换个角度想,我们可以想成是预估 filesystem 中 file 平均大小是 2048 byte)??
??
??如果 inode table 太小,那么在每个档案都很小的时候,就会发生 inode 用光 而??
??datablock 还剩一堆的情形.??
??
4. file allocation 的最小单位 和 inode 多少有没有关系呢???
??
??没有关系!??
??
??FFS 中真正的最小单位是 fragment size 也就是我们在 new filesystem 时用的??
??
??newfs -b 8192 -f 1024??
? ?? ?? ?? ?? ? ^^^^^^^^??
??ps: -b 8192 代表 blocksize=8192,这种"较大单位"是用来加速大档案的存取用的??
??
在 FreeBSD 中,内定的是 -i 4096 -b 8192 -f 1024. 如果您要架 bbs/new 的话??
可以考虑用 -i 1024 -b4096 -f1024??
??
unixer??
??
============================================================================??
From:?[email?protected]?(Ji,Wen-Jie)??
Newsgroups: tw.bbs.comp.386bsd??
Subject: Re: HELP !! The parameter of newfs??
Date: Thu,12 Dec 1996 01:39:31 GMT??
??
? ?? ???没关系,我自己找到答案了,写在此让大家分享一下.??
? ?? ???所谓 block size & fragment size,这是属于 file system??
? ?? ???的一种解决方案. 自4.3 BSD,BSD 用这种方法来解决档案 fragment??
? ?? ???的问题??
? ?? ?? ?? ?? ? 先假设??a block size= 4K,a fragment size = 256Bytes.??
? ?? ???假如你现在要将一个 1K 的新档案写入 file system,FS 会把它存入 4??
? ?? ???个fragment,而不会存入 block,一但这个档案继续被 append 增加到 4K??
? ?? ???时,FS 会将它转存到一个 block中,而原来的 16 个fragments 就会被 clean??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? ^^^^^^^^^^^^^^^^^^^^??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?因为当你的档案大到 4K 时,它占用??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?了 16 (4K / 256 bytes) 个 fragments??
? ?? ?? ?? ?? ? 再举个例子,如果现在又存了一个新的 4.1K 的档案,FS 会分配??
? ?? ???一个 block 及 4个 fragment 给 这个档案,??
? ?? ???因为 1 block + 4 fragments = 4 K + 256 bytes * 4 = 4.1K??
??
? ?? ???所以,有此可知,对于一台 news server,bbs,或是会有大量的小档案存取时,??
? ?? ???为了降低 FS 的空间耗损率,应该采用 -b 4096 -f 256,??
? ?? ???而不要采用预设值的 -b 8192 -f 1024,因为大部分的信件都不超过 512 bytes,??
? ?? ???有些更不超过 256 bytes,但是这样可能会降低存取的速度.但我相信不严重??
? ?? ???有兴趣的人可以试试. ?
?
一:
设置crontab 时提示No space left on device
用df -k 检查还有空间
用df -i??显示 /var 已占用100%,如果inode耗尽,则系统上将不能创建文件。
在/var/spoo/clientmqueue/下有超多的文件 ls 半天没反应
用rm -rf * 会自动跳出root,用xargs来解决。
# cd /var/spool/clientmqueue
# ls | xargs rm -f
原因分析:系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;
解决办法:??将crontab里面的命令后面加上> /dev/null 2>&1
二:
故障现象:
1 when you create a new y or file,system will say : No space left on device
[[email?protected] /var]# mkdir aa
mkdir: cannot create y `aa‘: No space left on device
2 when create crontab for account shelladm,you will receive error information as follows:
"crontab.6655" 1L,13C written
crontab: installing new crontab
cron/tmp.6655: No space left on device
crontab: edits left in /tmp/crontab.6655
处理步骤:
1 检查分区使用率
[[email?protected] ~]# df -lk
Filesystem? ?? ?? ???1K-blocks? ?? ?Used Available Use% Mounted on
/dev/hda2? ?? ?? ?? ???3020172? ? 136008? ?2730744? ?5% /
/dev/hda1? ?? ?? ?? ?? ?101089? ?? ?9378? ???86492??10% /boot
/dev/hda7? ?? ?? ?? ?105708092??38996880??61341488??39% /b2006
none? ?? ?? ?? ?? ?? ? 1028548? ?? ?? ?0? ?1028548? ?0% /dev/shm
/dev/hda3? ?? ?? ?? ???3020172? ?1421092? ?1445660??50% /usr
/dev/hda6? ?? ?? ?? ?? ?497829? ? 371795? ? 100332??79% /var
分区/var的使用率只有79%,系统有空间可以用
2 检查/var/lock下的文件,删除/var/lock/subsys/nfs后,touch /var/aa,成功创建文件,删除/var/aa
3 发现删除/var/lock下的任意一个文件后
[[email?protected] /var]#touch /var/aa? ?? ???-------------------成功
[[email?protected] /var]# touch aa1? ?? ?? ?? ?? ? -------------------失败
touch: creating `aa1‘: No space left on device
4 将检查扩大到/var下的其他目录,
[[email?protected] icons]# cd /var/www/icons
[[email?protected] icons]# mv a.gif /tmp
[[email?protected] icons]# mv a.png /tmp? ???-------------------移走两个文件
[[email?protected] icons]# df -li
[[email?protected] icons]# touch aa
[[email?protected] icons]# touch bb
[[email?protected] icons]# touch cc
touch: creating `cc‘: No space left on device -----------只能创建两个文件,当创建第三个文件时,出错
5 怀疑分区/var的inode用尽导致上述问题,检查inode使用率
[[email?protected] icons]# df -li
Filesystem? ?? ?? ?? ?Inodes? ?IUsed? ?IFree IUse% Mounted on
/dev/hda2? ?? ?? ?? ? 384000? ?23698??360302? ? 7% /
/dev/hda1? ?? ?? ?? ???26104? ?? ?41? ?26063? ? 1% /boot
/dev/hda7? ?? ?? ?? ?13434880? ? 7964 13426916? ? 1% /b2006
none? ?? ?? ?? ?? ?? ?257137? ?? ? 1??257136? ? 1% /dev/shm
/dev/hda3? ?? ?? ?? ? 384000? ?78026??305974? ?21% /usr
/dev/hda6? ?? ?? ?? ? 128520??128520? ?? ? 0??100% /var
发现/var的inode使用率已经达到100%,空余的inode为0
6 分区/var没有配置quota,平均每个inode的占用空间为:497829k(var size)/128520(inodes)=3.87k,说明分区的最小block为4k,无法增加inode限额。
7 发现/var/spool/clientmqueue下面有太多的文件,共有127679个,占用了127679/128520(inodes)=99.3%的inode
??系统的邮件配置有问题,导致系统发出的邮件堆积在队列中,占用的大量的inode.
处理方法:确认/var/spool/clientmqueue下的文件已经无用后,删除之。然后/var写入正常。
? ?? ?? ? 最好的解决办法是重新设置系统邮件,使其能正常发送。
删除文件后的inode使用情况
[[email?protected] clientmqueue]# df -li
Filesystem? ?? ?? ?? ?Inodes? ?IUsed? ?IFree IUse% Mounted on
/dev/hda2? ?? ?? ?? ? 384000? ?23698??360302? ? 7% /
/dev/hda1? ?? ?? ?? ???26104? ?? ?41? ?26063? ? 1% /boot
/dev/hda7? ?? ?? ?? ?13434880? ? 7964 13426916? ? 1% /b2006
none? ?? ?? ?? ?? ?? ?257137? ?? ? 1??257136? ? 1% /dev/shm
/dev/hda3? ?? ?? ?? ? 384000? ?78026??305974? ?21% /usr
/dev/hda6? ?? ?? ?? ? 128520? ? 4561??123959? ? 4% /var
结论:分区/var的inode全部用尽,free inode为0,导致无法创建新的文件或目录,以后遇到类似的问题要注意
? ?? ?用df -li 检查inode的使用情况。
=========================
http://blog.csdn.net/hunanchenxingyu/article/details/38587633
1、现象
(编辑:安卓应用网_ASP源码网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!