Inode

inode详解 什么时inode? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。 文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件 阅读详情

简介

   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 释放为止。

inode 的结构

  对于经验丰富的 UNIX 开发人员或者管理员来说, inode 的结构相对比较简单,但是可能还有一些您尚不了解的、令人惊讶的有关 inode 的内幕。下面的定义仅给出了 inode 中所包含的、UNIX 用户经常使用的一些重要信息:   ● inode 编号  ● 用来识别文件类型,以及用于 stat C 函数的模式信息   ● 文件的链接数目  ● 属主的 UID  ● 属主的组 ID (GID)  ● 文件的大小  ● 文件所使用的磁盘块的实际数目  ● 最近一次修改的时间  ● 最近一次访问的时间  ● 最近一次更改的时间  从根本上讲, inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外)。可以在 AIX 的 Header 文件 /usr/include/jf/ino.h 中、或者 Web 页面 中可以找到完整的 inode 结构。   以上所列举的信息对于文件来说非常重要,并且在 UNIX 中频繁使用。如果没有这些信息,那么文件将被认为遭到破坏和不可用。   与其他的操作系统相比,UNIX 系统中的目录和文件可能看起来有所不同,但事实并非如此。在 UNIX 中,目录本身就是文件,只是在它们的 inode 中使用了一些附加的设置。 目录 本质上就是一个包含了其他文件的文件。另外,其模式信息中设置了一些相应的标志,以告知系统该文件实际上是一个目录。

使用 inode

  了解如何在 UNIX 中使用 inode 可以节约大量的时间,并提高工作效率。在尚未了解 inode 之前,您可以使用下面的命令,以减少可能碰到的问题。    df 命令  如前所述,当您在 UNIX 中创建一个文件系统时,将为 inode 表分配大约百分之一的总磁盘空间。每次在文件系统中创建一个文件时,都会为该文件分配一个 inode 。通常,与一个文件系统相关联的 inode 的数目足够多,但耗尽 inode 的可能性始终存在。要监视是否发生了这种情况,您可以观察 df 的输出。   使用 df 命令,您可以查看所有已挂载的文件系统或者特定的文件系统。在该命令的输出中,您可以查看各个文件系统中已使用的 inode 的数目,以及文件系统中总体使用情况百分比,如清单 1 中所示。    清单 1. 使用 df 来监视 inode 的使用  
# df -k|head -6
Filesystem 1024-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 229376 138436 40% 4730 13% /
/dev/hd2 8028160 962692 89% 110034 33% /usr
/dev/hd9var 1835008 366400 81% 25829 24% /var
/dev/hd3 524288 523564 1% 98 1% /tmp
/dev/hd1 32768 32416 2% 5 1% /home
  如果由于某种原因,某个文件系统 inode 的使用率达到百分之百,那么您将无法在该文件系统中创建更多的文件、设备、目录等等。对于这种情况,一种解决方案是通过 smitty chfs 命令为该文件系统添加更多的空间,如图 1 所示。另一种解决方案是创建较小的 inode 区段。现在,在增强的日志文件系统 (Enhanced Journal File System) 中,IBM AIX 5L 允许 inode 区段小于 16KB 的缺省大小。请记住,如果您在 AIX 5L 中使用这个选项,那么将无法从较早版本的 AIX 访问该文件系统。    图 1. smitty chfs 命令的结果  ‍
  [1]
istat 和 stat  在 AIX 中检查 inode 的一种快捷的方式是使用 istat 命令。使用这个命令,您可以找到特定文件的索引编号,以及其他的 inode 项目,如权限、文件类型、UID、GID、链接的数目(非符号链接)、文件大小和最近一次更新、最近一次修改以及最近一次访问的时间戳。   清单 2 显示了 AIX 中文件 /usr/bin/ksh 的 inode 信息。    清单 2. /usr/bin/ksh 的 inode 信息  
# istat /usr/bin/ksh
Inode 18150 on device 10/8 File
Protection: r-xr-xr-x
Owner: 2(bin) Group: 2(bin)
Link count: 5 Length 237804 bytes
Last updated: Wed Oct 24 17:37:10 EDT 2007
Last modified: Wed Apr 18 23:58:06 EDT 2007
Last accessed: Mon Apr 28 11:25:35 EDT 2008
  除了显示来自 istat 的标准信息之外,现在您还知道了 /usr/bin/ksh 对应的索引编号。如果您同时还找到了该文件所处的逻辑卷,那么甚至可以显示更多的信息。要查找该信息,一种方式是通过使用 df 命令来查看该文件位于哪个已挂载的文件系统中:   
# df /usr/binFilesystem 512-blocks Free %Used Iused %Iused Mounted on/dev/hd2 16056320 1925384 89% 110034 33% /usr
  文件 /usr/bin/ksh 位于目录 /usr/bin 中。查看 df 命令的输出,您可以发现,目录 /usr/bin 包含于 /usr 文件系统中,并且 /usr 文件系统位于逻辑卷 /dev/hd2 之中。现在,您已经知道了索引编号和逻辑卷的名称,那么就可以将这两个信息项作为参数来使用 istat,这样一来,您可以确定组成该文件的磁盘块的十六进制地址,如清单 3 中所示。    清单 3. 确定文件磁盘块的十六进制地址  
# istat 18150 /dev/hd2
Inode 18150 on device 10/8 File
Protection: r-xr-xr-x
Owner: 2(bin) Group: 2(bin)
Link count: 5 Length 237804 bytes
Last updated: Wed Oct 24 17:37:10 EDT 2007
Last modified: Wed Apr 18 23:58:06 EDT 2007
Last accessed: Mon Apr 28 11:44:20 EDT 2008
Block pointers (hexadecimal):
11620 ef8c0
  Linux 提供了其特有的 istat 版本:stat。Linux stat 命令可以显示类似的信息,并且还包括一些在 AIX istat 命令中没有提供的命令开关:   
# stat /bin/bash File: `/bin/bash' Size: 722684 Blocks: 1432 IO Block: 4096 regular fileDevice: fd00h/64768d Inode: 12799859 Links: 1Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2008-04-06 19:13:50.000000000 -0400Modify: 2006-07-12 03:11:53.000000000 -0400Change: 2007-11-22 04:05:30.000000000 -0500
   ls 命令  在您的日常工作中总会碰到这样的情况,难以删除或者管理某些文件,因为这些文件的文件名中使用了短横线或者其他特殊字符、或者其文件名完全不正确。这很可能是有人对该文件进行了错误命名。   因为 UNIX 中的大多数命令,包括开关或者选项在内,都是以连字符 (-) 或者双连字符 (--) 开头的,很难使用诸如 rm、mv 和 cp 之类常用的命令来操作这些文件。幸运的是,某些命令提供了一些选项,以用来显示相关文件所关联的 inode 的索引编号。ls 命令就提供了一个这样的选项:   
# ls - -- -p fileA fileB fileC fileDfileE fileF fileG fileH fileI fileJ fileK fileL
  使用 ls -i 命令,您可以看到文件名称旁边的索引编号,如清单 4 中所示。现在,您已经知道了文件的索引编号,那么就可以很容易地操作该文件了。    清单 4. 查看文件的索引编号  
# ls –i
38988 38991 -p 38984 fileC 38982 fileF 38977 fileI 38978 fileL
38989 - 38980 fileA 38986 fileD 38983 fileG 38987 fileJ
38990 -- 38979 fileB 38976 fileE 38985 fileH 38981 fileK
   find 命令  使用 UNIX find 命令,您可以完成使用 ls 命令所开始的工作。对于要进行操作的文件,您已经知道了它们的索引编号,那么就可以开始进行相应的操作了!   要删除看似无名的文件,您只需要使用 find 和 -inum 开关对索引编号和文件进行定位。然后,在找到该文件之后,使用 find 和 -exec 开关删除该文件:   
# find . -inum 38988 -exec rm {} \;
  要对该文件进行重命名,可以再次进行相同的操作,但这一次使用 mv 而不是 rm:   
# find . -inum 38989 -exec mv {} fileM \;
  为了验证取得了预期的结果,只需要再次使用 ls -i 命令:   
# ls -i38990 -- 38979 fileB 38976 fileE 38985 fileH 38981 fileK38991 -p 38984 fileC 38982 fileF 38977 fileI 38978 fileL38980 fileA 38986 fileD 38983 fileG 38987 fileJ 38989 fileM
   fsck 命令  不幸的是,硬件设备不可能一直使用下去,系统可能会在使用多年后出现故障。当发生这种情况,以及由于电源故障或者某些其他问题而导致操作系统异常关闭的时候,您可能会在还原系统备份时碰到一些在崩溃期间处于打开状态的文件,并且现在需要对其加以处理。此时,您可能会碰到一些需要修复 inode 或者存在错误的消息。如果发生这种状况,那么 fsck 命令可以用来救急!您可以使用 fsck 来修复文件系统或者修正受损的 inode ,而不是还原系统、或者甚至重新构建操作系统。   下面的命令可以尝试修复逻辑卷 /dev/hd1:  
# fsck –p /dev/hd1 –y
  通过使用 fsck 命令,您还可以缩小受损 inode 的搜索范围。如果您正在搜索一个特定的 inode ,那么可以使用带 -ii-NodeNumber 开关的 fsck 命令。

结束语

  如果没有 inode ,那么 UNIX 中的文件和目录将根本无法使用。希望在阅读完本文之后,您可以更好地了解 inode 、它们对于 AIX 系统的重要性,以及如何管理它们。您可能会对 df 命令的看法大为改观。
【Linux】ubuntu下安装iNode 1. 随便选个地方放置iNode安装包,比如我就放在home/usrname/下,建议不放在文件系统下,可能会遇到很多权限问题。     安装包下载地址:http://helpdesk.sysu.edu.cn/download 2. 进入安装文件所在目录,解压 Linux iNode 安装文件,命令: tar -zxvf iNodeClient_Linux.tar.gz或者 阅读详情

相关推荐

图解linux中Inode-分析Linux如何通过Inode读取磁盘

1、什么是inode? 首先要明白,linux中所有的东西都是文件,不管是目录还是命令 操作系统读硬盘的时候,为了提高效率,一次性读取一个block(常见大小4KB),一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位 而Inode就是帮助linux系统快速定位到指定文件而创建的额特殊的文件

Leo的专栏 1万+

磁盘空间了情况处理

今天服务器无法操作,查看磁盘信息,内存信息,cpu信息都是的,重启后,都说磁盘了,无法写device,用命令df -i查看inodes信息,发现inodes已用尽。df -h磁盘空间没有使用命令可以查看各个文件夹的大小排序:进入对应文件夹进行查询,排序前12条,查询大文件夹 du -hm --max-depth=2 | sort -nr | head -12查询一个大文件find . -typ

羽毛的思考 1152

ubuntu 安装iNode客户端

最近喜欢上了ubuntu的华丽和自由精神,于是wubi安装了ubuntu(ps:wubi安装的时候选择的安装空间大一点,否则后来就要用lvmp来扩展了),可是问题出来了,我是校园网用户,通过iNode客户端上网,没办法只好研究ubuntu下的iNode,运气不错,找到了合适的版本,于是开始了我的快乐的安装过程: 1.找到合适的客户端:网上有一个朋友贡献出了网络下载 QQ:1540934437,密码:123456u(注意素质别乱改,为了更多的linux爱好者) 2.首先我是在我的名字的文件夹下新建了两个

April 5286

inode是什么

一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。 文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存..

foxkingwuyuan的博客 1万+

内存中inode磁盘inode

