看到有人说阿里云磁盘还没满就写入不了文件,我对比了一下各家 VPS 的磁盘 inode 数量

2015-02-17 11:09:35 +08:00
 weisoo
[root@aliyun ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 1310720 979799 330921 75% /
tmpfs 187056 1 187055 1% /dev/shm
/dev/xvdb1 1966080 203565 1762515 11% /mnt
[root@aliyun ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 5.5G 14G 30% /
tmpfs 947M 0 947M 0% /dev/shm
/dev/xvdb1 30G 15G 14G 54% /mnt
首先是阿里云的,请只看系统盘/dev/xvda1,20G空间,只放操作系统,网站文件和数据库等都放其他盘的,居然用了差不多75%的inodes。

-------------------------------------------

[root@linode ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2560896 96768 2464128 4% /
tmpfs 128290 2139 126151 2% /dev/shm
[root@linode ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/xvda 20G 4.8G 14G 26% /
tmpfs 502M 108K 502M 1% /dev/shm
这是Linode.com的,同样是20G硬盘,inodes数量比阿里云多一倍,并且我网站数据也放这个磁盘,只用了4%

---------------------------------------------------

[root@vr ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda3 4817280 399480 4417800 9% /
/dev/xvda1 30120 37 30083 1% /boot
tmpfs 128593 1 128592 1% /dev/shm
[root@vr ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/xvda3 19G 11G 7.6G 59% /
/dev/xvda1 114M 13M 96M 12% /boot
tmpfs 503M 0 503M 0% /dev/shm
这是vr.org的vps,同样是20G硬盘,inodes数量是阿里云的3倍多

--------------------------------------

结论:如果你的文件数量多,还是别用阿里云了
7965 次点击
所在节点    云计算
21 条回复
myliyifei
2015-02-17 11:13:37 +08:00
inode多少为什么是由VPS商决定?
wzxjohn
2015-02-17 11:23:48 +08:00
@myliyifei 因为楼主这是典型的一知半解。。。
mahone3297
2015-02-17 11:30:02 +08:00
@wzxjohn 请详细说说,让我学习学习。。。
extreme
2015-02-17 11:39:08 +08:00
@mahone3297 半虚拟化和全虚拟化的磁盘INODES都是可以自定义的,因为你有权限操作储存设备文件。
不过半虚拟化要更改“/”的确有点难。
当然也不是没有解决办法,别忘了有/dev/loop[0-9]+。

恐怕仅有OpenVZ那类,类chroot的可以真正的限制你的INODES了……
az
2015-02-17 11:42:26 +08:00
有点道理,当初缓存、系统一个盘的收获,阿里云还有30多G剩余空间,就不可以写入任何文件了。
hjc4869
2015-02-17 11:42:59 +08:00
@myliyifei
@wzxjohn
openvz和xen确实是又vps商决定的吧。。
az
2015-02-17 11:43:08 +08:00
@wzxjohn 那Aliyun的inode要怎么解决呢?
ryd994
2015-02-17 11:58:56 +08:00
tune2fs吧
mahone3297
2015-02-17 12:12:46 +08:00
@extreme 为什么要限制inode?为了什么?
leo108
2015-02-17 12:12:56 +08:00
好神奇啊,我这边阿里云的系统盘(centos6.6)装了一堆东西(ganglia memcache php),inode才用了167795,占13%,楼主用的啥系统要用那么多inode。inode总数和楼主是一样的1310720。
msg7086
2015-02-17 12:14:24 +08:00
openvz大多是与母机共享磁盘inode数量,遇上无良的商家,限死你就完了。
至于kvm机器,完全是自己定义的。
甚至是不同的文件系统默认的inode都不一样。
比如你试试xfs,inode上限爆表。
vimutt
2015-02-17 12:17:27 +08:00
@leo108
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 1310720 88228 1222492 7% /
msg7086
2015-02-17 12:17:28 +08:00
@mahone3297 我没有用过你说的那个阿里云,但是我看介绍似乎是用的KVM。
如果是KVM的话,那inode设定就应该是你自己的责任了。
leo108
2015-02-17 12:20:14 +08:00
一个比较合理的解释是楼主的某个程序在xvda1盘创建了大量的小文件并删除,但是这个程序却没有关闭打开的文件,这就导致文件已删除但仍然占用inode和磁盘空间的情况。
azuis
2015-02-17 12:20:24 +08:00
inode 数量是格式化的时候自定义的....和你用什么云有什么关系。
msg7086
2015-02-17 12:33:26 +08:00
实地帮你测试一下。

$ dd if=/dev/zero of=20g bs=100M seek=200 count=0
记录了0+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,0.000151916 秒,0.0 kB/秒

$ mkfs.ext3 20g
mke2fs 1.42.12 (29-Aug-2014)
Discarding device blocks: 完成
Creating filesystem with 5120000 4k blocks and 1281120 inodes
Filesystem UUID: cb7bdc48-63af-4a86-baad-9950ed619d0d
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

$ mount 20g 20

$ df -hTi 20
文件系统 类型 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/loop0 ext3 1.3M 11 1.3M 1% /home/msg7086/20

和你的测试结果完全一致。
然后手动指定inode数量:

$ mkfs.ext3 -N 4096 20g
mke2fs 1.42.12 (29-Aug-2014)
Discarding device blocks: 完成
Creating filesystem with 5120000 4k blocks and 5024 inodes
Filesystem UUID: c26c21b6-18a6-4d82-bd9f-e1fc90926b51
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

$ df -hTi 20
文件系统 类型 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/loop0 ext3 5.0K 11 4.9K 1% /home/msg7086/20

然后我们换个文件系统,比如xfs。

$ mkfs.xfs 20g
meta-data=20g isize=256 agcount=4, agsize=1280000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=5120000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

$ df -hTi 20
文件系统 类型 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/loop0 xfs 20M 3 20M 1% /home/msg7086/20

所以,结论就是你其实不懂你自己在做什么。
extreme
2015-02-17 12:38:15 +08:00
@mahone3297 不能说是限制吧,是由EXT这种格式的特点,数据不是按顺序写入到BLOCK里面的,需要在INODES里面记录BLOCK的位置,当然不仅是BLOCK的位置信息,还有其它的。
更多的你通过搜索引擎了解吧,当年看了书,就记得大概的。
lacrimosa
2015-02-17 12:57:17 +08:00
格式化分区可以自己设这个数量。我设置的数量都在千万以上
likuku
2015-02-17 15:29:55 +08:00
@msg7086 reiserfs 直接没有inode这个概念了...无限
cst4you
2015-02-17 17:33:46 +08:00
root@hidden:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
rootfs 1310720 75915 1234805 6% /
udev 126897 354 126543 1% /dev
tmpfs 128383 275 128108 1% /run
/dev/disk/by-uuid/edb4d685-8d7d-4dab-975b-c233a6733d2c 1310720 75915 1234805 6% /
tmpfs 128383 2 128381 1% /run/lock
tmpfs 128383 2 128381 1% /run/shm
/dev/sdb1 104857600 1301079 103556521 2%

青云默认的系统盘也小, 刚好我的项目有大量<5K的小文件, 一下就爆炸了, 被迫开了个100G的磁盘...钱一下子就上去了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/171453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX