All of lore.kernel.org
 help / color / mirror / Atom feed
* striping 2x500G to mirror 1x1T
@ 2022-03-05  4:47 David T-G
  2022-03-07 14:19 ` Natanji
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: David T-G @ 2022-03-05  4:47 UTC (permalink / raw)
  To: Linux RAID

Hi, all --

I have a 1T data drive (currently in use with data) that I'd like to
mirror with a pair of 500G drives striped together.  I'll be mirroring
two partitions, and I'll be striping partitions to ensure the correct
size, and my understanding is that I'll have to create the mirror on the
two new drives with half missing, mount it up, copy over the data, dump
the original disk, and add it as the other half of the mirror to sync.
If I've missed anything there, please let me know, but all of that
matches my Googling and I don't think I have any questions.

What I do wonder, and what I don't see in any searches since apparently
nobody talks about striping up half of a mirror, is if I should do
anything special with my two-disk RAID0 stripe.  I was gobsmacked at
the simplicity of RAID10 on only two drives by splitting each in half
and "flipping" one to maximize head movement performance.  Awesome! :-)
Are there any brilliant hacks for simple striping?  If I'm just putting
together two [not terribly large] disks, will I benefit from any other
funny stuff, or should I just stripe together two partitions -- each
half the size of my other drive, of course -- to make a "boring basic"
stripe and run with that?


TIA & HANW

:-D
-- 
David T-G
See http://justpickone.org/davidtg/email/
See http://justpickone.org/davidtg/tofu.txt


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: striping 2x500G to mirror 1x1T
  2022-03-05  4:47 striping 2x500G to mirror 1x1T David T-G
@ 2022-03-07 14:19 ` Natanji
  2022-03-07 16:24   ` Wols Lists
  2022-03-09  3:02   ` backups and losses (was "Re: striping 2x500G to mirror 1x1T") David T-G
  2022-03-08 23:08 ` striping 2x500G to mirror 1x1T Jani Partanen
  2022-03-09 16:04 ` to partition or not to partition (was "Re: striping 2x500G to mirror 1x1T") David T-G
  2 siblings, 2 replies; 9+ messages in thread
From: Natanji @ 2022-03-07 14:19 UTC (permalink / raw)
  To: David T-G, Linux RAID

Hello David,
what you propose here should work, but be aware that you are essentially 
first writing all data to the 2 smaller drives and then reading from 
them only when the mirror 1 TB disk gets added. If there are bad sectors 
that only gets dicovered while reading (not writing), you might lose 
data. A much cleaner way would be to make a backup of your data disk and 
then first crate the array with all disks, then write the data back from 
your backup once the disks are in sync. You should definitely make a 
backup or you could potentially lose data when creating this array.

I don't see the benefit of striping in your setup, by the way. For the 
two smaller disks it might seem that this is beneficial for performance, 
but since every write also needs to be made on the mirror, this will 
essentially lead to your read/write head moving back and forth a lot, 
no? Because if you write four consecutive chunks C1-C4 on the striped 
side, two of these would be written to each smaller disk. And on the 1 
TB disk side this would mean writing the sectors with only one 
read/write head, each around 500GB apart from each other, and in a back 
and worth fashion (although that might be optimized by queuing). So your 
write performance could actually be *worse* than on a single drive, and 
definitely not gain the 2x speed benefit of striping. For read 
performance you might be okay, but nevertheless put unneccessary 
mechanical wear on your 1 TB drive.

[C1 C3 ....] 500GB-1      [C2 C4 ....] 500GB-2
[C1 C3 ... (500G space)  C2 C4 ....] 1TB

At least that's my understanding, someone correct me if I'm wrong and 
mdadm handles such setups more intelligently (i.e. by laying out the 
chunks completely linearly on the 1TB disk instead of 1-to-1 "mirroring" 
the chunks on the 2x500G RAID0). If you think I'm correct, then instead 
of striping I would just use linear mode on the 500GB disks to pool them 
into one large volume, and thus essentially get Raid1 speed benefits of 
double read performance compared to a single drive. This has the 
downside of putting very different wear on the two 500GB volumes, of course.

Best regards,
Natanji

