如何在 OpenVZ 和 Xen VPS 上增加 inode
2011年02月1日 | 标签: inode, openvz, xen
前几天有位客户问我们 “能不能增加 inode?”,刚开始误解了客户的意思,以为客户问的是 “能不能增加文件数限制?”,因为 inode 是在格式化分区和创建文件系统的时候决定的,不是在运行时可以更改的内核或系统参数,所以很好奇客户为什么会这么问。接着客户问到 “我在 BurstNet 的 VPS 上可以免费增加 inode,为什么你们的 VPS 不能?”,所以 VPSee 在这里有必要解释一下 OpenVZ 和 Xen 在对待 inode 上的区别,以免大家误认为 OpenVZ 很强大。OpenVZ VPS 是一个虚拟环境(容器),与母机(host)和邻居(同母机的其他 VPS)分享计算资源,有较多的限制,OpenVZ VPS 不能使用自己的内核、不能自己添加或卸载内核模块(所以需要服务商介入加载 tun 模块后才能用 vpn)、不拥有自己的文件系统、甚至 inode 这种资源也需要服务商授权来分配,简单的说母机上有什么就只能用什么(除了可以自己安装程序以外)。在 OpenVZ 上 inode 已经由服务商在安装母机(格式化)的时候就决定了系统的总 inode,然后根据每个不同 OpenVZ VPS 的需要来调整 inode 的大小,服务商再打上免费的标签配上一副严肃专业的口气告诉客户这是 “免费” 的,让客户误认为自己占了大便宜。OpenVZ 服务商能监控客户的 “一切” 活动,客户正在运行什么程序、客户的 VPS 还剩下多少内存和硬盘、CPU 状况等。比如,服务商可以通过 vzctl 命令来查看客户 VPS 1 的硬盘和 inode 消耗情况:
# vzctl exec 1 df -h Filesystem Size Used Avail Use% Mounted on /dev/simfs 10G 386M 9.7G 4% / # vzctl exec 1 df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/simfs 200000 24853 175147 13% /
如果想在 OpenVZ 上增加 inode 的话需要 VPS 服务商的帮助,比如把 VPS 1 的 inode 增加3倍:
# vzctl set 1 --diskinodes $(( 200000*3 )):$(( 220000*3 )) --save Saved parameters for CT 1 # vzctl exec 1 df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/simfs 600000 24853 575147 5% /
如果想在 Xen 上增加 inode 的话和在独立的 Linux 服务器上增加 inode 是一样的,可以增加硬盘分区的容量、重新格式化分区指定需要的 inode 数目等。VPSee 在这里介绍一个比较简单、不破坏原系统(不用重新格式化硬盘)、不增加 VPS 客户成本(不用购买和增加硬盘容量)的替代办法:可以在自己的 Xen VPS 或 Linux 服务器上创建一个大文件来充当硬盘、用 mke2fs -N 指定 inode 数目并格式化这个硬盘、然后挂载到系统里使用,下面是格式化 vpsee0.img 的 inode 数目为默认值和格式化 vpsee1.img 的 inode 数目为 1572864:
# dd if=/dev/zero bs=1024k count=4096 > vpsee0.img # dd if=/dev/zero bs=1024k count=4096 > vpsee1.img # losetup /dev/loop0 vpsee0.img # losetup /dev/loop1 vpsee1.img # mke2fs /dev/loop0 # mke2fs -N 1572864 /dev/loop1 # losetup -d /dev/loop0 # losetup -d /dev/loop1
把上面创建好的文件系统(分区)挂载后就可以用 df -i 看到 vpsee1.img 的 inode 比 vpsee0.img 的 inode 扩大了3倍(虽然分区大小是一样的):
# mkdir /mnt0 /mnt1 # mount -o loop vpsee0.img /mnt0 # mount -o loop vpsee1.img /mnt1 # df -i Filesystem Inodes IUsed IFree IUse% Mounted on ... /tmp/vpsee0.img 524288 11 524277 1% /mnt0 /tmp/vpsee1.img 1572864 11 1572853 1% /mnt1