On 22/04/13 09:33 AM, R. Ramesh wrote:
On 21/04/13 01:11 PM, R. Ramesh wrote:
I
have a mdadm implemented raid5 with 3 disks (2x 3TiB
and 1x 2TiB). Each
disk has one partition only for the full size of that
disk and the
partitions are then combined in to md0. I
like to swap out
the 2TiB with a new 3TiB. While I do not expect issue
with
this, a lot of reading about unrecoverable errors
spooked me
a little on the rebuild/resync. Further, I think it is
silly that we
need to read all the disks in the original array as
part of resync (in
a
fail+remove+add method of changing disks) Is there a
way to avoid
resync by doing a dd from 2TB on to the *new* 3TB and
then reassembling
the
array? I mean this
1. shutdown
2. add 3tb to the PC
3. boot using rescue disk and do not assemble the md0.
4. Copy partition table from one of old 3TiB on to the *new* 3TiB
5. dd 2TiB-part1 to *new* 3TiB-part1
6. shutdown
7. disconnect 2TiB disk
8. restart to original OS on the disk to find the 3TiB as part of the
reassemble
9. Grow the array to full size
Since the above is not suggested anywhere I could
find, I
like to know what I am missing as this seems
too easy to me.
Ramesh
The problem is the location of the superblocks. If
you're
prepared to have your system shut down for a
while to copy
the data, I suggest that you simply remove the
2T disk and
add the 3T disk. You will still have your 2T
disk so if
something fails, you should be able to recover using it.
This
of course means that you cannot be using your system.
The md array cannot
be written to or the 2T drive will no longer be usable.
So boot from
a rescue disk and rebuild the array without mounting it
or any partition
on it until the rebuild has completed.
Thanks. I was thinking copy will be faster than rebuild.
Further, it
will avoid reading 4TB disk (of course, it will read 2TB
when copying)
I guess you are saying that the simple copying will not
work.
I was going to try experimenting with files and loop devices
(I tried
2x 3G + 1x 2G files plus a new 3G file representing the new
3TB drive).
However, after copying the files, loop thinks that the file
representing new 3TB disk (or the new 3GB file) is really a
2TB disk.
So, mdadm does not grow the array when using the new loop
device.
However, the file system was intact after copying and I
could mount it
etc. I just could not grow
it to full 6TB.
Ramesh
Reading 4T in parallel is not slower than reading 2T. However,
the
rebuild is probably slower than a simple copy. Unfortunately
any kind
of playing around with the array may have resulted in the 2T
disk no
longer being a viable member of the array. For safety you may
want to
restart the array with the 2T disk in it to make sure that it
is OK
before replacing it with the 3T.
However, if it looks like it is doing a full rebuild then stop
the
array and switch to the 3T. If the array is going to be
rebuilt anyway,
then you might just as well build it on the 3T disk.
Make sure you have all your important files backed up
beforehand.
Thanks Gary for thinking this through for me. After our exchanges
and
failure to successfully experiment with simple files and loop
devices,
I decided to let mdadm rebuild/resync instead of copying. I plan
to do
the following.
- Add the new 3TB as spare
- Manually fail the 2TB to start resync in place on to 3TB.
- When finished. Simply remove 2TB from the array
Just curious. If I do not write to this array (ie, unmount it
before
syncing), will the 2TB be still usable should
the resync to 3TB fail?
Ramesh
If there are no writes and the 2T drive is part of the array before
the rebuild, it can be put back in should the rebuild fail. You may
have to tell the RAID array that it is clean when you add it back
in.
|