172
edits
Changes
m
We So we have three basic variants. Variant number one is not good, because [[VE ]] administrator can't get information about [[VE]] disk usage and [[HN]] administrator can't limit [[VE ]] disk usage. Variant three is not good 'cause we have some weird (but logical) values in <code>df</code>/<code>stat</code> output in [[VE]], e.g. total disk space can decrease. Variant two is perfect. How can we provide this varaint always take place? Here is the simple rule:
II, III parts reviewed and checked.
* <math>quota_{used}</math> - the number of blocks currently used by [[VE]]
* <math>quota_{barrier}</math> - the number of blocks this [[VE ]] potentially can obtain.
OpenVZ disk quota counts the number of blocks currently used by VE and prevents this number to be greater than the limit/barrier set.
* '''Quota is off for VE'''
: If quota is off for [[VE ]] (DISK_QUOTA=no), the total amount of space, that [[VE ]] potentially can acquire, equals amount of total space on partition. Certainly some space can be used by other VEs[[VE]]s, but potentially [[VE ]] can have all the space on device. Number of free blocks for [[VE ]] equals number of free blocks on partition. Note, that it implies that [[VE ]] root user, can fill all the space, including the space, that is reserved for root user of [[HN]]. This is why, you shouldn't reside VEs [[VE]]s private areas on root filesystem of your [[HN]]. Amount of available disk space for [[VE also ]] equals the number of available blocks for underlying filsystem. Thus, we have the following relationships:
:: <math>total_{simfs}</math> = <math>total_{ext2}</math>
:: <math>free_{simfs}</math> = <math>free_{ext2}</math>
:: <math>avail_{simfs} = avail_{ext2}</math>
: Rather valuable disadvantage of swithching OpenVZ quota off (besides having unlimited [[VE]]s!) is that you will not be able to get information about how much disk space is used by [[VE ]] (without doing possibly long term <code>du</code> command)using <code>df</code>/<code>stat</code>. I mean, that
:: <math>df_{usage} = total_{simfs} - free_{simfs} = total_{ext2} - free_{ext2}</math>
: thus in [[VE ]] you obtain information about disk usage of partition, but not disk usage of [[VE. By the way, just this number is displayed by <code>df</code> tool in "Usage" column]].
* '''Quota is on for VE and there is enough space on partition'''
: If quota is on, amount of disk space that [[VE ]] potentially can acquire should be equal quota barrier:
:: <math>total_{simfs} = quota_{barrier}</math>
: Amount of free space in this case should logically be the following:
:: <math>free_{simfs} = quota_{barrier} - quota_{used}</math>
: However here is a pitfall. Suppose that the amount of free disk space actually on underlying filesystem is less than it is estimated from quota using the formule above, i.e.::: <math>free_{ext2} < quota_{barrier} - quota_{used} > free_{ext2}</math>: Then, definitely, amount of free disk space reported by <code>simfs </code> should be other! This situation will be considered in the next point and in this point we assume that there is enough space on partition, i.e:: <math>free_{ext2} \ge quota_{barrier} - quota_{used} \le free_{ext2}</math> (2)
: As concerns amount of disk space available for non-root users, if there is enough disk space:
:: <math>avail_{ext2} \ge quota_{barrier} - quota_{used} \le avail_{ext2}</math>: and this is right in current point due to assumption (2) and the inequality (1), then amount of disk space available for non-root users in [[VE]] equals free space estimated from quota:
:: <math>free_{simfs} = quota_{barrier} - quota_{used}</math>
: This is the most interesting and difficult to explain case. Nevertheless I tried to do it. So, our assumption is that:
:: <math>quota_{barrier} - quota_{used} > free_{ext2}</math>
: What should be reported as free space in such case? Of course, <math>free_{ext2}</math>! This is the actual amount of space that can be used by [[VE]]. Hence:
:: <math>free_{simfs} = free_{ext2}</math>
: And now consider the following situation. There is two VEs[[VE]]s. One of VEs [[VE]]s writes nothing to disk. Second [[VE ]] writes to disc some information. Administrator of [[VE ]] #1 looks at <code>df</code> output. He observes the "Usage" column. What does he she see?:: <math>df_{usage} = total_{simfs} - free_{simfs} = total_simfs total_{simfs} - free_{ext2}</math> (3): <math>free_{ext2}</math> decreases because [[VE]] #2 writes to disc, consequently <math>df_usagedf_{usage}</math> increases! "What the hell is going on?!" - thinks the administrator? - "Nobody writes on the disk in my [[VE]], but the usage increases!" To avoid such situation the following approach is used in OpenVZ disk quota: decrease <math>simfs_totaltotal_{simfs}</math> so, that <math>df_usagedf_{usage}</math> remains the same, i.e.:
:: <math>total_{simfs} = total_{ext2} - (quota_{barrier} - quota_{usage})</math> (4)
: Substituting (4) in (3) obtain:
:: <math>df_{usage} = (total_{ext2} - free_{ext2}) - (quota_{barrier} - quota_{usage}) = const</math>
: In this case, administrator of [[VE ]] #1 sees that total amount of space decreases, but usage however is constant and it is good.: The same reasoning as with <math>free_simfsfree_{simfs}</math> suits for calculating <math>avail_simfs</math>. Two cases are possible. If:: <math>avail_{ext2} \ge quota_{barrier} - quota_{used} \le avail_{ext2}</math>
: then
:: <math>avail_{simfs} = free_{ext2}</math>
: and if
:: <math>avail_{ext2} < quota_{barrier} - quota_{used} > avail_{ext2}</math>
: then
:: <math>avail_{simfs} = quota_{barrier} - quota_{used}</math>
The table below summarize all possible cases.
{{Out|Do not set random disk quota barrier/limit!}}
Even if you want [[VE ]] to be unlimited, consider reasonable values. Use the following formula:
:: <math>\sum_{i=1}^Nq_i = S - s</math>
<math>q_i</math> - quota barrier for VE i
<math>S</math> - total amount of space on underlying filesystem
<math>s</math> - amount of space used by not [[VE ]]s private dataarea: templates, locks, etc.
'''