Date: Tue, 1 Sep 1998 16:19:32 +0200 (MET DST)
From: MOLNAR Ingo <mingo@valerie.inf.elte.hu>
To: linux-raid@vger.rutgers.edu
Subject: RELEASE: RAID-0,1,4,5 version 0.51, kernel 2.1.120
this is an alpha release of the latest Linux RAID0145 drivers, against
kernel 2.1.120.
WARNING: this patch and the new raidtools contains various downwards
incompatible changes. You might not be able to run arrays created with
this release under older kernels. (older arrays will run upwards
compatible with nonfatal warnings printed by the kernel)
you can find raid0145-980901-2.1.120.gz and raidtools-0.51beta1.tar.gz in
the usual alpha directory:
http://linux.kernel.org/pub/linux/daemons/raid/alpha
an overview of new features in this release:
= fully kernel based RAID configuration, 'zero-time mkraid'
there is a new API between user-space and the kernel space RAID
drivers, which has the following structure:
/* status */
#define RAID_VERSION _IO (MD_MAJOR, 0x10)
#define GET_ARRAY_INFO _IO (MD_MAJOR, 0x11)
#define GET_DISK_INFO _IO (MD_MAJOR, 0x12)
/* configuration */
#define CLEAR_ARRAY _IO (MD_MAJOR, 0x20)
#define ADD_NEW_DISK _IO (MD_MAJOR, 0x21)
#define REMOVE_DISK _IO (MD_MAJOR, 0x22)
#define SET_ARRAY_INFO _IO (MD_MAJOR, 0x23)
#define SET_DISK_INFO _IO (MD_MAJOR, 0x24)
#define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25)
#define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26)
#define PROTECT_ARRAY _IO (MD_MAJOR, 0x27)
/* usage */
#define RUN_ARRAY _IO (MD_MAJOR, 0x30)
#define START_ARRAY _IO (MD_MAJOR, 0x31)
#define STOP_ARRAY _IO (MD_MAJOR, 0x32)
#define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33)
everything RAID related is supposed to be done through this API.
raidtools no more touches the raw devices. In fact, raidtools has
shrinked to two commands currently:
mkraid /dev/md0
raidstart /dev/md0
mkraid creates and starts the array, raidstart starts an already
created array. Probably ckraid will stay to help more complex error
scenarios, but it's 'everyday usage' is completely eliminated. It will
probably be a debugging tool in the future, than a real utility.
mkraid no more has to clear the array, thus the creation of RAID
arrays got much faster.
= 'nonpersistent' superblocks support
a new keyword has been added to /etc/raidtab:
persistent-superblock 0
the above line means that the array has to be mkraid-ed before every
usage, but it's superblock will not be allocated at the end of the
device.
this feature enables:
- to create a RAID1 array after the filesystem has been created.
(with the disadvantage of not having a superblock)
- legacy (superblock-less) RAID0 support
= RAID0 and linear can now have a superblock too
the default for RAID0 is no persistent superblock, but it can be
enabled by adding:
persistent-superblock 0
such RAID0 arrays will behave just like normal RAID1 and RAID5 arrays,
they can be autorun at boot, they can be raidstart-ed with one command,
etc.
= runtime detection and benchmarking of checksumming functions
the RAID5 driver detects and measures various checksumming functions,
and picks the fastest one automatically at bootup:
raid0 personality registered
raid1 personality registered
raid5 personality registered
raid5: measuring checksumming speed
raid5: using high-speed MMX checksum routine
pII_mmx : 875.919 MB/sec
p5_mmx : 842.391 MB/sec
8regs : 598.551 MB/sec
32regs : 360.045 MB/sec
using fastest function: pII_mmx (875.919 MB/sec)
the whole checksumming code has been integrated into xor.c (all
platform specific functions), because we no more have one
assembly-optimized function, but possibly many. Development is easier
this way too. Feel free to send better or new functions to this list
that work better on certain CPUs. It does not have to be a generic
function, if it's faster only on one CPU revision, i will add it
to the sources because it gets picked up automatically.
= superblock integrity checksums
superblock updates are atomic starting from this release, ie. if a
superblock gets corrupted due to partial writes, it will not be used.
(unless all superblocks are corrupted)
= automatic raidstop on reboot
well, now we do a raidstop on reboot [idea by Carlos Carvalho]
= 'raidstart' from user-space
autodetection can be done from user-space too, the kernel will just
pick the right devices and start the array.
= extensive rewrite
basically all the main MD code got rewritten, all RAID include files
are collected in include/linux/raid. I have tested most usages and
things do work for me, but there might be some glitches left.
= many usability bugs fixed
WARNING: since there were so many changes, be careful and do not rely on
the kernel getting everything right, especially when using old arrays with
the new code. Although it should work fine, there might be some problems
and rough edges left.
enjoy. Reports, comments, flames, feature-requests welcome. Let me know if
i have missed/forgotten some patch sent to me. (especially i'd be curious
if Sparc works OK now)
-- mingo