| [email?protected]:/extFlash1/rootfs/gentoo# df -iFilesystem?????????? Inodes? IUsed? IFree IUse% Mounted on
 /dev/sda2?????????? 1179648 210218 969430?? 18% /
 udev???????????????? 124795??? 532 124263??? 1% /dev
 tmpfs??????????????? 126991??? 455 126536??? 1% /run
 none???????????????? 126991????? 6 126985??? 1% /run/lock
 none???????????????? 126991????? 1 126990??? 1% /run/shm
 /dev/sda5???????????? 24096??? 231? 23865??? 1% /boot
 /dev/sdb1??????????? 655360 317560 337800?? 49% /extFlash1
 /dev/mapper/loop0p2? 222656 222656????? 0? 100% /mnt
 由于文件系统所对应的inode已经全部使用,最终无法给后续复制的文件分配inode。 3、解决方法 重新格式化/dev/mapper/loop0p2,并指定inode数,如下: mkfs.ext4?/dev/mapper/loop0p2? -N 235000 (inode 数根据实际情况估计) ? http://bbs.chinaunix.net/thread-2195775-1-1.html 2.6 inode与ln?
 一个文件包括有名称、内容和管理信息如权限或修改时间。
 管理信息就存放在Inode中,同时存放的还有文件的长度,文件放在磁盘的位置等
 
 查看一个文件的Inode号码
 # ls -i
 654076 test1??
 
 我们用ln使一个链指向一个已有的文件。
 #ln test1 test2
 #ls -i
 654076?test1??654076?test2
 这里test1和test2的Inode号码是一样的。
 也就是说他们其实是同一个文件(Inode号码相同,也即是文件放在磁盘的位置一样),但是具有两个名称。
 这样的好处是可以让一个文件存在不同的目录,或者存在不同的名称。
 对test1的修改也即是对test2的修改。
 # ls -l
 -rw-r--r--??2 root root 29 Dec 29 17:32 test1
 -rw-r--r--??2 root root 29 Dec 29 17:32 test2
 ? ?? ?? ?? ?? ?~~ 这里的2,就表示指向同一个Inode的链接数。
 
 删掉test2
 #ls -l
 -rw-r--r--??1 root root 29 Dec 29 17:32 test1
 
 或许会有疑惑,既然test1和test2是同一个文件,为什么删除test2,test1还在呢?
 在这种情况,删除test2只是删除了一条指向654076这个Inode的一个链接。
 文件依然存在。只有当最后一条链被删除时,即指向Inode的链接数为0时,文件才被删除。
 
 # ln /boot/grub/grub.conf /home/test/grub
 ln: creating hard link `grub‘ to `/boot/grub/grub.conf‘: Invalid cross-device link
 
 在这里,我的系统分了/,/boot,等分区
 ln有一个问题就是不能跨设备(分区或者文件子系统)创建链接,一是因为分区可以被mount和umount,
 跨分区的硬链接在分区umount会带来一些麻烦,另外每个分区的Inode值不相同。
 
 昨天看见有个帖说,除了swap区,可以把所有的磁盘分成一个区。
 但是这样当一个分区出现文件系统错误,可能所有的数据都没有了。
 而划分多个分区,每个分区的Inode不同。即使某个分区的数据错误,也不至于影响到整个系统。
 
 跨设备创建链接,可以使用
 #ln -s /test /home/test/test
 
 # ls -li /test
 13 -rw-r--r--??1 root root 0 Dec 29 17:45 /test
 
 # ls -li /home/test/test
 1697478 lrwxrwxrwx??1 root root 5 Dec 29 17:46 /home/test/test -> /test
 
 这样就是一个软链接,它是可以跨设备的,在文件类型这里会显示l
 可以看到它们的Inode号码是不同的,而且链接的数目分别各为1
 因此它们并不是同一个文件。
 
 在软链接的情况下,修改链接到的文件/home/test/test,也修改了被链接的文件/test。
 但这种方式和硬链接是不同的。这是通过某种机制来实现同步。而不是同一个文件的修改。
 
 删除链接到的文件,对被链接文件没有任何影响。
 而删除被链接文件/test,链接到的文件依然存在,但是会闪烁,提示被链接的文件不存在了
 也不能读取该文件了
 #rm /test
 # ls -il /home/test/test
 1697478 lrwxrwxrwx??1 root root 5 Dec 29 17:51 /home/test/test -> /test
 # more /home/test/test
 /home/test/test: No such file or directory
 
 事实上/home/test/test是存在的,作为一种特殊的文件类型为l的文件。
 只不过软链接的一些规则决定了它不可读。
 
 为了加深对文件Inode的理解,可以从mv和cp文件来说明:
 
 # cp test1 test2
 # ls -i
 654076 test1??654081 test2
 
 这两个文件Inode值不一样,cp的实质是复制创建了一个新文件
 
 #mv??test1 test3
 #ls -i
 654076 test3
 
 跟上面的比较,test1和test3的Inode是相同。
 所以mv只是更改了文件的名称,也即是访问文件的入口
 它们是指向同一个位置磁盘上的文件。
 
 但是如果mv一个文件到另一个分区。
 如前面所讲,不同分区的Inode值是不同的。
 # ls -il /root/fs/test
 654076 -rw-r--r--??1 root root 29 Dec 29 17:32 /home/fs/test
 # mv test /boot/test
 # ls -il /boot/test
 16 -rw-r--r--??1 root root 29 Dec 29 17:32 /boot/test
 
 所以mv文件到不同的分区,是删除掉原分区的文件之后在另外一个分区重新创建这个文件。
 因此有了一个不同的Inode值。
 
 2.7 调整Inode数量
 另外,每个分区的Inode数目是有限的。
 可以使用df -i来查看
 
 # df -i
 Filesystem? ?? ?? ?? ?Inodes? ?IUsed? ?IFree IUse% Mounted on
 /dev/mapper/VolGroup00-LogVol00
 ? ?? ?? ?? ?? ?? ?? ?1958400? ?97435 1860965? ? 5% /
 /dev/sda1? ?? ?? ?? ???26104? ?? ?32? ?26072? ? 1% /boot
 /dev/shm? ?? ?? ?? ?? ?23850? ?? ? 1? ?23849? ? 1% /dev/shm
 
 当一个磁盘分区(文件子系统)的Inode被用光的时候,是无法再创建文件的。
 这种情况在邮件服务器或者BBS这种系统中容易出现,因为用户创建了很多小文件的情况。
 
 要增加Inode的数量只能umount文件系统,然后用mke2fs命令来调整
 
 #mke2fs.ext3 /dev/sda1 [ -N number-of-inodes ]?
 直接指定需要的Inode数目
 或者
 #mke2fs.ext3 /dev/sda1 [ -i bytes-per-inode ]
 调整字节/inode的比例,来达到增加创建inode数目的目的。
 磁盘空间一定的情况下,当然比例越小,能创建的Inode就越多
 
 当然如果你是只有很少但是很大的数据库文件。就可以调高bytes/inode的比例。
 (更多的关于mke2fs的信息,自己去man)
 
 不过注意。调整Inode相当于重新格式化了分区。原有的文件都会丢失
 所以确实需要调整的话,先要备份数据;
 或者在服务器搭建时预先设置好。
 ? ================================ http://www.eygle.com/archives/2007/07/inode_no_space_lefton_device.html 这是一则学习笔记,具体问题ITPUB上提问的朋友已经自己解决。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |