← Back to team overview

kernel-packages team mailing list archive

[Bug 320638] Re: hot-add/remove in mixed (IDE/SATA/USB/SD-card/...) RAIDs with device mapper on top => data corruption (bio too big device md0 (248 > 240))

 

What you people are forgetting is that RAID1 is in fact the PERFECT backup solution:
It takes a low level copy of the whole system while the system is *running*, and as opposed to cp/rsync, the copy is *coherent*:
Programmers do NOT design software to be robust against their files being randomly copied one after another by an external cp/rsync. How is this even supposed to work? If you copy file A, then file B, nothing guarantees that the software does not modify one of them in between your copying in a way which makes the files incoherent / breaks their compatibility.
And with regards to backup, we're talking about copying whole operating systems, consisting of *thousands* of programs. I would say the probability among thousands of programs is 100% that at least one of them will have its data corrupted if you copy its files using cp/rsync while it is running.

As opposed to that, a RAID1 is always in complete coherence if you shut down the system before you remove the disk. There is no mismatching data in multiple files. You can immediately boot up again, so backup takes 1 minute.
You could of course take offline the system for cp/rsync as well to get coherent data, but that will give you *hours* of downtime because the copying needs to happen while the system is offline. RAID1 can copy while it is running!

Overall, this bug is the worst issue in software design I've encountered in years, and I'm almost screaming :( I have spent over 20 hours migrating my machines to RAID1 so I can reduce the backup procedure from >5 hours to 5 minutes, and now it just doesn't WORK.
This is infuriating :(  Can someone *please* come up with a fix / workaround?
I would be willing to pay a bounty of 50 EUR in Bitcoin for this to be fixed.

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/320638

Title:
  hot-add/remove in mixed (IDE/SATA/USB/SD-card/...)  RAIDs with device
  mapper on top => data corruption (bio too big device md0 (248 > 240))

Status in The Linux Kernel:
  Confirmed
Status in mdadm - Tool for managing linux software RAID arrays.:
  Confirmed
Status in debian-installer package in Ubuntu:
  Invalid
Status in linux package in Ubuntu:
  Won't Fix
Status in mdadm package in Ubuntu:
  Confirmed
Status in ubiquity package in Ubuntu:
  Invalid

Bug description:
  Problem: md changes max_sector setting of an already running and busy
  md device, when a (hotplugable) device is added or removed. However,
  the device mapper and filesystem layer on top of the raid can not
  (always?) cope with that.

  Observations:
  * "bio too big device mdX (248 > 240)" messages in the syslog
  * read/write errors (some dropped silently, no noticable errors reported during operation, until things like dhcpclient looses its IP etc.)

  Expected:
  Adding and removing members to running raids (hotplugging) should not change the raid device characteristics. If the new member supports only smaller max_sector values, buffer and split the data steam, until the raid device can be set up from a clean state with a more appropriate max_sector value. To avoid buffering and splitting in the future, md could save the smallest max_sector value of the known members in the superblock, and use that when setting up the raid even if that member is not present.

  Note: This is reproducible in much more common scenarios as the
  original reporter had (e.g. --add a USB (3.0 these days) drive to an
  already running SATA raid1 and grow the number of devices).

  Fix:
  Upsteam has no formal bug tracking, but a mailing list. The response was that finally this needs to be "fixed [outside of mdadm] by cleaning up the bio path so that big bios are split by the device that needs the split, not be the fs sending the bio."

  However, in the meantime mdadm needs to saveguard against the date
  corruption:

  > > [The mdadm] fix is to reject the added device [if] its limits are
  > > too low.
  > 
  > Good Idea to avoid the data corruption. MD could save the
  > max_sectors default limit for arrays. If the array is modified and the new 
  > limit gets smaller, postpone the sync until the next assembe/restart.
  > 
  > And of course print a message if postponing, that explains when --force would be save.
  > What ever that would be: no block device abstraction layer (device mapper, lvm, luks,...) 
  > between an unmounted? ext, fat?, ...? filesystem and md?

  As upsteam does not do public bug tracking, the status and
  rememberence of this need remains unsure though.

  
  ---

  This is on a MSI Wind U100 and I've got the following stack running:
  HDD & SD card (USB card reader) -> RAID1 -> LUKS -> LVM -> Reiser

  Whenever I remove the HDD from the Raid1
  > mdadm /dev/md0 --fail /dev/sda2
  > mdadm /dev/md0 --remove /dev/sda2)
  for powersaving reasons, I cannot run any apt related tools.

  > sudo apt-get update
  [...]
  Hit http://de.archive.ubuntu.com intrepid-updates/multiverse Sources
  Reading package lists... Error!
  E: Read error - read (5 Input/output error)
  E: The package lists or status file could not be parsed or opened.

  Taking a look at the kernel log shows (and many more above):
  > dmesg|tail
  [ 9479.330550] bio too big device md0 (248 > 240)
  [ 9479.331375] bio too big device md0 (248 > 240)
  [ 9479.332182] bio too big device md0 (248 > 240)
  [ 9611.980294] bio too big device md0 (248 > 240)
  [ 9742.929761] bio too big device md0 (248 > 240)
  [ 9852.932001] bio too big device md0 (248 > 240)
  [ 9852.935395] bio too big device md0 (248 > 240)
  [ 9852.938064] bio too big device md0 (248 > 240)
  [ 9853.081046] bio too big device md0 (248 > 240)
  [ 9853.081688] bio too big device md0 (248 > 240)

  $ sudo mdadm --detail /dev/md0
  /dev/md0:
          Version : 00.90
    Creation Time : Tue Jan 13 11:25:57 2009
       Raid Level : raid1
       Array Size : 3871552 (3.69 GiB 3.96 GB)
    Used Dev Size : 3871552 (3.69 GiB 3.96 GB)
     Raid Devices : 2
    Total Devices : 1
  Preferred Minor : 0
      Persistence : Superblock is persistent

    Intent Bitmap : Internal

      Update Time : Fri Jan 23 21:47:35 2009
            State : active, degraded
   Active Devices : 1
  Working Devices : 1
   Failed Devices : 0
    Spare Devices : 0

             UUID : 89863068:bc52a0c0:44a5346e:9d69deca (local to host m-twain)
           Events : 0.8767

      Number   Major   Minor   RaidDevice State
         0       0        0        0      removed
         1       8       17        1      active sync writemostly   /dev/sdb1

  $ sudo ubuntu-bug -p linux-meta
  dpkg-query: failed in buffer_read(fd): copy info file `/var/lib/dpkg/status': Input/output error
  dpkg-query: failed in buffer_read(fd): copy info file `/var/lib/dpkg/status': Input/output error
  [...]

  Will provide separate attachements.

To manage notifications about this bug go to:
https://bugs.launchpad.net/linux/+bug/320638/+subscriptions