[email?protected]:/extFlash1/rootfs/gentoo# df -i Filesystem?????????? 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上提问的朋友已经自己解决。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|