Increase Array Size AND Reduce Number of Parity Drives: Order of Operations - [SOLVED]


Recommended Posts

Hi Everyone,

 

Based on SpaceInvaderOne's latest video regarding properly set up shares, I'm looking to upgrade my current configuration to keep media shares confined to one disk (if possible).  In that vein, I picked up 3 WD Easystore 8TB drives that are currently preclearing.  Here's my current configuration:

 

image.png.945fcbe418ad84c134f73b0ce4424043.png

 

What I'm hoping to do:

 

Total number of disks stays the same; array size increases by 4TB. 

 

New Config 

Parity: WD 8TB

Parity 2: Removed

Disk 1: WD 8TB

Disk 2: Same

Disk 3: Same

Disk 4: WD 8TB

Disk 5: Same

Disk 6: Same

Disk 7: Previous 4TB parity disk

 

I saw the wiki articles about array shrinking and reducing parity drives but wasn't sure if there was a best practice for doing both at the same time.  

 

Here's my plan to (hopefully) keep everything safe, as well as minimizing things like parity checks: 

1. Move data (using unBalance) from the 2 drives I plan to remove onto the other 4 data drives (exclude them from all shares)

2. Run new config utility

3. Remove extraneous drives

4. Run a parity check

5. Remove parity 1x 4TB drive 2 (ensure parity is still valid)

6. Replace 1x 4TB parity with 1x 8TB parity

7. Add 2x 8TB drives and re-designate old 1x 4TB as a data disk for the array

8. Move data (using unBalance) 

*9. Final parity check

 

Does that seem like a reasonable order of operations?  How do you guys feel about dropping from 2 parity disks to 1?  Please feel free to poke holes if I missed something or I'm being dumb.  

 

Thanks so much!

 

Edited by bonustreats
added step 9
Link to comment

The moment you do New Config you invalidate parity and thus have to rebuild parity from the remaining disks.    On that basis you might as well immediately after the New Config put all the disks into the configuration you want to end up with and then build parity based on that configuration.

  • Thanks 1
Link to comment

Can you please clarify? In step 1 you talk about removing 2 drives, but it seems you are actually replacing (not removing) disk1 and disk4, and adding disk7?

 

If I've got that correct, then I think the more proper and safe way to go is

1. Physically replace parity 1 with new 8TB, set 4TB aside for now, let parity build on new 8TB, run correcting check to make sure everything is still happy.

2. Unassign parity2, start array, stop array, assign old parity2 disk to data slot 7, let Unraid clear the disk then format it.

3. Physically replace 2TB disk1 with new 8TB, let unraid rebuild it, do a non-correcting check again.

4. Physically replace 2TB disk4 with new 8TB, let unraid rebuild it, do a non-correcting check again.

5. Optionally replace 2TB disk2 with original parity1 4TB, etc.

 

I see no reason to move files around, but my process will take many many more hours and keep parity valid the entire time.

 

There is no reason to empty drives you are replacing if you let Unraid rebuild them with the content intact. The only time you need to empty files off a drive is if you are permanently reducing the number of occupied drive slots, and you aren't doing that.

Link to comment
1 hour ago, itimpi said:

The moment you do New Config you invalidate parity and thus have to rebuild parity from the remaining disks.    On that basis you might as well immediately after the New Config put all the disks into the configuration you want to end up with and then build parity based on that configuration.

Oh, goootcha - didn't realize that parity would be invalidated.  Crap.  Thanks!

Link to comment
1 hour ago, jonathanm said:

Can you please clarify? In step 1 you talk about removing 2 drives, but it seems you are actually replacing (not removing) disk1 and disk4, and adding disk7?

 

If I've got that correct, then I think the more proper and safe way to go is

1. Physically replace parity 1 with new 8TB, set 4TB aside for now, let parity build on new 8TB, run correcting check to make sure everything is still happy.

2. Unassign parity2, start array, stop array, assign old parity2 disk to data slot 7, let Unraid clear the disk then format it.

3. Physically replace 2TB disk1 with new 8TB, let unraid rebuild it, do a non-correcting check again.

4. Physically replace 2TB disk4 with new 8TB, let unraid rebuild it, do a non-correcting check again.

5. Optionally replace 2TB disk2 with original parity1 4TB, etc.

 

I see no reason to move files around, but my process will take many many more hours and keep parity valid the entire time.

 

There is no reason to empty drives you are replacing if you let Unraid rebuild them with the content intact. The only time you need to empty files off a drive is if you are permanently reducing the number of occupied drive slots, and you aren't doing that.

 

You're right - bad verbiage on my part.  Removing and replacing is what I should have said - sorry.

 

I was planning on moving files for 2 reasons:  

- being able to 'clean' the 2x 2TB that are being replaced.  That way if I ever need them again, they're ready to rock. And,

- consolidating shares that have been spread across multiple disks.  SIO mentioned that it was way less wear on the whole array to pull data from just one disk (Plex, etc.) when needed.  I'm planning on having one of the 8TB specifically for movies and the other specifically for TV series, with room for expansion.

 

Just a couple questions:

1. Will unRAID allow for 2 dissimilarly-sized parity drives?  The 8TB can be building parity and the other 4TB will be parity 2 during that operation?  If so, awesome!

2. gotcha

3/4. This is where having all the data on the remaining 4 data drives comes in.  With the fresh 8TBs, I could use unBalance to move ALL the Movie and TV shares onto each of those new disks and not wait for unRAID to rebuild them.  Is this a bad idea?

5. Yep - sorry, I think I forgot to include this step.

 

1 hour ago, jonathanm said:

Why?

 

Just to reduce downtime, I guess.  I do have some plex users, but also don't want to put data at risk.  

Link to comment
39 minutes ago, bonustreats said:

1. Will unRAID allow for 2 dissimilarly-sized parity drives?  The 8TB can be building parity and the other 4TB will be parity 2 during that operation?  If so, awesome!

Yes. The 2 parity drives have no connection, totally separate math equations are used. The only rule is no data drive can be larger than either parity slot.

41 minutes ago, bonustreats said:

3/4. This is where having all the data on the remaining 4 data drives comes in.  With the fresh 8TBs, I could use unBalance to move ALL the Movie and TV shares onto each of those new disks and not wait for unRAID to rebuild them.

The data is continuously available through the rebuild process, you don't have to wait during a rebuild.

43 minutes ago, bonustreats said:

Just to reduce downtime, I guess.  I do have some plex users, but also don't want to put data at risk. 

The array is fully available during parity checks, but some systems don't have enough resources to keep playback seamless during checks. Any access is shared, so using the array while things are processing will slow down all the things.

  • Thanks 1
Link to comment
15 hours ago, jonathanm said:

Yes. The 2 parity drives have no connection, totally separate math equations are used. The only rule is no data drive can be larger than either parity slot.

The data is continuously available through the rebuild process, you don't have to wait during a rebuild.

The array is fully available during parity checks, but some systems don't have enough resources to keep playback seamless during checks. Any access is shared, so using the array while things are processing will slow down all the things.

 

Man, so many things I didn't know!

 

- I assumed both parity drives needed to be the same size

- Wasn't sure about rebuild data availability and was definitely trying to play it safe

- knew that the array was available during a check, but wasn't sure about when it's building parity.  Also, is writing to the array during a parity check okay? I've always avoided that just to be safe.

 

Based on this, looks like your solution will work better than mine (parity maintained, almost constant data availability), albeit take a bit longer (which is fine with me!).  Thanks so much for the inputs!  I have one more drive to preclear and I'll probably start early next week.  I'll try to update with progress or any tidbits, but will report back once it's done to mark this solved.

 

Thanks so much for the quick responses and good information!

 

Edited by bonustreats
verbiage
Link to comment
1 hour ago, bonustreats said:

Based on this, looks like your solution will work better than mine (parity maintained, almost constant data availability), albeit take a bit longer (which is fine with me!). 

The biggest advantage my method has is that each step is discrete per drive, so it's much less risk as you can take your time and verify that everything is still where it should be after each step. Once you are done the only difference you should see is more free space on each replaced drive slot, and a totally empty 4TB in slot 7. All data should remain available throughout, with no major interruptions.

 

I'd assign each line a new "job", and look for help and ask questions as needed, checking off before attempting to start the next item.

 

Looking back over what I wrote, step 2 may require additional parts, I can't remember if Unraid will allow you to drop a parity drive without setting a new config. You definitely can't remove a data slot. If not, then it's a simple matter of setting the new config with save all, then doing the unassigning of parity2, checking that parity is valid, starting the array and letting it check. After that's done you would add the old parity 2 disk to slot 7 and let it clear. The array would still be available throughout.

 

If you don't care to keep parity valid, you could combine step 1 and 2 for a considerable time savings, by simply doing the new config saving all data and cache, assigning the new single 8TB parity and old parity 2 to slot 7, DON'T check the parity is valid box, and let it build. Proceed from there.

 

@JorgeB would know for sure, he plays around with test arrays much more than I do.

 

1 hour ago, bonustreats said:

Also, is writing to the array during a parity check okay? I've always avoided that just to be safe.

It's fine, but it will be slow, and slow down the check more than the sum of the 2 tasks. Just to throw some random figures, if a parity check with no data access takes 12 hours, and copying a block of data would normally take 1 hour without the check running, it might take 2 hours to copy and extend the parity check to 16 hours. That's an example for effect, I haven't actually done hard benchmarks, but it feels pretty close based on observations.

  • Thanks 1
