[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [linux-lvm] Mirror resync direction

On Oct 26, 2006, at 3:17 PM, Paul LeoNerd Evans wrote:

I'm running kernel 2.6.17 using the lvm2 package currently in debian
testing (2.02.06-3). I use it to set up a VG containing two
PVs, /dev/sda2 and /dev/sdb2. I create a mirror LV using corelog:

  lvcreate --mirror 1 --corelog ...

I create a filesystem on it, and populate it with files. I then try
testing how it copes with drive failures, by simulating a replaced disk.

To do this, I zero out one of the sides using

  dd if=/dev/zero of=/dev/sda2

This doesn't really reflect what would happen if you replaced a disk, I don't think. With this, you are simply going around mirror's back to write data to a device which it controls.

In real life, I think you would have a disk failure (which would force you to run 'vgreduce --removemissing vg'), then you would insert a new block device, pvcreate/vgextend/lvconvert.

(When dmeventd is properly running, it should take care of the steps that are currently manual.)

Having done that, I do the usual restore method

  pvcreate --uuid 'whatever' /dev/sda2
  vgcfgrestore vg
  vgchange -a y

And I note that it starts to resync the mirror. But it goes in the
"wrong" direction - sda2's PV is the master, but that's been zeroed out. sdb2's is the slave but contains the real data. The block copying goes in the wrong direction here, copying the master's zeroes over the good data
in the slave.

Again, mirror has no idea that you did this. The act of dd'ing to an underlying device is like dd'ing to a device under a file system - it doesn't know you are doing it and causes corruption.

Is this a bug in the LVM2 tools, or the dm-mirror target, or what? Is it
perhaps a limitation of --corelog; in which case, how can I protect
against that?

LVM2 mirroring is still a work in progress (trying to get the right pieces upstream). Depending on the version of LVM2 and the kernel patches you have, it may not work.

The use of --corelog simply means that the mirror device will be resynchronized every time the device is activated. The persistent log (disk log) tracks what resynchronization has been done and can avoid all complete resyncs.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]