Am 05.03.2022 um 05:47 schrieb David T-G:
> Hi, all --
>
> I have a 1T data drive (currently in use with data) that I'd like to
> mirror with a pair of 500G drives striped together.  I'll be mirroring
> two partitions, and I'll be striping partitions to ensure the correct
> size, and my understanding is that I'll have to create the mirror on the
> two new drives with half missing, mount it up, copy over the data, dump
> the original disk, and add it as the other half of the mirror to sync.
> If I've missed anything there, please let me know, but all of that
> matches my Googling and I don't think I have any questions.
>
> What I do wonder, and what I don't see in any searches since apparently
> nobody talks about striping up half of a mirror, is if I should do
> anything special with my two-disk RAID0 stripe.  I was gobsmacked at
> the simplicity of RAID10 on only two drives by splitting each in half
> and "flipping" one to maximize head movement performance.  Awesome! :-)
> Are there any brilliant hacks for simple striping?  If I'm just putting
> together two [not terribly large] disks, will I benefit from any other
> funny stuff, or should I just stripe together two partitions -- each
> half the size of my other drive, of course -- to make a "boring basic"
> stripe and run with that?
>
>
> TIA & HANW
>
> :-D

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: striping 2x500G to mirror 1x1T
  2022-03-07 14:19 ` Natanji
@ 2022-03-07 16:24   ` Wols Lists
  2022-03-09  3:02   ` backups and losses (was "Re: striping 2x500G to mirror 1x1T") David T-G
  1 sibling, 0 replies; 9+ messages in thread
From: Wols Lists @ 2022-03-07 16:24 UTC (permalink / raw)
  To: Natanji, David T-G, Linux RAID

On 07/03/2022 14:19, Natanji wrote:
> Hello David,
> what you propose here should work, but be aware that you are essentially 
> first writing all data to the 2 smaller drives and then reading from 
> them only when the mirror 1 TB disk gets added. If there are bad sectors 
> that only gets dicovered while reading (not writing), you might lose 
> data. A much cleaner way would be to make a backup of your data disk and 
> then first crate the array with all disks, then write the data back from 
> your backup once the disks are in sync. You should definitely make a 
> backup or you could potentially lose data when creating this array.

But then David is in an equal pickle - what happens if the backup 
contains errors that only get discovered when reading, not writing ... 
no, David's plan is just the same as yours, his "half a mirror" is your 
backup, they suffer the same advantages and disadvantages.
> 
> I don't see the benefit of striping in your setup, by the way. For the 
> two smaller disks it might seem that this is beneficial for performance, 
> but since every write also needs to be made on the mirror, this will 
> essentially lead to your read/write head moving back and forth a lot, 
> no? Because if you write four consecutive chunks C1-C4 on the striped 
> side, two of these would be written to each smaller disk. And on the 1 
> TB disk side this would mean writing the sectors with only one 
> read/write head, each around 500GB apart from each other, and in a back 
> and worth fashion (although that might be optimized by queuing). So your 
> write performance could actually be *worse* than on a single drive, and 
> definitely not gain the 2x speed benefit of striping. For read 
> performance you might be okay, but nevertheless put unneccessary 
> mechanical wear on your 1 TB drive.
> 
> [C1 C3 ....] 500GB-1      [C2 C4 ....] 500GB-2
> [C1 C3 ... (500G space)  C2 C4 ....] 1TB
> 
> At least that's my understanding, someone correct me if I'm wrong and 
> mdadm handles such setups more intelligently (i.e. by laying out the 
> chunks completely linearly on the 1TB disk instead of 1-to-1 "mirroring" 
> the chunks on the 2x500G RAID0).

mdadm doesn't have a clue that the second device in your mirror is a 
raid0. As far as it is concerned you have two completely SEPARATE raids, 
a raid0-stripe, and a raid1-mirror.

So when reading from the mirror it should preferentially read from the 
raid0 because it's the faster device. Which means it WON'T put 
unnecessary mechanical wear on the 1TB device because it preferentially 
will only use it for writing. And because the layer above sees it as a 
1TB device, it won't be scattering writes all over the place. All three 
drives would see a "stream write to the mirror" as a stream write to the 
drive. A1,B1,A2,C1,A3,B2,A4,C2, ...

Cheers,
Wol

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: striping 2x500G to mirror 1x1T
  2022-03-05  4:47 striping 2x500G to mirror 1x1T David T-G
  2022-03-07 14:19 ` Natanji
