[PATCH 03/21] Add a function to estimate required disk space for an md array.
David Lehman
dlehman at redhat.com
Thu Aug 9 19:28:22 UTC 2012
---
pyanaconda/storage/devicelibs/mdraid.py | 46 +++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/pyanaconda/storage/devicelibs/mdraid.py b/pyanaconda/storage/devicelibs/mdraid.py
index e383bdf..4ebc81c 100644
--- a/pyanaconda/storage/devicelibs/mdraid.py
+++ b/pyanaconda/storage/devicelibs/mdraid.py
@@ -124,6 +124,52 @@ def get_raid_max_spares(raidlevel, nummembers):
raise ValueError, "invalid raid level %d" % raidlevel
+def get_member_space(size, disks, level=None):
+ space = 0 # size of *each* member device
+
+ # we should find a way to query mdadm for these
+ super_block_size = 2 # MB
+ chunk_size = 512.0 / 1024.0
+
+ if isinstance(level, str):
+ level = raidLevel(level)
+
+ min_members = get_raid_min_members(level)
+ if disks < min_members:
+ raise ValueError("raid%d requires at least %d disks"
+ % (level, min_members))
+
+ if level == RAID0:
+ # you need the sum of the member sizes to equal your desired capacity
+ space = size / disks
+ space += chunk - (space % chunk)
+ space += super_block_size
+ elif level == RAID1:
+ # you need each member's size to equal your desired capacity
+ space = size
+ space += chunk - (space % chunk)
+ space += super_block_size
+ elif level in (RAID4, RAID5):
+ # you need the sum of all but one members' sizes to equal your desired
+ # capacity
+ space = size / (disks - 1)
+ space += chunk - (space % chunk)
+ space += super_block_size
+ elif level == RAID6:
+ # you need the sum of all but two members' sizes to equal your desired
+ # capacity
+ space = size / (disks - 2)
+ space += chunk - (space % chunk)
+ space += super_block_size
+ elif level == RAID10:
+ # you need the sum of the member sizes to equal twice your desired
+ # capacity
+ space = size / (disks / 2.0)
+ space += chunk - (space % chunk)
+ space += super_block_size
+
+ return space * disks
+
def mdadm(args):
ret = iutil.execWithRedirect("mdadm", args,
stdout = "/dev/tty5",
--
1.7.7.6
More information about the anaconda-patches
mailing list