RE: [SSI-devel] [DRBD] drbd-0.7.6-ssi_pre17 patch
Brought to you by:
brucewalker,
rogertsang
From: Roger T. <pe...@ho...> - 2004-12-13 18:15:24
|
Hi En Chiang, >1. The patch to linuxrc doesn't take into consideration the meta-device being different from the ll-device. This would be useful to mirror an existing root (can't resize mounted fs). True I left it out. It is up to the user to mknod the md-dev because it may take some processing to figure out the major minor even if one issued a sh-md-dev to get the path to their meta device. On the other hand it is easy (relatively) to resize an existing root by booting with a RH/FC rescue CD or Debian Knoppix CD. However let me know if someone made a script to mknod the md-dev in linuxrc to handle either ide and scsi devices on all platforms. For the time it takes to script that, I'd say just issue the one line mknod command for the md-dev after patching linuxrc! Later on if we do include DRBD linuxrc mods into mkinitrd and not as a separate contrib package we might consider scripting that. > >2. /etc/init.d/drbd is changed to fsck and mount the drbd devices from fstab. The initialisation could be moved into rc.sysinit and >rc.sysinit.nodeup before the fsck/mount calls. Attached is a patch to rc.sysinit.nodeup which I've been using. The drawback of this would be that the /etc/init.d/drbd script would not be used at all. I think it is a bad idea to replace the drbd script with the rc.sysinit* patches. However it is a good idea to have the DRBD script deal with DRBD stuff only and let the SSI-modified rc.sysinit scripts deal with fsck and mount. 1. The user can no longer manually choose not to run DRBD during SysVinit which might be something the user wants to do for non-root mounts. 2. Your rc.sysinit needs to assure drbd is loaded or just skip all the drbd stuff. 3. Change test to [ $1 -ne 0 ]; after grep Primary in case grep is broken. 4. You need to include drbd global options from /etc/drbd.conf. If we choose to do it this way a more elegant solution would be to call the original /etc/init.d/drbd script rather than re-writing it in rc.sysinit. Chkconfig drbd off. Then deal with changing state to Primary. # DRBD initializtion [ -x /etc/init.d/drbd ] && /etc/init.d/drbd start # For all DRBD resources change to Primary state > >3. Attached is a howto (based on the old drbd-Howto) which explains the installation procedure. Do take a look and let me know what you think. I'll update the non-root filesystem failover tomorrow. 1. Still need to s/0.7.5/0.7.6/g 2. No need to mkdir /dev/drbd and mknod /dev/drbd/0 since my linuxrc patch does that. 3. No need to mknod the root device (same reason). 4. Update the instructions to patch linuxrc with my linuxrc.patch. 5. On step 12 in grub.conf don't replace the UUID=... with /dev/drbd/0 (same reason). 6. Harsh but is a possibility and has happened with a non-stable SSI kernel. Add note that DRBD destroys data integrity in the following situation: Node 1 hangs/crashes. Node 2 takes over, then Node 2 crashes before Node 1 recovers; Node 2 crashes before or during node 1 initrd CLMS discovery (root) or drbd connection (non-root). So Node 1 takes over. Node 1 storage device fs consistent, but contains old or missing data - node 2 storage has the latest data! When node 2 recovers DRBD will detect split-brain and not sync, but next time drbd connects node 2 will be sync target. The damage is potentially extreme. Regards, Roger |