Good Day,
Would just like to know if it is possible at all to break a mirror and
convert a md device back to its original state without losing data ?
Regards
Shaun
From: Andy Smith <hidden> Date: 2021-03-24 15:05:12
Hello,
On Wed, Mar 24, 2021 at 01:04:07PM +0200, Shaun Glass wrote:
Would just like to know if it is possible at all to break a mirror and
convert a md device back to its original state without losing data ?
The default metadata version (1.2) is placed at the start of an
array, so even if zeroed this will prevent the array member being
used as the filesystem that is on top of it.
If you have metadata version 0,9 or 1.0 which are at the end then I
don't see why it wouldn't work. I've never done it though so try it
out first on loop devices.
Don't forget to "mdadm --zero-superblock /dev/sda1" (or whatever
devices) for the member device that you have failed out of the
array, so it is no longer treated as part of an array,
But, this being a RAID-1 you have at least two devices so wouldn't
it be safer to:
- Fail out one device
- Zero that device
- Create new filesystem on the removed device
- Copy data onto it from the still-running array that is currently
degraded
- Use new filesystem for whatever you wanted
?
Depending on what you are trying to achieve you could also import
the broken our device as ANOTHER MD RAID-1 array so both arrays are
running degraded (and now divergent).
Finally, if you are on superblock versions 1.1 or 1.2 you may be
able to work out the offset into the device and use a loop device to
skip that, so treating it as a normal filesystem:
https://raid.wiki.kernel.org/index.php/RAID_superblock_formats#The_version-1_Superblock_Format
Cheers,
Andy
--
https://bitfolk.com/ -- No-nonsense VPS hosting
From: Roman Mamedov <hidden> Date: 2021-03-24 15:14:52
On Wed, 24 Mar 2021 14:44:07 +0000
Andy Smith [off-list ref] wrote:
The default metadata version (1.2) is placed at the start of an
array, so even if zeroed this will prevent the array member being
used as the filesystem that is on top of it.
...
Finally, if you are on superblock versions 1.1 or 1.2 you may be
able to work out the offset into the device and use a loop device to
skip that, so treating it as a normal filesystem:
https://raid.wiki.kernel.org/index.php/RAID_superblock_formats#The_version-1_Superblock_Format
Also could delete the partition and recreate it with the new starting offset,
matching the offset for actual data. Recently I've migrated a couple of disks
off LVM in this manner.
Or if the entire disk was used as an array member, then create a brand new
partition table on it, with a single partition of the required offset.
sfdisk is helpful for dumping partitions into a text file ("-d"), which can
then be edited and restored to the device with "sfdisk /dev/disk < file".
All of this is likely more complex if you have to use GPT.
--
With respect,
Roman
But, this being a RAID-1 you have at least two devices so wouldn't
it be safer to:
- Fail out one device
- Zero that device
- Create new filesystem on the removed device
- Copy data onto it from the still-running array that is currently
degraded
- Use new filesystem for whatever you wanted
Better yet just get another drive and copy it across. You can always do
a "dd if=/dev/md0 of=/dev/sdc1" or whatever is appropriate. (And before
anyone asks, I'm planning to copy a filesystem that way, because it's
chokker with hard links. I *really* don't want to cp the contents ...)
BUT. If you really do want to break the mirror (as I might, just to see
what happens :-), then your best bet is to add a third disk, let it
sync, then fail it off and play with that disk.
As the others said, if you have a 0.9 or 1.0 superblock, your filesystem
starts in the same place as your partition, so if you delete the
superblock the partition becomes non-raid. But if your superblock is 1.1
or 1.2, then that won't work.
Cheers,
Wol