Copy on Write Vblade Server
If you want to support a lot of aoe clients, then using a copy on write device may be the answer for you. I've written a small script that will setup your loop device and device mapper configration for you. It will also run vblade and link the approite cow block device with a aoe instance.
For more information on how copy on write works goto http://en.wikipedia.org/wiki/Copy_on_write
Here's a Diagram of how the scripts set things up (showing 4 cow devices) Dash Disks represent Virtual Device, Solid disk represent sparse files on disk.
#Copy on write for vblade server v0.5 #toxicnaan guess what goes here gmail.com #this uses raw device mapper commands, if your using either LVM,LVM2,DM,LOOP #then run it at your own risk! #This will be like crossing the streams, it will be bad, very bad. #don't run this if you don't understand whats going on #if this script murders your dog/cat, deletes your server, or causes a war #you can't blame me. #useage makecow.sh 'image file name' #image file name is an image that you want booted over aoe. #takes a current imagefile, and makes 8 cow devices using loop and devicemapper #it uses sparse files to cut down on diskspace #using this script allows for many machines booting over aoe to use #the same primary disk image. #all writes your clients with go into the cow files. #you need to be root to run this. #for extra fun, try placing your cow files on a suitable large ram disk #like /dev/shm for extra speeeeeeeeeeeeeed! #vblade dirly run in background, targets range from 0 0 to 0 7. #big greets to the masters of #etherboot on freenode. Thanks for all #your help getting gpxe working for me!!!!!! #no thanks to device mapper documentation!!!! modprobe dm_mod modprobe dm_mirror modprobe dm_snapshot IMAGE_FILE=$1 img_loop_dev=`losetup -f` losetup -v -f $IMAGE_FILE cow_size=`blockdev --getsize $img_loop_dev` echo $cow_size chunk_size=64 FILE=$IMAGE_FILE for loopnumber in 0 1 2 3 4 5 6 7 do dd if=/dev/zero of=$FILE.cow.$loopnumber bs=512 count=0 seek=$cow_size COWLOOPDEV=`losetup -f` losetup -v -f $FILE.cow.$loopnumber echo "0 $cow_size snapshot $img_loop_dev $COWLOOPDEV p $chunk_size" | dmsetup create $FILE.cow.$loopnumber vblade 0 $loopnumber eth0 /dev/mapper/$FILE.cow.$loopnumber & echo $COWLOOPDEV is attached to $FILE.cow.$loopnumber done losetup -a dmsetup table
Same diagram but in Ascii.
Converted to PNG with http://ditaa.sourceforge.net/
                              -----------------------------
                              |--/dev/mapper/Image.cow.0--|
                       |----/----------+       /-----------+      
                       |    :{s}       |       |{s}        |--vblade eth0
                       |    |/dev/loop1|------>|Image.cow.0|  0 0
                       |    +----------/       +-----------/
                       |
                       |      -----------------------------     
/-----------+          |      |--/dev/mapper/Image.cow.1--|
:{s}        |          |----/----------+       /-----------+
|           |          |    :{s}       |       |{s}        |--vblade eth0
|           |    COW   |    |/dev/loop2|------>|Image.cow.1|  0 1
|/dev/loop0 |----------|    +----------/       +-----------/
|           |          |
|           |          |      -----------------------------
|           | SNAPSHOT |      |--/dev/mapper/Image.cow.2--|
|READ ONLY  |          |----/----------+       /-----------+
+-----------/          |    :{s}       |       |{s}        |-->vblade eth0
      |                |    |/dev/loop3|------>|Image.cow.2|   0 2
      |                |    +----------/       +-----------/
      |                |
/-----------+          |      -----------------------------
|{s}        |          |      |--/dev/mapper/Image.cow.3--|
|Image.img  |          |----/----------+       /-----------+
+-----------/               :{s}       |       |{s}        |-->vblade eth0
                            |/dev/loop4|------>|Image.cow.3|   0 3
                            +----------/       +-----------/   
                              
/--------------------------------------------\
|             dmsetup table                  |
|Image.cow.3: 0 8193150 snapshot 7:0 7:4 P 64|
|Image.cow.2: 0 8193150 snapshot 7:0 7:3 P 64|
|Image.cow.1: 0 8193150 snapshot 7:0 7:2 P 64|
|Image.cow.0: 0 8193150 snapshot 7:0 7:1 P 64|
\--------------------------------------------/
                       




