Re: Full use of varying drive sizes?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



--- On Wed, 23/9/09, Goswin von Brederlow <goswin-v-b@xxxxxx> wrote:

> From: Goswin von Brederlow <goswin-v-b@xxxxxx>
> Subject: Re: Full use of varying drive sizes?
> To: Jon@xxxxxxxxxxxxxxx
> Cc: linux-raid@xxxxxxxxxxxxxxx
> Date: Wednesday, 23 September, 2009, 11:07 AM
> Jon Hardcastle <jd_hardcastle@xxxxxxxxx>
> writes:
> 
> > Hey guys,
> >
> > I have an array made of many drive sizes ranging from
> 500GB to 1TB and I appreciate that the array can only be a
> multiple of the smallest - I use the differing sizes as i
> just buy the best value drive at the time and hope that as i
> phase out the old drives I can '--grow' the array. That is
> all fine and dandy.
> >
> > But could someone tell me, did I dream that there
> might one day be support to allow you to actually use that
> unused space in the array? Because that would be awesome!
> (if a little hairy re: spare drives - have to be the size of
> the largest drive in the array atleast..?) I have 3x500GB
> 2x750GB 1x1TB so I have 1TB of completely unused space!
> >
> > Cheers.
> >
> > Jon H
> 
> I face the same problem as I buy new disks whenever I need
> more space
> and have the money.
> 
> I found a rather simple way to organize disks of different
> sizes into
> a set of software raids that gives the maximum size. The
> reasoning for
> this algorithm are as follows:
> 
> 1) 2 partitions of a disk must never be in the same raid
> set
> 
> 2) as many disks as possible in each raid set to minimize
> the loss for
> parity
> 
> 3) the number of disks in each raid set should be equal to
> give
> uniform amount of redundancy (same saftey for all data).
> Worst (and
> usual) case will be a difference of 1 disk.
> 
> 
> So here is the algorithm:
> 
> 1) Draw a box as wide as the largest disk and open ended
> towards the
>    bottom.
> 
> 2) Draw in each disk in order of size one right to the
> other.
>    When you hit the right side of the box
> continue in the next line.
> 
> 3) Go through the box left to right and draw a vertical
> line every
>    time one disk ends and another starts.
> 
> 4) Each sub-box creted thus represents one raid using the
> disks drawn
>    into it in the respective sizes present
> in the box.
> 
> In your case you have 6 Disks: A (1TB), BC (750G),
> DEF(500G)
> 
> +----------+-----+-----+
> |AAAAAAAAAA|AAAAA|AAAAA|
> |BBBBBBBBBB|BBBBB|CCCCC|
> |CCCCCCCCCC|DDDDD|DDDDD|
> |EEEEEEEEEE|FFFFF|FFFFF|
> |  md0     | md1 | md2 |
> 
> For raid5 this would give you:
> 
> md0: sda1, sdb1, sdc1, sde1 (500G)  -> 1500G
> md1: sda2, sdb2, sdd1, sdf1 (250G)  ->  750G
> md2: sda3, sdc2, sdd2, sdf2 (250G)  ->  750G
>                
>                
>        -----
>                
>                
>        3000G total
> 
> As spare you would probably want to always use the largest
> disk as
> only then it is completly unused and can power down.
> 
> Note that in your case the fit is perfect with all raids
> having 4
> disks. This is not always the case. Worst case there is a
> difference
> of 1 between raids though.
> 
> 
> 
> As a side node: Resizing when you get new disks might
> become tricky
> and involve shuffeling around a lot of data. You might want
> to split
> md0 into 2 raids with 250G partitiosn each assuming future
> disks will
> continue to be multiples of 250G.
> 
> MfG
>         Goswin
> 

Yes,

This is a great system. I did think about this when i first created my array but I was young and lacked the confidence to do much..

So assuming I then purchased a 1.5TB drive the diagram would change to

6 Disks: A (1TB), BC (750G), DEF(500G), G(1.5TB)

i) So i'd partition the drive up into 250GB chucks and add each chuck to md0~3

+-----+-----+-----+-----+-----+-----+
|GGGGG|GGGGG|GGGGG|GGGGG|GGGGG|GGGGG|
|AAAAA|AAAAA|AAAAA|AAAAA|     |     |
|BBBBB|BBBBB|BBBBB|CCCCC|     |     |
|CCCCC|CCCCC|DDDDD|DDDDD|     |     |
|EEEEE|EEEEE|FFFFF|FFFFF|     |     |
|  md0| md1 | md2 | md3 | md4 | md5 |


ii) then I guess I'd have to relieve the E's from md0 and md1? giving (which I can do by failing the drives?) 
this would then kick in the use of the newly added G's?

+-----+-----+-----+-----+-----+-----+
|GGGGG|GGGGG|GGGGG|GGGGG|GGGGG|GGGGG|
|AAAAA|AAAAA|AAAAA|AAAAA|EEEEE|EEEEE|
|BBBBB|BBBBB|BBBBB|CCCCC|FFFFF|FFFFF|
|CCCCC|CCCCC|DDDDD|DDDDD|     |     |
|XXXXX|XXXXX|XXXXX|XXXXX|     |     |
|  md0| md1 | md2 | md3 | md4 | md5 |

iii) Repeat for the F's which would again trigger the rebuild using the G's.

the end result is 6 arrays with 4 and 2 partions in respectively i.e.

   +--1--+--2--+--3--+--4--+--5--+--6--+
sda|GGGGG|GGGGG|GGGGG|GGGGG|GGGGG|GGGGG|
sdb|AAAAA|AAAAA|AAAAA|AAAAA|EEEEE|EEEEE|
sdc|BBBBB|BBBBB|BBBBB|CCCCC|FFFFF|FFFFF|
sdd|CCCCC|CCCCC|DDDDD|DDDDD|     |     |
sde|  md0| md1 | md2 | md3 | md4 | md5 |


md0: sda1, sdb1, sdc1, sdd1 (250G)  -> 750G
md1: sda2, sdb2, sdc2, sdd2 (250G)  -> 750G
md2: sda3, sdb3, sdc3, sdd3 (250G)  -> 750G
md3: sda4, sdb4, sdc4, sdd4 (250G)  -> 750G
md4: sda5, sdb5, sdc5               -> 500G
md5: sda6, sdb6, sdc6               -> 500G

Total                               -> 4000G

I cant do the maths tho as my head hurts too much but is this quite wasteful with so many raid 5 arrays each time burning 1x250gb?

Finally... i DID find a reference...

check out: http://neil.brown.name/blog/20090817000931

'
...
It would also be nice to teach RAID5 to handle arrays with devices of different sizes. There are some complications there as you could have a hot spare that can replace some devices but not all. 
...
'


-----------------------
N: Jon Hardcastle
E: Jon@xxxxxxxxxxxxxxx
'Do not worry about tomorrow, for tomorrow will bring worries of its own.'
-----------------------



      
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux