Disk Subsystem:
Here's an article from Microsoft re: partition alignment in SQL Server 2008: http://msdn.microsoft.com/en-us/library/dd758814.aspx
The theory explained in the article is why I'm giving you the link, not 'cuz I think you'll be running SQL Server. The workload of a file server is less apt to be as touchy about partition alignment as SQL Server, but every little bit helps.
NTFS:
You can disable last access time stamping in NTFS with:
fsutil behavior set disablelastaccess 1
You can disble short filename creation (if you have no apps that need it) with:
fsutil behavior set disable8dot3 1
Think about the best NTFS cluster size for the kinds of files you're going to be putting on the box. In general, you want to have as large a cluster size as you can get away with, balancing that against wasted space for sub-cluster-sized files. You also want to try and match your cluster size to your RAID stripe size (and, as was said above, have your stripes aligned to your clusters).
There's a theory that most reads are seqential, so the stripe size (which is typically the minimum read of the RAID controller) should be a multiple of the cluster size. That depends on the specific workload of the server and you'd need to measure it to know for sure. I'd keep them the same.
If you're going to have a large number of small files you may want to start with a larger reserve for the NTFS master file table (MFT) to prevent future MFT fragmentation. As well as talking about the fsutil command above, this document describes the "MFT zone" setting: http://technet.microsoft.com/en-us/library/cc785435(WS.10).aspx Basically, you want to reserve as much disk space for the MFT as you think you'll need, based on a predicted number of files you'll have on the volume, to try and prevent MFT fragmentation.
A general guide from Microsoft on NTFS performance optimization is available here: http://technet.microsoft.com/en-us/library/cc767961.aspx It's an old document, but it gives some decent background nonetheless. Don't necessarily try any of the "tech stuff" it says to do, but get concepts out of it.
Layout:
You'll have religious arguments with people re: separating the OS and data. For this particular application, I'd probably pile everything into one partition. Someone will come along and tell you that I'm wrong. You can decide yourself. I see no logical reason to "make work" down the road when the OS partition fills up. Since they're not separate RAID volumes, there's no performance benefit to separating the OS and data into partitions. (It would be a different story if they were different spindles...)
Shadow Copies:
Shadow copy snapshots can be stored in the same volume, or on another volume. I don't have a lot of background on the performance concerns associated with shadow copies, so I'm going to stop there before I say something dumb.
There is a general misconception about VMFS here - Reads\Writes from within the guest are sent directly to the SAN\SCSI block device - VMFS (and it's block size) has no real involvement, in fact there is a sub-block allocation mechanism at play that works in 64kb chunks no matter what the VMFS block size (in terms of allocation) but AFAIK for the read\write process the block size is irrelevant.
What you should do is optimise your stripe size as you would for the target OS\application within the Guest - larger stripes for large sequential IO, smaller stripes for more fragmented smaller IO, and pay more attention to partition alignment (within the Guest, and for the VMFS volumes themselves) as any benefits you gain from stripe sizing will be undone if you don't ensure that heavily used partitions are aligned.
There are some good pointers in this VIOPS article, it's got a few flaws but its explanation and advice is reasonably good.
Best Answer
Generally speaking, selecting a stripe size is a bandwidth vs IOPs tradeoff: smaller stripe size often means higher sequential read/write speed, while bigger stripe size means higher concurrent IOPs (due to less IO spanning multiple disks).
That said, mechanical HDD are highly unbalanced devices: latency dominates until relatively big IO (>= 32 KB) are issued, so stripe element size (or chunk size, in Linux MDRAID parlance) under 64 KB are rarely used (which happens to be the default value).
For a virtualization host, where IOPs are far more important than single-thread sequential speed, I would increase it to 256 KB.