diff --git a/pyanaconda/storage/devicelibs/mdraid.py b/pyanaconda/storage/devicelibs/mdraid.py
index e383bdf..492c983 100644
--- a/pyanaconda/storage/devicelibs/mdraid.py
+++ b/pyanaconda/storage/devicelibs/mdraid.py
@@ -38,6 +38,7 @@ RAID5 = 5
 RAID4 = 4
 RAID1 = 1
 RAID0 = 0
+LINEAR = 99
 
 def getRaidLevels():
     mdstat_descriptors = {
@@ -47,6 +48,7 @@ def getRaidLevels():
         RAID4: ("[RAID4]", "[raid4]"),
         RAID1: ("[RAID1]", "[raid1]"),
         RAID0: ("[RAID0]", "[raid0]"),
+        LINEAR: ("[linear]"),
     }
     avail = []
     try:
@@ -62,7 +64,7 @@ def getRaidLevels():
 
             for level in mdstat_descriptors:
                 for d in mdstat_descriptors[level]:
-                    if d in lst:
+                    if d in lst or level == LINEAR:
                         avail.append(level)
                         break
 
@@ -87,7 +89,8 @@ def isRaid(raid, raidlevel):
                         RAID5: ("RAID5", "raid5", "5", 5),
                         RAID4: ("RAID4", "raid4", "4", 4),
                         RAID1: ("mirror", "RAID1", "raid1", "1", 1),
-                        RAID0: ("stripe", "RAID0", "raid0", "0", 0)}
+                        RAID0: ("stripe", "RAID0", "raid0", "0", 0),
+                        LINEAR: ("linear", "single", LINEAR)}
 
     if raid in raid_descriptors:
         return raidlevel in raid_descriptors[raid]
@@ -101,7 +104,8 @@ def get_raid_min_members(raidlevel):
                         RAID5: 3,
                         RAID4: 3,
                         RAID1: 2,
-                        RAID0: 2}
+                        RAID0: 2,
+                        LINEAR: 1}
 
     for raid, min_members in raid_min_members.items():
         if isRaid(raid, raidlevel):
@@ -116,7 +120,8 @@ def get_raid_max_spares(raidlevel, nummembers):
                        RAID5: lambda: max(0, nummembers - get_raid_min_members(RAID5)),
                        RAID4: lambda: max(0, nummembers - get_raid_min_members(RAID4)),
                        RAID1: lambda: max(0, nummembers - get_raid_min_members(RAID1)),
-                       RAID0: lambda: 0}
+                       RAID0: lambda: 0,
+                       LINEAR: lambda: 0}
 
     for raid, max_spares_func in raid_max_spares.items():
         if isRaid(raid, raidlevel):
@@ -124,6 +129,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",