@ 2022-03-08 23:08 ` Jani Partanen
  2022-03-08 23:34   ` Roman Mamedov
  2022-03-09 16:04 ` to partition or not to partition (was "Re: striping 2x500G to mirror 1x1T") David T-G
  2 siblings, 1 reply; 9+ messages in thread
From: Jani Partanen @ 2022-03-08 23:08 UTC (permalink / raw)
  To: David T-G, Linux RAID

Hello, I don't think you gain really any benefit from that raid-0, just 
go linear array, IMHO.


// JiiPee


David T-G kirjoitti 05/03/2022 klo 6.47:
> Hi, all --
>
> I have a 1T data drive (currently in use with data) that I'd like to
> mirror with a pair of 500G drives striped together.  I'll be mirroring
> two partitions, and I'll be striping partitions to ensure the correct
> size, and my understanding is that I'll have to create the mirror on the
> two new drives with half missing, mount it up, copy over the data, dump
> the original disk, and add it as the other half of the mirror to sync.
> If I've missed anything there, please let me know, but all of that
> matches my Googling and I don't think I have any questions.
>
> What I do wonder, and what I don't see in any searches since apparently
> nobody talks about striping up half of a mirror, is if I should do
> anything special with my two-disk RAID0 stripe.  I was gobsmacked at
> the simplicity of RAID10 on only two drives by splitting each in half
> and "flipping" one to maximize head movement performance.  Awesome! :-)
> Are there any brilliant hacks for simple striping?  If I'm just putting
> together two [not terribly large] disks, will I benefit from any other
> funny stuff, or should I just stripe together two partitions -- each
> half the size of my other drive, of course -- to make a "boring basic"
> stripe and run with that?
>
>
> TIA & HANW
>
> :-D


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: striping 2x500G to mirror 1x1T
  2022-03-08 23:08 ` striping 2x500G to mirror 1x1T Jani Partanen
@ 2022-03-08 23:34   ` Roman Mamedov
  2022-03-09  2:59     ` David T-G
  0 siblings, 1 reply; 9+ messages in thread
From: Roman Mamedov @ 2022-03-08 23:34 UTC (permalink / raw)
  To: Jani Partanen; +Cc: David T-G, Linux RAID

On Wed, 9 Mar 2022 01:08:47 +0200
Jani Partanen <jiipee@sotapeli.fi> wrote:

> Hello, I don't think you gain really any benefit from that raid-0, just 
> go linear array, IMHO.

There is no gain from the linear array either. In none of the performance,
reliability or even simplicity, since managing a linear md array is not any
simpler than managing an md RAID0.

Smaller disks tend to be slower in linear speeds than larger and more densely
written ones. If that is the case with the particular models used here, then
having the 2x500 side in a RAID0 will help them match up in linear speeds to
the 1TB side.

And a very good point that Wols mentioned, the 1TB-disk member can be set as
--write-mostly, since the 2x500GB RAID0 is likely to overshoot the performance
of a single 1TB disk, even if its individual disks were slower. Not to mention
it has two independent head sets for the same amount of data. (If we're still
talking rotational here...)

-- 
With respect,
Roman

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: striping 2x500G to mirror 1x1T
  2022-03-08 23:34   ` Roman Mamedov
@ 2022-03-09  2:59     ` David T-G
  0 siblings, 0 replies; 9+ messages in thread
From: David T-G @ 2022-03-09  2:59 UTC (permalink / raw)
  To: Linux RAID

Hi again, all --

...and then Roman Mamedov said...
% 
...
% And a very good point that Wols mentioned, the 1TB-disk member can be set as
% --write-mostly, since the 2x500GB RAID0 is likely to overshoot the performance
% of a single 1TB disk, even if its individual disks were slower. Not to mention
% it has two independent head sets for the same amount of data. (If we're still
% talking rotational here...)

Thanks so much for all of the input!  This sounds like the right way to
go.

I had completely forgotten the "strange magic" ;-) of RAID10 on just
two drives by reordering the two partitions on the second drive, but I
don't think that that applies here and I don't imagine it's worth the
complexity of striping two mirrors, half of each of which are partitions
on the 1T drive, so I'll just stripe [partions on] the two 500s.


Thanks again & have a great day!

:-D
-- 
David T-G
See http://justpickone.org/davidtg/email/
See http://justpickone.org/davidtg/tofu.txt


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: backups and losses (was "Re: striping 2x500G to mirror 1x1T")
  2022-03-07 14:19 ` Natanji
  2022-03-07 16:24   ` Wols Lists
