免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2394 | 回复: 0
打印 上一主题 下一主题

inode [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-06 19:21 |只看该作者 |倒序浏览

贴一点学习资料, 没事的看一看吧!
[code]
Inode一致性
Fsck命令为每个inode检测分派状态,类型,连接计数器,复制块,错误块,inode长度和块计数器。任何未使用的inode和非0的连接计数器都链接到文件系统的lost+found目录。
数据块一致性
fsck命令不能检测普通的数据块,但是可以检测目录数据块。在这个数据块中,为inode指针检测未分配的块,标 记为以用的未分配的块,标记为空闲的未分配的块,“.”和“..”和目录没有链节到文件系统的错误的inode。这些目录是连接返回到文件系统的lost +found目录。
柱头组块一致性
fsck命令检测已经要求inode的未分配的数据块,未分配的数据块计数器和未分配的inode计数器。
Fsck的状态
Fsck命令为每个在/etc/vfstab文件中包括设备到fsck和fsck通行条目的文件系统运行通过5个状态。这5个状态是:
Phase 1:检测块和长度,检测矛盾的inode
Phase 2:检测路径名,检测目录inode一致性
Phase 3:检测连通性,检测所有目录是否已经连接到文件系统
Phase 4:检测参考计数器,从Phase 2和3比较连接计数器信息,校正误差。
Phase 5:检测柱头组,检测空余块和已经使用inode映象的一致性
非交互式模式
在一个普通系统启动期间,fsck操作在非交互式模式,经常整理查阅或者无记载的模式。
在这个过程期间,fsck仅修复可以修复的问题。
可是,如果一个较大的问题被发现,并且产生了结果,fsck程序就中断并且使系统进入但用户模式。用户必须运行交互式的fsck来继续。
交互式模式
在这个过程中间,fsck列出每个遇到的问题,下列在下列的纠正建议的动作中,问题需要回答yes或者no
通过回应yes,fsck允许纠正动作并且继续。
回应no,fsck将报告最初的问题,并且提出解决的方法,并且不在继续向前直到用户回应yes。
使用fsck命令
下面的实例中示范root用户如何使用fsck命令来完整的检测文件系统。
。检测单独的没有装配的文件系统,执行下列命令
# fsck /dev/rdsk/c0t0d0s7
这是检测没有加入/etc/vfstab文件的文件系统的唯一方法。
。使用列在/etc/vfstab文件中的文件系统的装配点目录名检测文件系统,执行下列命令
# fsck /opt
fsck发现并修理故障
如果文件系统中显示了问题,用户可以接到来自fsck的警告。下面描述了一些比较多需要采用交互式干涉的文件系统错误。
从新连接一个已经分配的不可引用的文件。
在这个例子中,fsck程序发现一个已经分配的inode,但是不能引用或者不能连接到其他目录。
在RECONNECT?后面回答yes,会导致fsck保存文件到lost+found目录,并且以inode编号命名。
** Phase 3 – Check Connectivity
UNREF FILE I=788 OWNER=root Mode=100644
SIZE=19994 MTIME=Jan 18 10:49 1999
RECONNECT? Y
决定什么类型的文件被移动到lost+found目录中
1.列出文件系统的lost+found目录的内容,比如
# ls /export/home/lost+found
#788
2.决定文件的类型,使用file命令
#  file /export/home/lost+found/#788
/export/home/lost+found/#788:ascii text
3.使用more或者cat命令显示ACSII文本文件的内容。使用strings命令显示二进制文件的内容。如果文件是与一个应用相关的,就必须使用该应用程序来打开这个文件
#  cat /export/home/lost+found/#788
4.如果文件是完整的并且用户知道他属于哪里,文件可以直接拷贝回他应该在的文件系统
校正连接计数器
在这个实例中,fsck程序发现一个目录的inode的连接计数器的数值和实际目录的连接计数器的数值不符。
在ADJUST?后面回答yes,fsck将校正目录inode的连接计数器
** Phase 4 – Check Reference Counts
LINK COUNT DIR I=2 OWNER=root MODE=40755
SIZE=512 MTIME=Jan 18 15:59 1999 COUNT 4 SHOULD BE 3
ADJUST? y
抢救空余列表
在这个实例中,fsck程序发现未分配的块计数器和空余块编号列表中的超级块不符合。
在SALVAGE?后面回答yes,fsck将升级文件系统的超级块的信息。
** Phase 5 – Check Cyl groups
CG 0: BAD MAGIC NUMBER
FREE BLK COUNT(S) WRONG IN SUPERBLK
SALVAGE? y
使用备份的超级块
文件系统不能被装配,超级块碎片是可能的原因。
在系统启动的时候或者手动装配文件系统的时候,显示信息“Can’t mount file system name”表示一个文件系统不可用。例如:
Can’t mount /dev/dsk/c0t0d0s7
如果fsck因为超级块错误而返回一个错误信息,用户必须选择一个超级块来恢复系统。
纠正的动作是运行fsck的-o选项,并且加b标志。标志后面跟超级块号码。
每个文件系统通常有一个预备超级块在32号块上,可以利用他来修复主超级块。
# fsck –o b=32 /dev/rdsk/c1t3d0s0
fsck程序在备份的超级块上提取信息,与实际的文件系统比较并且重建主超级块。
可是如果这个被破坏的块是文件系统的部分。用户必须选择其他的备份超级块使fsck继续。
要列出文件系统所有的备份超级块的位置,就运行newfs –N命令,例如
# newfs –N /dev/rdsk/c#t#d#s#
用户可以使用-N选项来显示出文件系统参数到that would be used来建立即将使用的新文件系统而没有真正的建立文件系统
输出的一部分是列出所有可以被-o参数使用的备份超级块的位置
用户也可以使用任何备份块编号来列出每个备份超级块的内容。
fsck
fsck是可以说是使用次数第一的工具(系统自己使用占90%以上)。它是FS完整性
检查,包括supblk,cylgrpblk,inode.tab,data区等。检查的原理是:冗余发。修
复时按照实际情况调整记录信息。
lost+found目录:在fsck的时候,将找不到父目录的那些文件拷贝到该目录中,并
以i节点号作为文件名。
当系统启动的时候会使用fsck对文件系统进行扫描,并相应的报出扫描结果。例
如:/dev/rdsk/c0t0d0s7 stable等。
后面是Fs的状态。其中,clean表示文件系统umount后无人用,stable表示文件系
统用过,但却是完整的,好的。而出一大堆的话,还有什么fragment %什么的的那
都表示文件系统上有乱的地方,那么就应该进入系统后使用fsck来整理。提起这个
来,我想说说在非法关机后(各种原因),再次启动的时候会有很多的情况,上面
说的是一种情况,再厉害一些是系统只能进入但用户状态,最厉害的是连单用户的
状态都无法进入(肯定是/和/usr区有问题。这是因为fsck对/区的扫描无法通过的
话,系统当然无法启动,而fsck调用的一些函数库又在/usr上。。。。)
当系统的状态是clean,stable和logging的状态的时候(logging??不知道的看上
一课吧)fsck不运行。
2、fsck的使用
本课讲的三个参数:
-o f 对系统进行强制检查,不论系统是否在clean等状态
-o p 非交互式检查并修复文件系统,对有的问题则立即退出
-o b=xx 用来修复超级块的错误,就是将备份的超级块内容拷入超级块中。solaris对
超级块很重视,它的备份有很多,一般的b=32就可以了,如果不行可以使用命令
newfs -N /dev/rdsk/cxtxdxsx来查看超级块的位置,其中任何一个备份块都可使用
3、一些错误的情况
一、RECONNECT
表示目录丢失,可将其存入lost+found中再作转移。回答yes
二、SUPERBLK坏(注意是坏,不是wrong)
修复见上面(如果是wrong就随便了,修不修都可以)
三、CLEAR
删i节点,可能会错
四、REMOVE
删文件,一般给出文件名。file=....
五、ADJUST
调整连接数。实际数与原记录不符。回答yes
六、SALVAGE
自由列表计数不正确。回答yes
(题外话:其实我使用一般都是yes过去的,而且书上说不能在正在mount的文件系统上
操作,否则有可能导致文件系统损坏。但我也没有碰到过用fsck导致发生错误的情况。
不过还是建议大家操作的时候规范一些,否则出错了不要来找我呀。尤其是考试的时候)
普通用户执行su命令时产生错误:Authentication denied.
问题  当普通用户执行su命令su到root或其它普通用户时,产生错误:Authentication denied。
解答 使用命令 ls -l /usr/bin/su检查su文件的权限,正确的权限应为:-r-sr-xr-x root security ...
如果权限不正确,使用以下命令修改:
# cd /usr/bin
# chmod 4555 su
将man命令查看的内容转换成普通文本文件
问题  如何将man命令查看的内容转换成普通文本文件,供打印或进一步查看?
解答 可使用下面的命令将用man查看的ls命令的内容转换为文本文件man.txt:
# man ls | col -b >; man.txt
如何查看某用户共启动了多少进程
ps -ef|grep username|wc –l
如何限制某用户在特定 pty 的访问
用户可以编辑/etc/security/user. For example:
test:
admin = false
admgroups = system
ttys = !/dev/pts/0,ALL
结果是用户test可以在除了pts/0以外的所有端口登录,当test在pts/0登录时,
系统报错You are not allowed to access the system via this terminal.
如何阻止某些用户远程登录,telnet,rlogin
请编辑 /etc/security/user
更改需要限制的用户属性 rlogin = false
当尝试远程登录时,系统报错:Remote logins are not allowed for this account
在AIX 4.x如何清除挂起的tty
为了说明方便,下面的例子假设挂起的tty端口为tty0.
1.确定当前挂起的tty正在操作的进程:
ps -ef | grep tty0
该命令假设返回内容如下:
root 12345 1 0 Aug 29 0 /path/program_name
进程ID (PID) 是"12345". 杀掉该进程:
kill -9 12345
再次运行ps -ef | grep tty0 命令去查看该进程是否被杀掉。
不要使用“-9”的选项去杀掉slattach进程,因为它可能导致AIX操作系统挂起。
注意:如果进程是“getty”, 使用下面命令去杀掉进程:
pdisable tty0
如果上面命令不能成功的杀掉进程,而tty仍然是挂起的,可以使用第二步。
2. 执行下面的命令:
fuser -k /dev/tty0
该命令将杀掉运行在此端口的所有进程,并且显示其PID (进程 ID).
如果上面命令不能成功的杀掉进程,而tty仍然是挂起的,可以使用第三步。
3. 在被挂起的终端的键盘上,键入“Ctrl+Q”. 如果tty仍然挂起,使用第四步。
4. 物理的断开连接端口的设备(连线). 在某些情况下可以释放端口.
注意:前面的一些命令也许不会生效并且报”设备忙“的错误。这是由于一些进程正运行在tty上。如果上面的步骤仍不能释放挂起的tty,最后可以通过重起AIX释放内核去清除此进程。
如何显示格林威治时间
用date -u可以显示格林威治时间
不能增加用户,错误信息为3004-687
在/etc/passwd文件中是否有错误的语法.
丢失“nobody”用户条目或其格式有错误. 其条目应为:
nobody:!:4294967294:4294967294::/:
登录失败次数过多
在用户登录失败次数过多时,超过了失败次数限制,用户将不能继续登录,需修改/etc/security/lastlog中的失败登录次数参数(unsuccessful_login_count)才可。
如何增加文件系统中的inode数目
find / -size 0 -print 删除不必要的0字节文件
增加文件系统大小(鉴于客户的%used是43%,这样会浪费很多空间,不建议使用)
备份文件,重建文件系统,其中参数NBPI(number of bytes per inode)要尽量
小,这样就能在同样大小的文件系统中获得更多的inode
备注:
文件系统中inode的多少由文件系统大小和NBPI(number of bytes per inode)决定
文件系统越大,NBPI越小,那么inode越多,意味能产生的文件和目录越多。
如何平稳地停止AIX系统运行
您可以使用 shutdown 或是 reboot 指令来将服务及系统离线.
shutdown 指令有许多参数来控制如何停止系统. 依照预设值, 它会警告使用者1分钟, 接着终止运行中的处理程序, 同步化档案系统, 并且停止CPU的动作. 您可以用 -r 参数来使系统关机后立即开机, 或是下 reboot 指令.
# shutdown -m +5 系统五分钟后关闭至单一使用者模式
# shutdown -r 关机后重新开机
# shutdown now 立即关机
# shutdown -k 放弃关机
如何建立第二个root用户
1. 添加一个用户
    2. 手工修改/etc/passwd文件中的 user ID 和 group ID
    3. 将user ID改为0.
    如下,可对用户russ做改动:
    将 russ:!:206:1::/u/russ:/bin/ksh
    改为:russ:!:0:0::/u/russ:/bin/ksh
具有root权限的用户可执行一条命令,完成特定的任务。如下你可以建立一个用户(shutdown)负责系统的重启动.
在AIX 3.2.5中:
    shutdown:!:0:0::/u/shutdown:/etc/shutdown -Fr
在AIX 4:
    shutdown:!:0:0::/u/shutdown:/usr/sbin/shutdown -Fr
这个用户一注册,操作系统就会重起。
使用ls或mv *命令时, 产生
"Arguments too long"或"Array list too long"的错误信息
该错误的产生是由于/usr/include/sys/limits.h文件中ARG_MAX参数对应值的限制,最大值为24576,并且无法改变此限制。因此当某目录下的文件数超过24576时,可以使用下面的命令列示、删除或移动所有的文件:
1. 列示文件:
find ; -name "*" | xargs ls -l
2.  删除文件:
find . -name "*" |xargs rm {}
3. 移动所有文件至目标目录:
find ; -name "*" | xargs -I {} mv {} 发表于2008-07-05, 13:31
Johnwoolee
打电话问我如何计算一个固定大小的分区的inodes个数,也就是inodes和blocksize之间的计算关系。
我记得以前我接触过这个问题,记得和一个比率参数有关系。再次参看mkfs.ext3的man手册,记忆唤起来了,同时也增加了新的认识。
mkfs.ext3缺省情况下,是根据blocksize和bytes-per-inode来计算出一个文件系统在格式化时有多少inodes的。不过,我觉得应该之和bytes-per-inode有关,因为mkfs.ext3会根据每一个bytes-per-inode大小来创建一个inode,因此刨除保留块,超级块外,一个分区剩下的大小除以这个bytes-per-inode就大约是inode的个数。
我做了一个实验,3GB大小的磁盘,分别指定blocksize和bytes-per-inode,得到的inode个数列表如下:
---------------------------------------------------------------------------------------
blocksize                bytes-per-inode                 number-inode
---------------------------------------------------------------------------------------
1024                              1024                                3072000
---------------------------------------------------------------------------------------
1024                             2048                                1536000
----------------------------------------------------------------------------------------
1024                              4096                                768000
----------------------------------------------------------------------------------------
2048                             2048                                1537088
----------------------------------------------------------------------------------------
2048                             4096                                768544
---------------------------------------------------------------------------------------
上面的实验数据可以得出下面的结论:
(bytes-per-inode) * (number-inode) =~ 3GB (filesystem size)
因为在mkfs.ext3中,blocksize最小为1024,而bytes-per-inode最小不能小于blocksize,因此指定bytes-per-inode为1024可以获得最大inode个数。
当然,如果你还嫌不够,-N的参数也许能满足变态要求的你,-N表示你来指定希望的inodes个数,这下,你该满足了吧。
不过,也不是不限制的,我尝试指定filesystem size(bytes)个数时,报错了。
root@wgzhao:~# mkfs.ext3 -n -N 3145728000 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
mkfs.ext3: inode_size (128) * inodes_count (3145728000) too big for a
        filesystem with 768000 blocks, specify higher inode_ratio (-i)
        or lower inode count (-N).
当满足inode_size * inodes_count的要求后,不一定能满足其他要求,比如
root@wgzhao:~# mkfs.ext3 -n -N 21420000 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
/dev/sdb: Cannot create filesystem with requested number of inodes while setting up superblock
太大的inodes个数,导致超级块无法创建。
到底最大能为多少为inodes个数, 当不知道的时候,就穷举,我针对我的这个3GB空间大小,得到最后的最大inodes值,为12255232
接下来就是看看12255232这个数字有什么秘密隐藏在里面了。
3145728000 / 12255232 = 256.68 ~= 256
也就是说折算成bytes-per-inode应该是256了。
这样的话,一个分区创建为ext3文件系统时,最大的inode个数大约是
filesystem size (bytes) / 256
为了验证这个结果,我继续做了一个测试,当我把分区扩大到4GB时,inode个数大约应该是
4294967296 / 256 = 16777216 个
# mkfs.ext3 -m 0 -n -N 16318465 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
/dev/sdb: Cannot create filesystem with requested number of inodes while setting up superblock
# mkfs.ext3 -m 0 -n -N 16318464 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
warning: 112 blocks unused.
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
16318464 inodes, 1023888 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=270536704
498 block groups
2056 blocks per group, 2056 fragments per group
32768 inodes per group
Superblock backups stored on blocks:
        2056, 6168, 10280, 14392, 18504, 51400, 55512, 100744, 166536, 257000,
        499608, 705208
实际最大值为16318465,比我预计的小了很多。
4294967296 / 16318465 = 263.1
文件系统                      文件大小限制                    文件系统大小限制
----------------------------------------------------------------------------------------------------
ext2/3(1K bs)      16448 MB (~ 16 GB)     2048 GB (= 2 TiB)
ext2/3(2k bs)       256 GB           8192 GB (= 8 TiB)
ext2/3(4k bs)       2048 GB (= 2 TiB)       8192 GB (= 8 TiB)
ext2/3(8k bs)       65568 GB (~ 64 TiB)     32768 GB (= 32 TiB)
ReiserFS 3.5       2 GB           16384 GB (= 16 TiB)
ReiserFS 3.6(knl2.4)  1 EB           16384 GB (= 16 TiB)
XFS           8 EiB           8 EiB
JFS(512 bs)      8 EiB           512 TiB
JFS(4k bs)       8 EiB           4 PiB
NFSv2 (client side)     2 GB           8 EiB
NFSv3 (client side)     8 EiB           8 EiB
------------------------------------------------------------------------------------------------------
有关ext2/3的更多详细信息,可以
IBM
开发网站上有赵蔚的一篇文章--
Ext2 文件系统的硬盘布局
.
我这里也整理成了pdf,和大家分享.

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66172/showart_1274107.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP