Installing VMware Server on unRAID Box


Recommended Posts

  • 2 weeks later...
  • Replies 333
  • Created
  • Last Reply

Top Posters In This Topic

Does anyone have VMware up and running on a 4.5 system yet?  I have not been able to track down the correct kernel to build the development environment and the packages I built under 4.4.2 are not working in 4.5.  I would like to get the added 4.5 features on my system, but cannot afford to lose the VMware functionality.

 

Link to comment

nice work JM.

Wish I'd had your success this weekend!

 

Two days down and i've yet to get a booting unraid develepment enviroment working despite following the extensive threads and how to guides (in different place) by the like so MusicMan.

 

I might just put it off untill 4.5 comes out of beta so i don't have to remake the development enviroment when the new versino come about.

 

(Very frustratting weekend!)

 

It really is a shame that this functionalilty can't be automated from start to finish.  As great as the threads are they don't seem to be noob proof.

 

Link to comment

General Noobie-ness and an inability to pieve together three sets of instrcutions for different versions of slackware and or unraid. ;)

 

I'm getting there and havn't totatly given up. (all thoguht last night at 11PM when i stopped my VM booting was a low point...) I'll remeber not to mess with both the kerneles i've got the lilo pointing at in future ;) and i really should create an undo disk...

 

(Thanks for the offer of support - this forum has been nothing bu helpfull, but i'll post my help requsts on the thread i with the instructions so as not to drive this thread of topic.)

Link to comment

Does anyone have VMware up and running on a 4.5 system yet?  I have not been able to track down the correct kernel to build the development environment and the packages I built under 4.4.2 are not working in 4.5.  I would like to get the added 4.5 features on my system, but cannot afford to lose the VMware functionality.

 

 

Looking around, I can't seem to find the 2.6.29.1 sources, headers, and modules either.  Maybe the next beta will be 2.6.29.2.

Link to comment

Does anyone have VMware up and running on a 4.5 system yet?  I have not been able to track down the correct kernel to build the development environment and the packages I built under 4.4.2 are not working in 4.5.  I would like to get the added 4.5 features on my system, but cannot afford to lose the VMware functionality.

 

 

Looking around, I can't seem to find the 2.6.29.1 sources, headers, and modules either.  Maybe the next beta will be 2.6.29.2.

Did you look here: http://www.kernel.org/pub/linux/kernel/v2.6/

 

They seem to have all the versions.  ;)

 

There is a gzip version

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.1.tar.gz

 

and also a bzip2 version  (we don't have bzip2 on our servers, so this is not as useful, even if it compresses a tiny bit smaller)

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.1.tar.bz2

Link to comment

MusicMan - Thanks for all your help after a very long saturday i eventualy got it working.  ;D ;D ;D

 

My tests so far have been to install a Windows 2k3 server on a non array based disk. and then create two virtual volumes one on D1 of the Array and one on D2 of the array.

I then created a Dynamic disk to join these two into one volume from within the my virtual 2k3 box.

I've then made a share on the *protected* volume and my plan is to share my media from this.

 

This all worked as expected how ever....

 

transfer rates are dismal...

It starts off with about 20MB/s write to the share but this drops off at a pretty steam 0.2MB/s untill it gets down to a write speed of 1.5MB/s where it stays...

 

Transfering data directly to one of the unraid protected disks it also starts off at about 20MB/s but that then drops down to arround 15MB/s.

 

I've read some reports of poor disk IO performance in Virtual Server 2 but 1/10th real disk speed is far worse than i was expecting. has anyone had any experiance with this?

I am using old-ish 250 GB disks, one of which could possibly be on it's last legs... but even so 1/10 the speed of a transfer directly to the protected disk would indicate to me that Virtual Server is to blame for this problem...

 

any thoguhts?

 

Link to comment

This setup could have a significant performance hit while using the disks within the unRAID array.

 

When writing to joined dynamic disks within the virtualized windows, it would have the overhead of the virtual file system plus have to do 8 operations for every write (read disk 1, read parity, write disk1, write parity, read disk2, read parity, write disk2, write parity).  I'ld expect to see somewhere around 1/8th or 1/10th of the performance of your slowest disk that you're writing to, or worse if the drive is fragmented.  Chances are it starts faster while the buffers are filling.

 

It would be faster to not join the virtual volumes, and only write to one at a time on a single unRAID disk.

 

Feel free to correct me if I'm wrong.

Link to comment

... but even so 1/10 the speed of a transfer directly to the protected disk would indicate to me that Virtual Server is to blame for this problem...

 

any thoguhts?

 

 

I've never run a VM from a protected array, but JM2005 was telling me via PM that he has tried both ways and that he had noticable performance improvements when the VM was not on the array.  I would think the parity process would have a noticable affect on disk-intensive VMs, and like praeses says, you're probably compounding the problem using two protected disks for your write operations.

 

If you're willing to take a little bit of risk but come to a definitive answer, you could un-assign your pairty disk temporarily.  Of course, this will leave your array unprotected, and a parity check would need to be performed after the testing.  However, this would eliminate the majority of the extra steps that praeses mentions, and you should be able to isolate the performance hit of running your setup on parity-protected drives.

Link to comment

I can't speak for Tom, but in my opinion, unRAID was not designed for heavy operational use, such as system drives.  It is excellent for archiving and light operational use, such as relatively low bandwidth media storage and playback.  What would be better for you is RAID5, which does have both performance benefits and drive protection.  The FAQ begins with some discussion of the advantages and disadvantages of unRAID vs the alternatives.  As they say, "the right tool for the right job".  Perhaps a custom kernel with both unRAID support for archival storage and RAID5 support for the VM's? (not sure that can be done, probably have to be a hardware RAID5)

Link to comment

I can't speak for Tom, but in my opinion, unRAID was not designed for heavy operational use, such as system drives.  It is excellent for archiving and light operational use, such as relatively low bandwidth media storage and playback.  What would be better for you is RAID5, which does have both performance benefits and drive protection.  The FAQ begins with some discussion of the advantages and disadvantages of unRAID vs the alternatives.  As they say, "the right tool for the right job".  Perhaps a custom kernel with both unRAID support for archival storage and RAID5 support for the VM's? (not sure that can be done, probably have to be a hardware RAID5)

 

You could use the cache disk for better performance, but would be unprotected.  I've been advocating for a RAID-1 pair that could be used as cache and for higher performance needs, like databases or VMs.  Having a RAID-5 option might also be a good idea for some situations.  Note you can do this today with the right hardware - the RAID-1 or RAID-5 array would just look like a big disk to Linux with a RAID enabled controller or motherboard.

Link to comment

You could use the cache disk for better performance, but would be unprotected.  I've been advocating for a RAID-1 pair that could be used as cache and for higher performance needs, like databases or VMs.  Having a RAID-5 option might also be a good idea for some situations.  Note you can do this today with the right hardware - the RAID-1 or RAID-5 array would just look like a big disk to Linux with a RAID enabled controller or motherboard.

 

RAID1 (and RAID0)  is a definitive yes. I have done it with the Silicon Storage processor from a SATA port.

It isolates the RAID1 layer from unRAID completely and does work.

 

RAID5 I doubt this will work unless you put custom drivers in the kernel and mount the drive array manually.

 

The cost of RAID1 hardware to do this is within $200 and works externally or with the right motherboard internally.

There is no performance gain, but you get the added benefit of redundancy.

 

My suggestion would be to use 2 of the fastest drives you can afford on a hardware raid1 array until unRAID supports mirroring internally.  I remember Tom mentioning this being a goal for unRAID in the future.

Link to comment

GOOD NEWS!  ;D - it was a busy weekend testing stuff here's what I found.

 

(I did consider cache disk - but it wont work as  you can’t move data from a cache disk into a virtual file structure on an unRAID partition)

 

I have run some more test and importantly it was worth noting that I wasn't complaining about the speed of my unraid protected disks when it was partiy protected, but the virtual machine inside of them. more accuratly the DRASTIC difference in speed between the two.

Writing to the unraid disk when parity was protecting it,  was still  producing much faster disk writes than the VM inside of it. (more on that latter)

 

 

@ praeses

Spanning my Virtual disk across multiple unraid disks would not lead to as much read write work as you stated - (from my understanding.)

a MS spanned volume does not write (or read) to each spindle on every write. it basically starts at the first volume and fills it up, then starts on the second volume etc etc.

 

Now provided Tom's implement this the way I (assume and ) hope he has  - there should be no reason to read from any of the other disks in order to write a parity bit. - you it can be calculated based on the bit your currently writing to a data disk.

if bit being writtin is 1 and parity is 0 then change parity to 1

if bit being written is 0 and parity is 0 then leave parity alone

if bit being writting is 0 and parity is 1 then leave parity alone

if bit being writtine is 1 and parity is 1 then change parity to 0.

( i might have that table out of whack.. but it's all the same. - provided you know hoe many disks are in the array then you can calculate whether you need to change the parity bit on each write through only reading/writing to the parity disk and reading/writing to the current data disk)

 

 

 

So... here's what I did to improve the performance of my Virtual machines disk writing performance.

 

step 1) turned off virtual memory - no point in using very slow virtual memory when I’ve got a 4GB server allocating 2GB to the guest OS.

 

step 2) took the parity disk off my array to double check performance.  - it still sucked "£$"

 

step 3) changed the Virtual machine policy "Write caching - to - optimized for performance" This resulted in 25 MB/s write speed instantly.

this speed also doesn't drop off even with a 40+ GB transfer.

 

So I'm very happy. it's all working well. I can also confirm that if I let all unraid disks spin down and I start writing to the Shared disk that is made up of 3 virtual disks 230 GB each split into 2GB pre allocated files spread across 3 unraid disks only the a single unraid disk spins up. (this is the unraid disk that has the relevant section of the virtual machines file on it. As I’ve only put 100GB of data into the Virtual machines hdd it's currently only spinning up the first unraid disk.

 

I have yet to add the parity disk to the setup so this is far from proven - but as all the media I want to store is currently sitting on the soon to be parity disk I can't really check. besides it's quicker to copy the 1TB of media across and then put parity on than to calculated it at the beginning and then pay the performance hit for every additional MB I add latter.

 

(Basicly it was step 3 that made the difference. )

Link to comment

One last thing to note ... the OS drive is not on an unRAID drive. that's sitting on a disk that is outside of my array and is used for isntalling vmserver to and hosting OS Virtual disks.

 

the Virtual disks are only used for storing media files and are basicly designed for WORM archiving my data.

 

Raid 5 would work as somone sugested but i need unRAIDs biggest selling feature - the ability to have RAID5 protection with JBOD expandability.

 

this is exactly what i've gotten now and i can work in Windows for my file shares which i feel confortable with. (my 9 to 5 is a windows admin...)

Link to comment

GOOD NEWS!  ;D - it was a busy weekend testing stuff here's what I found.

Glad you figured out how to get reasonible performance

Now provided Tom's implement this the way I (assume and ) hope he has  - there should be no reason to read from any of the other disks in order to write a parity bit. - you it can be calculated based on the bit your currently writing to a data disk.

if bit being writtin is 1 and parity is 0 then change parity to 1

if bit being written is 0 and parity is 0 then leave parity alone

if bit being writting is 0 and parity is 1 then leave parity alone

if bit being writtine is 1 and parity is 1 then change parity to 0.

( i might have that table out of whack.. but it's all the same. - provided you know hoe many disks are in the array then you can calculate whether you need to change the parity bit on each write through only reading/writing to the parity disk and reading/writing to the current data disk)

You are close, but not close enough.

if bit being written is 1 and the current bit in that same data location is a 0 and parity is 0 then change parity to 1

if bit being written is 1 and the current bit in that same data location is a 0 and parity is 1 then change parity to 0

if bit being written is 0 and the current bit in that same location is a 0, and the current  parity is 0, then leave parity alone

if bit being written is 1 and the current bit in that same location on the data disk is a 1, and parity is 1 then leave parity alone

if bit being written is 0 , and the current bit in that same position is a 1, and parity is 1 then change parity to 0.

if bit being written is 0 , and the current bit in that same position is a 1, and parity is 0 then change parity to 1.

 

 

 

To determine if a bit in the parity drive MUST BE FLIPPED FROM ITS CURRENT VALUE (1 -> 0, or 0 -> 1) then you must know if the value in the data disk is being changed from its current value.  Once you get more than a single data drive involved, there is no way to know the value of a parity bit, or to set it without reading all the data drives.  You can flip it however, from 1 to 0, or 0 to 1, if writing to a single data disk and its corresponding bit is changing.

 

You therefore need to read the block of data from the parity drive, and from the data drive, then write the new data to the data drive, and the new block of data to the data drive.  It is 4 I/O operations to perform one "write" to a data drive.

 

Joe L.

Link to comment

that all makes sense - And im sure that you've read that infomation somwhere and so it is factual.

 

But it has raised questions in my head i probably need to go away and answer:

 

I'm right in thinking though that even with a 15 disk array (14 data, 1 parity)

to write to any single data disk you don't need to spin up all 15 disks, just the parity disk and the disk being written to? the rest can be worked out from knowing what the bit was before you changed it, and whether you have changed it?

 

the 4 IO steps you meantion

this I'm still unclear on.

My guess is that you're saying they are

read data bit, read parity bit, write data bit, write parity bit.

 

Surly if a compare is done on the data disk before a bit is written to it. then there is no need to read from the parity disk? for every single disk write?

 

if you take for granted at at time = 0 seconds i.e. array has been built and parity has been calculated there are no mistakes.

then any time I write to a data to any data disk all i need to know is: is the bit im about to write = to what is already there.

if it is then parity bit is left alone.

if it is not the same then flip the parity bit.

 

why do i need to read the parity bit unless i have to flip it? (I understand that when a flip opperation is to take place then i have to know what it started out at in order to work out how to flip it)

 

What huge stupid mistake have i made in my assumption there?

 

 

 

On a slightly more on topic note:

 

I've also seen since my post earlier that it's going to require more than just the parity disk and the data disk contating the section of the Virtual disk in order to write to a virtual disk.

 

I'd over looked the NTFS table being at the begginging of the first (virtual) disk in my spanned volume... I might look to move it arround so that that specific data is sitting on a newer disk as it's going to be spun up every time i write anything to my big virtual disk...

 

anyway we'll see.

I've still got a lot of data to move and a huge ammount of sort of said data to do.

Link to comment

that all makes sense - And im sure that you've read that infomation somwhere and so it is factual.

 

But it has raised questions in my head i probably need to go away and answer:

 

I'm right in thinking though that even with a 15 disk array (14 data, 1 parity)

to write to any single data disk you don't need to spin up all 15 disks, just the parity disk and the disk being written to? the rest can be worked out from knowing what the bit was before you changed it, and whether you have changed it?

 

the 4 IO steps you meantion

this I'm still unclear on.

My guess is that you're saying they are

read data bit, read parity bit, write data bit, write parity bit.

 

Surly if a compare is done on the data disk before a bit is written to it. then there is no need to read from the parity disk? for every single disk write?

 

if you take for granted at at time = 0 seconds i.e. array has been built and parity has been calculated there are no mistakes.

then any time I write to a data to any data disk all i need to know is: is the bit im about to write = to what is already there.

if it is then parity bit is left alone.

if it is not the same then flip the parity bit.

 

why do i need to read the parity bit unless i have to flip it? (I understand that when a flip opperation is to take place then i have to know what it started out at in order to work out how to flip it)

 

What huge stupid mistake have i made in my assumption there?

Your asumption would work if we were able to operate on a "bit" level.  We don't, although examples of how parity works are typically described for a single bit.

 

Disks are read an entire block of words at a time, typically 512 bytes, but the device drivers can be written for much larger sizes or 1k, 2k, 4k, or larger.

 

To save time whenever "writing" to a data block, the request to the disks is always made to read both the data block and the equivalent parity disk block of data.  This represents 512 words, each of 8 bits.

 

The comparison and "flipping" of the parity bit is not done on a bit-by-bit basis, but on a word-by-word bases on an entire block of words...  It is far faster to do them all and not care about if a specific bit needs to be flipped or not... The exclusive-or logic used in parity calculations figures it all out and the raid array just needs to write the newly calculate parity BLOCK corresponding to the parity BLOCK it read.  it does not add logic for each bit in turn, as that would slow things down a lot.

 

Furthermore, to save time, the parity block and the data block being written to are read in parallel.  Two different requests for their data are placed on the bus at the same time, otherwise, the process would always take twice as long.

 

The logic is then

 

old-data-block (read) XOR new-data-block (to be written) XOR old-parity-block (read) = new parity block (to be written).

Link to comment

Does anyone know if Tom is going to rev the Kernel for 4.5 beta 7 or 4.5 final?  I ask because I desperately need the packages to compile a new build of VMware for the 4.5 kernel to get the new feautres (Drobo support, Temperature readings, and beeping (for alerts)).  I am unable to find 2.6.29.1 anywhere (besides source that I do not have the skills to compile), so I downloaded 2.6.29.2 in preparation, but I can see this being a huge issue for those of us that want to build a custom environment.  It is typically not advised to run a current kernel for many reasons, so I am hoping Tom will push back to the previous kernel since it did not resolve the issue it was targeted at.

 

Am I off-base here?  How is everyone else planning to upgrade to 4.5 and maintain VMware functionality?

 

Link to comment

I've been trying unsuccessfully the last few days to get VMWare server running on my unraid box. Long story short I downloaded version 2.0.1-156745.i386 which didn't work. When I downloaded the previous version (2.0.0-122956.i386) and followed the instructions it worked first go (thanks for all the hard work musicmann!). I'm done pulling my hair out trying to get the latest version to work  :-\

 

Mainly writing this so other people know they might have trouble with the newer versions.

 

For those that are interested the specific problems I was having seemed to be with vmware-authd not starting up correctly on the unraid box (on my unraid dev environment it was working fine). I could login to the web console but when I tried to open the console on a VM it would error out saying "No connection could be made because the target machine actively refused it". I tried changing ports, messing around with the PAM config, reinstalling multiple times but nothing helped. vmware-authd would never start up.

Link to comment

Hi guys,

 

As part of my install and to make following these instrcutions easier i decided to add a disk outside of my array to store my packages and have unraid on.

I called this disk cache so MusicMans instrcutions worked for me.

 

this is not an unRAID cache disk - i only have the plus licence.

 

Is there a way firstly i can mount this disk as an SMB share like this \\tower\cache

And secondly can i set the spin down timer on this *cache* disk? it seems unraid only spins down my array disks.

 

thanks.

Link to comment

Hi guys,

 

As part of my install and to make following these instrcutions easier i decided to add a disk outside of my array to store my packages and have unraid on.

I called this disk cache so MusicMans instrcutions worked for me.

 

this is not an unRAID cache disk - i only have the plus licence.

 

Is there a way firstly i can mount this disk as an SMB share like this \\tower\cache

yes

And secondly can i set the spin down timer on this *cache* disk? it seems unraid only spins down my array disks.

yes

thanks.

You are welcome.

 

To share a disk you can create file  /boot/config/smb-extra.conf

 

In it put the following lines

[share_name]

        path = /mnt/disk/path_to_your_mount_directory

        read only = No

        force user = root

        map archive = Yes

        map system = Yes

        map hidden = Yes

        create mask = 0711

        directory mask = 0711

 

Make sure you use a UNIX editor, or pass it through fromdos.  I don't think DOS style carriage returns are legal.

Then to get it to be used, you need to reboot, or invoke

smbcontrol smbd reload-config

 

To set the spin down timer, issue an hdparm command as follows:

hdparm -S242 /dev/sd?

where sd? is the device of your added disk (It might be hd? if IDE vs. SATA)

 

Joe L.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.