@ 2022-03-09  3:02   ` David T-G
  1 sibling, 0 replies; 9+ messages in thread
From: David T-G @ 2022-03-09  3:02 UTC (permalink / raw)
  To: Linux RAID

Natanji, et al --

...and then Natanji said...
% 
% Hello David,
% what you propose here should work, but be aware that you are essentially
% first writing all data to the 2 smaller drives and then reading from them
% only when the mirror 1 TB disk gets added. If there are bad sectors that
% only gets dicovered while reading (not writing), you might lose data. A much
[snip]

Thanks for the input!

While I'd love to have the luxury of redundant backups and more devices,
that's out of the cards on this little server :-/  However, after I rsync
across all content I then use diff -r to check it, so I have to read each
byte on each side anyway.  That gives me at least a little more confidence!


Have a great day

:-D
-- 
David T-G
See http://justpickone.org/davidtg/email/
See http://justpickone.org/davidtg/tofu.txt


^ permalink raw reply	[flat|nested] 9+ messages in thread

* to partition or not to partition (was "Re: striping 2x500G to mirror 1x1T")
  2022-03-05  4:47 striping 2x500G to mirror 1x1T David T-G
  2022-03-07 14:19 ` Natanji
  2022-03-08 23:08 ` striping 2x500G to mirror 1x1T Jani Partanen
@ 2022-03-09 16:04 ` David T-G
  2022-03-09 16:25   ` Roman Mamedov
  2 siblings, 1 reply; 9+ messages in thread
From: David T-G @ 2022-03-09 16:04 UTC (permalink / raw)
  To: Linux RAID

Hi again, all --

...and then davidtg-robot@justpickone.org said...
% 
% I have a 1T data drive (currently in use with data) that I'd like to
% mirror with a pair of 500G drives striped together.  I'll be mirroring
% two partitions, and I'll be striping partitions to ensure the correct
[snip]

Is it OK to mirror a partition and an entire device?  Are there any pros
or cons?

I now have my 2ea 500G drives partitioned

  jpo:~ # parted /dev/sdc unit MiB print
  Model: ATA WDC WD5000AAVS-0 (scsi)
  Disk /dev/sdc: 476940MiB
  Sector size (logical/physical): 512B/512B
  Partition Table: gpt
  Disk Flags: 

  Number  Start      End        Size       File system  Name                    Flags
   1      1.00MiB    472171MiB  472170MiB               raid0-WD-WMASU0686160   raid
   4      472171MiB  476940MiB  4769MiB    reiserfs     wwn-0x50014ee055b724ad

  jpo:~ # parted /dev/sdd unit MiB print
  Model: ATA WDC WD5000AAVS-0 (scsi)
  Disk /dev/sdd: 476940MiB
  Sector size (logical/physical): 512B/512B
  Partition Table: gpt
  Disk Flags: 

  Number  Start      End        Size       File system  Name                    Flags
   1      1.00MiB    472171MiB  472170MiB               raid0-WD-WMASU0769665   raid
   4      472171MiB  476940MiB  4769MiB    ext3         wwn-0x50014ee055b72bcd

(I always reserve a small slice at the end of the disk in which to keep
array structure data and other helpful info) and striped 

  jpo:~ # mdadm --detail /dev/md0
  /dev/md0:
             Version : 1.2
       Creation Time : Wed Mar  9 05:48:41 2022
          Raid Level : raid0
          Array Size : 966739968 (921.96 GiB 989.94 GB)
        Raid Devices : 2
       Total Devices : 2
         Persistence : Superblock is persistent

         Update Time : Wed Mar  9 05:48:41 2022
               State : clean 
      Active Devices : 2
     Working Devices : 2
      Failed Devices : 0
       Spare Devices : 0

              Layout : -unknown-
          Chunk Size : 512K

  Consistency Policy : none

                Name : jpo:500Graid0md  (local to host jpo)
                UUID : fc674dbd:577b7d48:5cbe936f:6954eb62
              Events : 0

      Number   Major   Minor   RaidDevice State
         0       8       33        0      active sync   /dev/sdc1
         1       8       49        1      active sync   /dev/sdd1

into a 1T-ish device ready to be half a mirror.  I had originally done
lots of partition size math equal exactly half of my 1T drive partition

  jpo:~ # parted /dev/sdb unit MiB print
  Model: ATA ST31000524AS (scsi)
  Disk /dev/sdb: 953870MiB
  Sector size (logical/physical): 512B/512B
  Partition Table: gpt
  Disk Flags: 

  Number  Start      End        Size       File system  Name  Flags
   1      1.00MiB    858307MiB  858306MiB  xfs          pri
   4      950055MiB  953869MiB  3814MiB                 pri

with existing data (and having to fudge around, not surprisingly, the
striping metadata overhead), and so I've been playing

  jpo:~ # parted /dev/md0 unit MiB print
  Model: Linux Software RAID Array (md)
  Disk /dev/md0: 944082MiB
  Sector size (logical/physical): 512B/512B
  Partition Table: gpt
  Disk Flags: 

  Number  Start      End        Size       File system  Name         Flags
   1      1.00MiB    934641MiB  934640MiB               500Graid0md  raid
   4      934641MiB  944081MiB  9440MiB                 pri          msftdata

with how to slice up the stripe device to size it to match the existing
sdb1 partition with the mirroring metadata overhead, when I wondered ...
do I care?  I don't need the s4 slice on this virtual device; that's just
leftover space.  I hate to think of it going to waste, but it's really
trivial in the grand scheme of things.  Soooooo ... if it's just as happy
to mirror against a whole device as it is a slice of one, then maybe I
can skip ahead.

Thoughts?


Thanks again! :-)

:-D
-- 
David T-G
See http://justpickone.org/davidtg/email/
See http://justpickone.org/davidtg/tofu.txt


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: to partition or not to partition (was "Re: striping 2x500G to mirror 1x1T")
  2022-03-09 16:04 ` to partition or not to partition (was "Re: striping 2x500G to mirror 1x1T") David T-G
