Skip to main content
Home
badllama.com
  • Search
  • Log In

Writing truly random data to disk

cpeters's picture

Tue, 10/25/2016 - 11:41 by cpeters

Use this if you're having problems getting accurate disk read and write statistics due to de-duplication.

param (
[int]$TotalGB,
[string]$location="D:\"
)

$KB = 1024
$MB = $KB * 1024
$GB = $MB * 1024
$MIN_FSIZE = $MB
$maxFileSize = 5 * $GB
$freeSpace = $TotalGB * $GB

[int]$i = 0
while ($maxFileSize -gt $MIN_FSIZE -and $freeSpace -gt 0)
{
    [Uint64]$candidateFileSize = Get-Random -minimum $MIN_FSIZE -maximum $maxFileSize
    if ($candidateFileSize -ge $freeSpace)
    {
        $maxFileSize = $maxFileSize / 2
    }
    else
    {
        $fileName = $location + "Random-" + ($i -as [string]) + ".rnd"
        $i+=1

        $fileSize = $candidateFileSize
        Write-Host "---------------------------"
        Write-Host "Creating"$fileName" of "$fileSize" bytes"

        #Critical part of the code.  Powershell supports file handles, so I use them!
        $fstream  = New-Object System.IO.FileStream($fileName,[io.filemode]::OpenOrCreate)
        $w = New-Object System.IO.BinaryWriter($fstream)
        $consumed = 0
        
        #Critical part of the code.  This creates a random byte array in memory and then flushes it to disk.
        #Boost performance by making this buffer bigger.
        while ($consumed -lt $fileSize)
        {
            $out = New-Object Byte[] $MB
            (New-Object Random).NextBytes($out)
            $w.Write($out)
            $consumed += $MB
            $out.clear()
        }
        Write-Host "Write Complete.  Closing streams"
        $w.Close()
        $fstream.Close()
        $freeSpace -= $fileSize
        Write-Host "Remaining to Consume:  "$freeSpace
    }
}
Tags: 
powershell windows disk space
Powered by Backdrop CMS