Link to comment
22 hours ago, jonathanm said:

The biggest advantage my method has is that each step is discrete per drive, so it's much less risk as you can take your time and verify that everything is still where it should be after each step. Once you are done the only difference you should see is more free space on each replaced drive slot, and a totally empty 4TB in slot 7. All data should remain available throughout, with no major interruptions.

 

I'd assign each line a new "job", and look for help and ask questions as needed, checking off before attempting to start the next item.

 

Looking back over what I wrote, step 2 may require additional parts, I can't remember if Unraid will allow you to drop a parity drive without setting a new config. You definitely can't remove a data slot. If not, then it's a simple matter of setting the new config with save all, then doing the unassigning of parity2, checking that parity is valid, starting the array and letting it check. After that's done you would add the old parity 2 disk to slot 7 and let it clear. The array would still be available throughout.

 

If you don't care to keep parity valid, you could combine step 1 and 2 for a considerable time savings, by simply doing the new config saving all data and cache, assigning the new single 8TB parity and old parity 2 to slot 7, DON'T check the parity is valid box, and let it build. Proceed from there.

 

@JorgeB would know for sure, he plays around with test arrays much more than I do.

 

It's fine, but it will be slow, and slow down the check more than the sum of the 2 tasks. Just to throw some random figures, if a parity check with no data access takes 12 hours, and copying a block of data would normally take 1 hour without the check running, it might take 2 hours to copy and extend the parity check to 16 hours. That's an example for effect, I haven't actually done hard benchmarks, but it feels pretty close based on observations.

 

In addition to the discrete steps, I think I like yours better since personal preference is to err on the side of caution by keeping parity valid at the expense of time; especially going from 2 parity drives to 1.  I'll probably expand parity again at some point, but I'll need a bit more consolidation to open bays in my case.  

 

Thanks @JorgeB for the good info!

 

I'll just keep my standard "don't add anything during the parity check" going, but good to know it won't break anything.

 

Thanks again for all the help and I'll update as necessary.

 

 

Link to comment

In case anyone's reading this thread and is using shucked WD Easystore HDDs that don't show up in BIOS, please see this comment by @jonathanm.  TL;DR - you need to disable the 3rd pin from the left on the power connection of the HDD by either using Kapton tape to cover that pin or use a Molex to Sata Power connector.  I've had my own issues with some shitty connectors, so I'll be trying the tape method (should be arriving today).

 

E: tape arrived, first HDD installed and recognized!  Rebuilding parity as we speak; ETA: 18.5 hours.

Edited by bonustreats
update
Link to comment
On 5/5/2021 at 5:43 PM, jonathanm said:

Can you please clarify? In step 1 you talk about removing 2 drives, but it seems you are actually replacing (not removing) disk1 and disk4, and adding disk7?

 

If I've got that correct, then I think the more proper and safe way to go is

1. Physically replace parity 1 with new 8TB, set 4TB aside for now, let parity build on new 8TB, run correcting check to make sure everything is still happy.

 

I see no reason to move files around, but my process will take many many more hours and keep parity valid the entire time.

 

There is no reason to empty drives you are replacing if you let Unraid rebuild them with the content intact. The only time you need to empty files off a drive is if you are permanently reducing the number of occupied drive slots, and you aren't doing that.

I think step 1 is complete.  I let parity rebuild on the 8TB and it just finished, but I just wanted to double check: 

 

- after parity is rebuilt, are you saying to run another parity check? OR did you mean the data rebuild includes a correcting check?

 

Here's my homepage:
image.thumb.png.df29c38d33f51cc1c104bb3323c59222.png

 

Which to me, looks like a correcting check was done during the rebuild.  If that's NOT the case, then I'll run another parity check before moving on to step 2.  

 

Sorry for the billion questions and thanks in advance!

Link to comment

Rebuilding parity writes every sector so at this point it should be correct (it is not a correcting check - but a rebuild).   You can (optionally) now run a non-correcting check to ensure the rebuild was correct and I would expect 0 errors (a non-zero value would mean you have some issue that is probably hardware related).

Link to comment
6 minutes ago, itimpi said:

Rebuilding parity writes every sector so at this point it should be correct (it is not a correcting check - but a rebuild).   You can (optionally) now run a non-correcting check to ensure the rebuild was correct and I would expect 0 errors (a non-zero value would mean you have some issue that is probably hardware related).

 

Ah gotcha - wasn't sure if there was some distinction I was missing somewhere; thanks!

 

Better safe than sorry!  Started a non-correcting check and will look for any sync errors.  If there are, I'll report back (guessing that's a hard drive issue?); if not, on to step 2!

 

Thanks again!

Link to comment
  • bonustreats changed the title to Increase Array Size AND Reduce Number of Parity Drives: Order of Operations - [SOLVED]

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.