@ 2022-03-09 16:25   ` Roman Mamedov
  0 siblings, 0 replies; 9+ messages in thread
From: Roman Mamedov @ 2022-03-09 16:25 UTC (permalink / raw)
  To: David T-G; +Cc: Linux RAID

On Wed, 9 Mar 2022 11:04:03 -0500
David T-G <davidtg-robot@justpickone.org> wrote:

> Is it OK to mirror a partition and an entire device?

Yes it is OK.

>   jpo:~ # parted /dev/sdb unit MiB print
>   Model: ATA ST31000524AS (scsi)
>   Disk /dev/sdb: 953870MiB
>   Sector size (logical/physical): 512B/512B
>   Partition Table: gpt
>   Disk Flags: 
> 
>   Number  Start      End        Size       File system  Name  Flags
>    1      1.00MiB    858307MiB  858306MiB  xfs          pri
>    4      950055MiB  953869MiB  3814MiB                 pri
> 

Here it seems weird that your 1TB drive has a 858GB partition, then a hole of
free space about 92 GB in size, and only then another partition of 4 GB. In
preparation for that partition to become a RAID member (instead of xfs data
directly), you could resize it to match the 944082MiB size of md0.

> with existing data (and having to fudge around, not surprisingly, the
> striping metadata overhead), and so I've been playing
> 
>   jpo:~ # parted /dev/md0 unit MiB print
>   Model: Linux Software RAID Array (md)
>   Disk /dev/md0: 944082MiB
>   Sector size (logical/physical): 512B/512B
>   Partition Table: gpt
>   Disk Flags: 
> 
>   Number  Start      End        Size       File system  Name         Flags
>    1      1.00MiB    934641MiB  934640MiB               500Graid0md  raid
>    4      934641MiB  944081MiB  9440MiB                 pri          msftdata
> 
> with how to slice up the stripe device to size it to match the existing
> sdb1 partition with the mirroring metadata overhead, when I wondered ...
> do I care?  I don't need the s4 slice on this virtual device; that's just
> leftover space.  I hate to think of it going to waste, but it's really
> trivial in the grand scheme of things.  Soooooo ... if it's just as happy
> to mirror against a whole device as it is a slice of one, then maybe I
> can skip ahead.

It is definitely an overkill to partition the md0 device. Better to just use
it entirely. If you fix up the partition size on sdb as mentioned above, there
will not be any wasted space on md0.

-- 
With respect,
Roman

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-03-09 16:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-05  4:47 striping 2x500G to mirror 1x1T David T-G
2022-03-07 14:19 ` Natanji
2022-03-07 16:24   ` Wols Lists
2022-03-09  3:02   ` backups and losses (was "Re: striping 2x500G to mirror 1x1T") David T-G
2022-03-08 23:08 ` striping 2x500G to mirror 1x1T Jani Partanen
2022-03-08 23:34   ` Roman Mamedov
2022-03-09  2:59     ` David T-G
2022-03-09 16:04 ` to partition or not to partition (was "Re: striping 2x500G to mirror 1x1T") David T-G
2022-03-09 16:25   ` Roman Mamedov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.