Is there a size limit of natacontrol?

Francois Tigeot ftigeot at wolfpond.org
Tue Feb 28 00:01:58 PST 2012


--oyUTqETQ0mS9luUI
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,

On Mon, Feb 27, 2012 at 12:28:00PM +0000, Alex Hornung wrote:
> 
> On 27/02/12 12:20, Zenny wrote:
> > I tried to create a RAID10 with natacontrol with 4 2TB HDDs, but it
> > only shows 2TB (1718306MB) size of ar0 created instead of 4TB.
> 
> In principle there is no such limit that I'm aware of, apart from the
> MBR partition size limit. It all depends where you are seeing those 2
> TB. If it's a partition size, try using GPT.

Nataraid itself doesn't seem to be limited to 2TB RAID volumes but some
of the on-disk metadata format it uses are.

By default, when no BIOS-created metadata is recognized, natacontrol
creates a volume using the Promise metadata format -- and this one has
an inherent limit of 32-bit disk sectors.

The Intel MatrixRAID format moves this limit to 64-bit sectors, way
beyond the 2TB barrier.

The attached patch changes nataraid to use it by default instead of the
Promise format. It _could_ allow the creation of > 2TB RAID volumes on
unrecognized controllers.

-- 
Francois Tigeot

--oyUTqETQ0mS9luUI
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="patch-ataraid_default_intel.txt"

diff --git a/sys/dev/disk/nata/ata-raid.c b/sys/dev/disk/nata/ata-raid.c
index 8438614..505a912 100644
--- a/sys/dev/disk/nata/ata-raid.c
+++ b/sys/dev/disk/nata/ata-raid.c
@@ -1105,11 +1105,11 @@ ata_raid_create(struct ata_ioc_raid_config *config)
 		 * metadata format from the disks (if we support it).
 		 */
 		kprintf("WARNING!! - not able to determine metadata format\n"
-		       "WARNING!! - Using FreeBSD PseudoRAID metadata\n"
+		       "WARNING!! - Using Intel PseudoRAID metadata\n"
 		       "If that is not what you want, use the BIOS to "
 		       "create the array\n");
-		ctlr = AR_F_FREEBSD_RAID;
-		rdp->disks[disk].sectors = PROMISE_LBA(rdp->disks[disk].dev);
+		ctlr = AR_F_INTEL_RAID;
+		rdp->disks[disk].sectors = INTEL_LBA(rdp->disks[disk].dev);
 		break;
 	    }
 

--oyUTqETQ0mS9luUI--





More information about the Users mailing list