V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
weisoo
V2EX  ›  云计算

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

  •  
  •   weisoo · 2015-02-17 11:09:35 +08:00 · 7970 次点击
    这是一个创建于 3567 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [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倍多

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

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

    恐怕仅有OpenVZ那类,类chroot的可以真正的限制你的INODES了……
    az
        5
    az  
       2015-02-17 11:42:26 +08:00
    有点道理,当初缓存、系统一个盘的收获,阿里云还有30多G剩余空间,就不可以写入任何文件了。
    hjc4869
        6
    hjc4869  
       2015-02-17 11:42:59 +08:00
    @myliyifei
    @wzxjohn
    openvz和xen确实是又vps商决定的吧。。
    az
        7
    az  
       2015-02-17 11:43:08 +08:00
    @wzxjohn 那Aliyun的inode要怎么解决呢?
    ryd994
        8
    ryd994  
       2015-02-17 11:58:56 +08:00
    tune2fs吧
    mahone3297
        9
    mahone3297  
       2015-02-17 12:12:46 +08:00
    @extreme 为什么要限制inode?为了什么?
    leo108
        10
    leo108  
       2015-02-17 12:12:56 +08:00
    好神奇啊,我这边阿里云的系统盘(centos6.6)装了一堆东西(ganglia memcache php),inode才用了167795,占13%,楼主用的啥系统要用那么多inode。inode总数和楼主是一样的1310720。
    msg7086
        11
    msg7086  
       2015-02-17 12:14:24 +08:00
    openvz大多是与母机共享磁盘inode数量,遇上无良的商家,限死你就完了。
    至于kvm机器,完全是自己定义的。
    甚至是不同的文件系统默认的inode都不一样。
    比如你试试xfs,inode上限爆表。
    vimutt
        12
    vimutt  
       2015-02-17 12:17:27 +08:00
    @leo108
    Filesystem Inodes IUsed IFree IUse% Mounted on
    /dev/xvda1 1310720 88228 1222492 7% /
    msg7086
        13
    msg7086  
       2015-02-17 12:17:28 +08:00
    @mahone3297 我没有用过你说的那个阿里云,但是我看介绍似乎是用的KVM。
    如果是KVM的话,那inode设定就应该是你自己的责任了。
    leo108
        14
    leo108  
       2015-02-17 12:20:14 +08:00
    一个比较合理的解释是楼主的某个程序在xvda1盘创建了大量的小文件并删除,但是这个程序却没有关闭打开的文件,这就导致文件已删除但仍然占用inode和磁盘空间的情况。
    azuis
        15
    azuis  
       2015-02-17 12:20:24 +08:00
    inode 数量是格式化的时候自定义的....和你用什么云有什么关系。
    msg7086
        16
    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
        17
    extreme  
       2015-02-17 12:38:15 +08:00
    @mahone3297 不能说是限制吧,是由EXT这种格式的特点,数据不是按顺序写入到BLOCK里面的,需要在INODES里面记录BLOCK的位置,当然不仅是BLOCK的位置信息,还有其它的。
    更多的你通过搜索引擎了解吧,当年看了书,就记得大概的。
    lacrimosa
        18
    lacrimosa  
       2015-02-17 12:57:17 +08:00 via Android
    格式化分区可以自己设这个数量。我设置的数量都在千万以上
    likuku
        19
    likuku  
       2015-02-17 15:29:55 +08:00
    @msg7086 reiserfs 直接没有inode这个概念了...无限
    cst4you
        20
    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的磁盘...钱一下子就上去了.
    kn007
        21
    kn007  
       2015-02-17 18:51:03 +08:00
    [email protected]:~
    > df -lh
    Filesystem Size Used Avail Use% Mounted on
    /dev/vda1 79G 33G 42G 44% /
    tmpfs 1.9G 76K 1.9G 1% /dev/shm
    tmpfs 1.9G 201M 1.7G 11% /tmp

    [email protected]:~
    > df -i
    Filesystem Inodes IUsed IFree IUse% Mounted on
    /dev/vda1 5189760 364107 4825653 8% /
    tmpfs 490321 9 490312 1% /dev/shm
    tmpfs 490321 377 489944 1% /tmp
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2629 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:31 · PVG 12:31 · LAX 20:31 · JFK 23:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.