在容易引起混淆的地方我将把把内存中的inode结构称为VFSinode,而文件系统以EXT2为代表,把Ext2 inode作为磁盘上的inode代表。 首先需要分别对内存中的inode磁盘上的inode做一下简单的描述: <内存中的inode结构:> VFSinode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本...

u014426028的博客 5324

inode

1.背景 一次在做程序包变更时,程序包已经更新到最新版本,需要重启进程,就一直重启不成功。查看启动的错误日志,发现是一直在创建文件时不成功,当时想法是机器磁盘可能了,查看磁盘使用,发现正常,瞬时就懵逼了,一直想不到是啥问题。突然想到之前有了解过Linux 系统inode 一说,中文译名是:索引节点。创建的每一个文件都有一个inode,这个inode是用来记录文件的基础信息,这个节点资源也是有限的,马上去查了下,发现inode占用已经100% 了,这完犊子了,马上清理,问题解决。这篇就来说说这个吧。 2.

m0_49049914的博客 654

【Linux】 inode 详解

目录 1 inode 和 block 概述 2 inode 内容 2.1 stat 2.2 file 2.3 inode 号码 2.4 inode 大小 2.5 特有现象 2.6 inode 耗尽故障 3 硬链接与软链接 3.1 硬链接 3.2 软链接 1 inode 和 block 概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即......

康师傅没有眼泪 8234

Hadoop-INode的相关分析

2.1          文件系统INODE的基本概念inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。inode分为内存中的inode和文件系统中的inode,为了避免混淆,称前者为VFS inode, 而后者以EXT2为代表,称为Ext2 inode。下面分别对VFS inode与Ext2 inode做一下简单的描述:(1)  VFS i

最牛傻蛋的专栏 6646

Linux iNode

Linux/UNIX的文件系统中,iNode保存了文件的元数据,包括: 文件的字节数文件拥有者的User ID文件的Group ID文件的读、写、执行权限文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。链接数,即有多少文件名指向这个inode文件内容的block的地址 与Oracle数据类似,blo

chncaesar的专栏 1361

Linux中inode简单介绍

大家都知道在Linux中可以使用 tail -f 文件名 实时追踪文件的更新(不了解如何使用tail实时追踪文件更新的小伙伴可以参考我的另一篇博客,点我点我!)。 但是在使用vim+tail -f的时候发现使用vim修改文件之后并不能通过tail -f命令实时追踪到文件的更新(比如日志文件)。 通过查看资料发现这个失效的原因正是和我们今天讲的inode息息相关,(具体原因也可以参考我上边提到的博客),所以去研究了下什么是Linux系统中的inode。 书归正传。。。 操作系统的文件数据除了实际内容之外,通

阳阳的博客 3101

inode结点

一、 机械硬盘 1.1 工作原理 写入时,磁头线圈加电,在周围产生磁场,磁化其下的磁性材料;电流的方向不同,所以磁场的方向也不同,可以表示 0 和 1 的区别。——“电生磁”。 读取时,磁头线圈(不加电)切割磁场线产生感应电流,磁性材料的磁场方向不同,所以产生的感应电流方向也不同。可以表示出 0 和 1 的区别。——“磁生电”。 硬盘保存数据是有时间限制的,当硬盘消磁后,存储在硬盘里的数...

仰望星空 3606

INODE详解

INODE详解 1. 什么是inode? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。“块"的大小,最常见的是4KB,...

橙子的博客 1116

如何根据文件的inode号查找inode数据

1. 根据ls -i 查看文件的inode号 2. 使用debugfs命令查看文件所在磁盘分区的超级块信息 #debugfs /dev/sda2 debugfs: stats ... Inode count:   5152768 Block count:   20590080 Block size:     4096 Inode size:     256 Inodes per

maoji的专栏 9601

理解inode

一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。 文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的.

一口Linux的专栏 1923
上一篇: Bourne Shell C Shell Korn Shell POSIX Shell
下一篇: 远程桌面多用户破解工具
ky000
博客等级 码龄19年 17粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值