Powershell 创建一个空文件以强制虚拟机监控程序扩展真正的文件系统

Powershell 创建一个空文件以强制虚拟机监控程序扩展真正的文件系统,powershell,cloud-hosting,Powershell,Cloud Hosting,我正在使用像AmazonEC2和CloudLayer这样的云计算机。高清性能是瓶颈 我从CloudLayer得到的一个建议是用一个5GB的大文件扩展我的文件系统,这样他们就不必每次我写入磁盘时都要扩展它。我编写了这个Powershell脚本,但因为它会创建空值,所以我不确定虚拟机监控程序是否真的会增长底层文件系统文件 如何验证它是否有效? #Find all local drives get-psdrive -PSProvider 'FileSystem' | where {$_.Root -l

我正在使用像AmazonEC2和CloudLayer这样的云计算机。高清性能是瓶颈

我从CloudLayer得到的一个建议是用一个5GB的大文件扩展我的文件系统,这样他们就不必每次我写入磁盘时都要扩展它。我编写了这个Powershell脚本,但因为它会创建空值,所以我不确定虚拟机监控程序是否真的会增长底层文件系统文件

如何验证它是否有效?

#Find all local drives
get-psdrive -PSProvider 'FileSystem' | where {$_.Root -like '?:\'} | foreach {
    $msg1 = "Drive " + $_.Name + " has " + $_.Free + " bytes"
    Write-Host $msg1        

    #Create a file the size of the empty space on the drive.
    $fileNameAndPath = $_.Root + 'BIG_TEMP_FILE_DELETE_THIS.dat'
    $f = new-object System.IO.FileStream $fileNameAndPath, Create, ReadWrite
    $f.SetLength($_.Free)
    $f.Close()
}
他们的解释:

CCI使用平面文件来存储文件系统内容(.vdx)。如果您在自己的工作站上尝试过虚拟化,这可能看起来很熟悉。创建虚拟机时,您可以指定最大虚拟驱动器大小,但是平面文件或.vdx的大小仅与操作系统安装所需的空间相同,并且平面文件将随着您需要更多空间而相应增加

当只有少量虚拟主机在平面文件上分配额外空间,然后以非常快速和透明的方式写入平面文件时,但是在写入共享存储介质时,在将内容写入磁盘之前分配额外的空间对读写性能有更大的影响

您可以通过在平面文件上预分配空间来提高性能,这是通过在系统使用量较低(约5GB)时将一个大文件写入驱动器,然后删除刚刚创建的文件来实现的。这将使平面文件的大小与测试文件的大小成比例,删除它将再次释放空间以供使用


现在,当您使用存储介质时,虚拟机监控程序不需要浪费时间在SAN上分配额外的空间,同时尝试写入虚拟驱动器。

如果您担心文件中是否充满了内容,您可以轻松初始化字节数组,.NET将保证初始化的字节设置为0。您可以使用它将实际数据写入磁盘

# write 4K worth of data at a time
$bufSize = 4096
$bytes = New-Object byte[] $bufSize
$file = [System.IO.File]::Create("C:\big.raw")
# write the first block out to accommodate integer division truncation
$file.Write($bytes, 0, $bufSize)
for ($i = 0; $i -lt $_.Free; $i = $i + $bufSize) { $file.Write($bytes, 0, $bufSize) }
$file.Close()

如果您担心文件中是否有内容,可以轻松初始化字节数组,.NET将保证初始化的字节设置为0。您可以使用它将实际数据写入磁盘

# write 4K worth of data at a time
$bufSize = 4096
$bytes = New-Object byte[] $bufSize
$file = [System.IO.File]::Create("C:\big.raw")
# write the first block out to accommodate integer division truncation
$file.Write($bytes, 0, $bufSize)
for ($i = 0; $i -lt $_.Free; $i = $i + $bufSize) { $file.Write($bytes, 0, $bufSize) }
$file.Close()

我可以想象,验证它是否有效的唯一方法是查看性能瓶颈是否消失。我将尝试衡量这一点,但这很难:一旦你让它成长,它将永远存在!我可以想象,验证它是否有效的唯一方法是查看性能瓶颈是否消失。我将尝试衡量这一点,但这很难:一旦你让它成长,它将永远存在!很遗憾,OP再也没有回来,并将此标记为正确。这是一段方便的代码片段,可以剪切并粘贴到PS会话中。可惜OP没有回来并将其标记为正确。这是一段方便的代码片段,可以剪切并粘贴到PS会话中。