glusterfs存储池空间用完问题

        在glusterfs存储池里创建文件时,在选择向哪个子卷上创建之前(在函数dht_mknod、dht_create或dht_mkdir里)会调用dht_get_du_info(使用statvfs)获取各个子卷的剩余空间和可用inode数量。
     在dht_create和dht_mknod中,调用dht_subvol_get_hashed函数根据要创建的文件的名字找到此文件hash值所处的subvol子卷,然后调用dht_is_subvol_filled判断subvol子卷是否已满,判断方法为:如果subvol子卷的剩余空间百分比小于min-free-disk,或者剩余inode数量百分比小于min-free-inodes,则认为subvol子卷已满(其中min-free-inodes参数表示未使用的inode数目占总共可用的inode数目的百分比,默认值为5% ,min-free-disk参数表示剩余磁盘空间占总磁盘空间的百分比,默认值为10%)。
根据subvol子卷是否已满,可以分为以下两种情况:
   1. 如果subvol子卷未满
              直接在这个子卷上创建文件。
   2. 如果subvol子卷已满
      调用dht_free_disk_available_subvol函数从所有子卷中获取一个最优的子卷avail_subvol,最优的条件为:如果子卷中有未满的,就从这些未满的中间选择一个剩余inode数目占 比最大的或剩余空间百分比最大的子卷;否则,就选择一个剩余空间百分比最大并且剩余inode数目不为0的子卷。
      如果找到最优的子卷avail_subvol,且不为subvol,则调用mknod以S_IFREG | S_ISVTX模式在subvol子卷中创建文件,创建成功后,调用create在avail_subvol子卷上创建文件,然后用avail_subvol子卷上创建的文件的属性设置subvol子卷中创建的文件,变成它的硬链接(inode 号相同)。
      如果找不到最优的子卷avail_subvol,则用create在subvol子卷中创建文件。

    由上面可以得出,如果某子卷没有空间或可用的inode,并且若创建的文件刚好在此子卷中,那么文件是创建不成功的。 因此,存储池中要预留一定的空间,保证每个子卷上都有可用空间和可用的inode。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值