Many years later, used this post as a springboard to upgrade my WD MyCloud from 2TB RAID1 drives to new 10TB drives while online and without losing any data. Including my steps here for posterity.
Complete full backup to external drive - not a member of the RAID array.
Remove #2 drive
Install new #2 drive
Boot up, perform recovery to build out partition table
#remove new #2 drive from raid group
mdadm /dev/md1 —fail /dev/sdb2 —remove /dev/sdb2
#use gdisk to resize partitions - data partition should contain all of the free space.
#use blkid to collect current partition guids - after creating new partitions, set GUID to old guid to keep alignment
gdisk /dev/sdb
Disk /dev/sdb: 19532873728 sectors, 9.1 TiB
Model: WDC WD101EFBX-68
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): A226A521-E027-4398-84CC-028A914481C4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 19532873694
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8200 Linux swap
2 6293504 3904931839 1.8 TiB 0700 Microsoft basic data
3 3904931840 19532873694 7.3 TiB 0700 Microsoft basic data
4 4196352 6293503 1024.0 MiB 0700 Microsoft basic data
/dev/sdb3: PARTLABEL="Microsoft basic data" PARTUUID="0cf82435-1432-400c-83df-3a84f9c0536a"
/dev/sdb2: UUID="f4e48f8e-e3c2-9419-d836-30a7bd1c092d" UUID_SUB="a2314c53-f14e-d48e-51c6-8c5a0b0e13c8" LABEL="1" TYPE="linux_raid_member" PARTLABEL="Microsoft basic data" PARTUUID="0b9b4fe0-e36b-40cc-ab68-c96a821fe8de"
#Delete partition #3, create new partition with new start/end values
#Set partition guid to same as collected from blkid earlier
19532873694 - 2097151 = 19530776543
sdb3
Start: 19530776543
End: 19532873694
#Delete partition #2, create new partition with new start/end values
#Set partition guid to same as collected from blkid earlier
sdb2
Start: 6293504
End: 19530774527
reboot
#recreate the md1 array
mdadm —add /dev/md1 /dev/sdb2
#Replace #1 drive, wait for rebuild to complete
#grow array - disable bitmap first, update size, then re-enable bitmap
mdadm —grow /dev/md1 —bitmap none
mdadm —grow /dev/md1 —size max
mdadm —wait /dev/md1
mdadm —grow /dev/md1 —bitmap internal
#kill processes using md1 (disconnect from web console first)
- use kill and the pid reported by fuser to kill all the processes
fuser -vm /dev/md1
#unmount md1 (try a couple times after killing as it will report busy)
umount /dev/md1
#filesystem check
e2fsck -f /dev/md1
#resize filesystem
resize2fs /dev/md1
#remount, check and see if expected files are still there :)
mount /dev/md1 /mnt/HD/HD_a2
#reboot
reboot