31 votos

Configuración de alertas de espacio en disco bajo en Windows Server 2008

Me preguntaba si hay una forma fácil de activar una alerta de correo electrónico en Windows Server 2008 cuando alguna partición del disco lógico se queda sin espacio. Tengo dos servidores SQL que están a punto de quedarse sin espacio en el disco debido a los archivos de registro de la base de datos.

Gracias, Ryan

1 votos

Si no necesitas mantener los registros completos durante un periodo de tiempo significativo, pon las bases de datos con los registros más grandes en el modo de copia de seguridad "Simple" y haz que tu plan de mantenimiento los trunque inmediatamente después de hacer una copia de seguridad completa. Esto no responde a tu pregunta, por supuesto, pero puede ayudar a evitar que el disco se llene en primer lugar si tu situación lo permite.

0 votos

Gracias por la información. He implementado un trabajo de copia de seguridad adicional para ayudar a truncar los archivos de registro de SQL y evitar que crezcan más. Pero me gustaría poner algún tipo de alerta por si acaso. Gracias.

0 votos

Utilizamos Spiceworks para que nos avise de que hay poco espacio en disco en todos los clientes y servidores.

39voto

Mark Pettibone Puntos 196

Parece que se trata de una función de seguridad, así que no sé si se puede eludir:

El controlador cifra cada bloque que escribe utilizando el estándar de cifrado avanzado (AES) con una clave de sesión generada aleatoriamente por-boot para garantizar la privacidad de los datos en la caché si el dispositivo se retira del sistema.

http://technet.microsoft.com/en-us/magazine/2007.03.vistakernel.aspx

Desgraciadamente, no se me ocurre ninguna forma de acelerar el proceso de reconstrucción o de evitarlo (aparte de aumentar la cantidad de RAM, lo que haría innecesario ReadyBoost).

Actualización: A continuación resumo los comentarios.
SuperFetch, ReadyDrive y ReadyBoost son tecnologías que funcionan conjuntamente.

SuperFetch monitorea qué archivos están siendo usados por el usuario y el sistema y aprende lo que se usa mucho e intenta predecir que puede ser requerido en el futuro. De esta forma, se puede precargar antes de que se solicite.

ReadyDrive intenta predecir qué páginas de memoria necesita Windows para entrar en hibernación, de modo que cuando Windows se despierte, se reanude desde la hibernación más rápidamente. Los datos que Windows necesitará pueden almacenarse en una unidad interna ReadyBoost no extraíble instalada por el OEM. ReadyDrive necesita estas unidades internas porque Windows puede confiar en que no le ha pasado nada durante una sesión de hibernación. Durante un apagado, ni siquiera se confía en estas unidades.

ReadyBoost almacena en caché las lecturas del disco duro a nivel de sector. No le importan los sistemas de archivos porque sólo sabe en qué parte del disco estaban los datos. SuperFetch puede determinar que un archivo se utiliza con frecuencia, por lo que almacenará esos datos en una caché ReadyBoost. Hay una caché ReadyBoost en el disco duro que asumo que está ahí (en lugar de leerlo del disco en otro lugar) es porque los discos duros tienen un buen rendimiento de lectura secuencial (lo que significa leer sector tras sector tras sector, en lugar de tener que cambiar de pista y lidiar con los tiempos de búsqueda y la latencia rotacional). El objetivo de utilizar un dispositivo flash ReadyBoost es superar el rendimiento del disco. De este modo, los sectores del disco duro almacenados en caché mediante ReadyBoost pueden recuperarse más rápidamente, aumentando el rendimiento del ordenador. En el caso de las unidades ReadyBoost extraíbles, no se puede confiar en el contenido de la unidad a través de un evento de espera, hibernación o apagado, ya que el contenido de la caché del disco duro o de ReadyBoost podría haber cambiado desde que Windows hizo esa caché. Para evitar que se utilicen datos erróneos, Windows volcará la antigua caché de ReadyBoost e iniciará una nueva caché. Durante este tiempo, el rendimiento será menor porque la caché no se ha calentado con los datos del sector actual.

Fuente: Aquí es un buen vídeo que habla de estas tecnologías y de cómo se interrelacionan. Algunas partes interesantes se encuentran a unos 16m30s-19m y 34m45s-38m40s, sin embargo, puede valer la pena ver el vídeo completo.

6 votos

¿Sólo se activa para la unidad del sistema (normalmente la unidad C)? Qué pasa si tengo 2-3 unidades y quiero configurar la alerta en cada una de ellas.

0 votos

El evento 2013 se registra para cualquier partición que caiga por debajo del umbral definido - tenga en cuenta que sólo se registra una vez por partición, a menos que el espacio en disco aumente de nuevo por encima del umbral o el servidor se reinicie. soporte.microsoft.com/kb/112509

3 votos

En las versiones más recientes de Windows Server, la acción "Enviar un correo electrónico" está obsoleta. En su lugar, puede utilizar la acción "Iniciar un programa", rellenar powershell para el programa y lo siguiente para los argumentos: -command &{send-mailmessage -from server@domain.org -to notify@domain.com -subject 'Alert from Task Scheduler' -body 'This is an automated message from a task scheduled on the server. Testing powershell email.' -smtpserver x.x.x.x}

1voto

Morph Puntos 1183

No sé si Leopard lo tenía cuando yo lo ejecutaba. Simplemente no uso more ; less es mucho más potente. Ambos man more y man less abrir la misma página de manual, que es la de less . Si miras los tamaños de los archivos /usr/bin/more y /usr/bin/less son idénticos. Los dos binarios son idénticos también.

1 votos

Este script no funciona. Recibo el mensaje de error de que no se ha establecido ningún parámetro de posición.

1voto

Ari Puntos 156

He añadido la monitorización del espacio en disco vía snmp a mi instancia (separada) de nagios.

0 votos

También tenemos monitorización de discos como parte de nuestro paquete de monitorización general, aunque utilizamos IPMonitor que comprueba los discos cada pocos minutos.

0 votos

Ahora mismo estoy buscando un sistema de monitorización independiente (como IPMonitor), pero me gustaría poner algo en los servidores para que me alerte mientras tanto. Gracias.

1voto

Frank Heimes Puntos 11

Ambos ejemplos no funcionan porque la sintaxis de PowerShell es incorrecta. El siguiente código enumera los tamaños de volumen del host actual (utilizando PowerShell 5.0):

Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }

El siguiente código enumera los tamaños de los volúmenes de los hosts listados en servidor.txt :

Get-Content server.txt | %{ Get-WMIObject –computername $_ Win32_LogicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB } }

Sidenote

Tenga en cuenta que el marcador de posición exterior $_ enumera las direcciones de los servidores, mientras que el marcador de posición interno $_ enumera los dispositivos. Este es un problema frecuente para los novatos en PowerShell. Si quieres usar la dirección del servidor en el bucle interno, tendrías que asignarla a una nueva variable en el bucle externo.

El software del foro utilizado aquí es defectuoso. En las vistas previas de los mensajes, muestra $_ correctamente como $_ incluso si no se escapa como código. Pero el último post elimina el guión bajo, con lo que los ejemplos de PowerShell son incorrectos.

0voto

Bal Puntos 592

Puedes utilizar este script para enviar un correo electrónico utilizando tu servidor de correo electrónico. Sólo tienes que sustituir el nombre del servidor smtp por el de tu servidor. Si está en la misma máquina entonces use "localhost" (el servidor smtp debe ser funcional). El script se encuentra aquí también: https://gallery.technet.microsoft.com/scriptcenter/Disk-Space-Report-Reports-98e64d65

Después de que el script se guarde en la unidad local, puede ser fácilmente ejecutado usando powershell y probado. Una vez que script parece funcionar bien, entonces se puede programar para que se ejecute todos los días o cada hora en función de los requisitos utilizando el programador de tareas de Windows. Este artículo explica cómo ejecutar un script utilizando el programador de tareas. https://www.metalogix.com/help/Content%20Matrix%20Console/SharePoint%20Edition/002_HowTo/004_SharePointActions/012_SchedulingPowerShell.htm

############################################################################# 
#                                                                                                                                                     # 
#  Check disk space and send an HTML report as the body of an email.                                                   # 
#  Reports only disks on computers that have low disk space.                                                                 # 
#  Author: Mike Carmody                                                                                                                   # 
#  Some ideas extracted from Thiyagu's Exchange DiskspaceHTMLReport module.                                  # 
#  Date: 8/10/2011                                                          # 
#  I have not added any error checking into this script yet.                # 
#                                                                           # 
#                                                                           # 
############################################################################# 
# Continue even if there are errors 
$ErrorActionPreference = "Continue"; 

######################################################################################### 
# Items to change to make it work for you. 
# 
# EMAIL PROPERTIES 
#  - the $users that this report will be sent to. 
#  - near the end of the script the smtpserver, From and Subject. 

# REPORT PROPERTIES 
#  - you can edit the report path and report name of the html file that is the report.  
######################################################################################### 

# Set your warning and critical thresholds 
$percentWarning = 15; 
$percentCritcal = 10; 

# EMAIL PROPERTIES 
 # Set the recipients of the report. 
  $users = "YourDistrolist@company.com" 
    #$users = "You@company.com" # I use this for testing by uing my email address. 
  #$users = "you@company.com", "manager@company.com", "etc@company.com";  # can be sent to individuals. 

# REPORT PROPERTIES 
 # Path to the report 
  $reportPath = "D:\Jobs\DiskSpaceQuery\Reports\"; 

 # Report name 
  $reportName = "DiskSpaceRpt_$(get-date -format ddMMyyyy).html"; 

# Path and Report name together 
$diskReport = $reportPath + $reportName 

#Set colors for table cell backgrounds 
$redColor = "#FF0000" 
$orangeColor = "#FBB917" 
$whiteColor = "#FFFFFF" 

# Count if any computers have low disk space.  Do not send report if less than 1. 
$i = 0; 

# Get computer list to check disk space 
$computers = Get-Content "servers_c.txt"; 
$datetime = Get-Date -Format "MM-dd-yyyy_HHmmss"; 

# Remove the report if it has already been run today so it does not append to the existing report 
If (Test-Path $diskReport) 
    { 
        Remove-Item $diskReport 
    } 

# Cleanup old files.. 
$Daysback = "-7" 
$CurrentDate = Get-Date; 
$DateToDelete = $CurrentDate.AddDays($Daysback); 
Get-ChildItem $reportPath | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item; 

# Create and write HTML Header of report 
$titleDate = get-date -uformat "%m-%d-%Y - %A" 
$header = " 
  <html> 
  <head> 
  <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'> 
  <title>DiskSpace Report</title> 
  <STYLE TYPE='text/css'> 
  <!-- 
  td { 
   font-family: Tahoma; 
   font-size: 11px; 
   border-top: 1px solid #999999; 
   border-right: 1px solid #999999; 
   border-bottom: 1px solid #999999; 
   border-left: 1px solid #999999; 
   padding-top: 0px; 
   padding-right: 0px; 
   padding-bottom: 0px; 
   padding-left: 0px; 
  } 
  body { 
   margin-left: 5px; 
   margin-top: 5px; 
   margin-right: 0px; 
   margin-bottom: 10px; 
   table { 
   border: thin solid #000000; 
  } 
  --> 
  </style> 
  </head> 
  <body> 
  <table width='100%'> 
  <tr bgcolor='#CCCCCC'> 
  <td colspan='7' height='25' align='center'> 
  <font face='tahoma' color='#003399' size='4'><strong>AEM Environment DiskSpace Report for $titledate</strong></font> 
  </td> 
  </tr> 
  </table> 
" 
 Add-Content $diskReport $header 

# Create and write Table header for report 
 $tableHeader = " 
 <table width='100%'><tbody> 
 <tr bgcolor=#CCCCCC> 
    <td width='10%' align='center'>Server</td> 
 <td width='5%' align='center'>Drive</td> 
 <td width='15%' align='center'>Drive Label</td> 
 <td width='10%' align='center'>Total Capacity(GB)</td> 
 <td width='10%' align='center'>Used Capacity(GB)</td> 
 <td width='10%' align='center'>Free Space(GB)</td> 
 <td width='5%' align='center'>Freespace %</td> 
 </tr> 
" 
Add-Content $diskReport $tableHeader 

# Start processing disk space reports against a list of servers 
  foreach($computer in $computers) 
 {  
 $disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3" 
 $computer = $computer.toupper() 
  foreach($disk in $disks) 
 {         
  $deviceID = $disk.DeviceID; 
        $volName = $disk.VolumeName; 
  [float]$size = $disk.Size; 
  [float]$freespace = $disk.FreeSpace;  
  $percentFree = [Math]::Round(($freespace / $size) * 100, 2); 
  $sizeGB = [Math]::Round($size / 1073741824, 2); 
  $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2); 
        $usedSpaceGB = $sizeGB - $freeSpaceGB; 
        $color = $whiteColor; 

# Set background color to Orange if just a warning 
 if($percentFree -lt $percentWarning)       
  { 
    $color = $orangeColor  

# Set background color to Orange if space is Critical 
      if($percentFree -lt $percentCritcal) 
        { 
        $color = $redColor 
       }         

 # Create table data rows  
    $dataRow = " 
  <tr> 
        <td width='10%'>$computer</td> 
  <td width='5%' align='center'>$deviceID</td> 
  <td width='15%' >$volName</td> 
  <td width='10%' align='center'>$sizeGB</td> 
  <td width='10%' align='center'>$usedSpaceGB</td> 
  <td width='10%' align='center'>$freeSpaceGB</td> 
  <td width='5%' bgcolor=`'$color`' align='center'>$percentFree</td> 
  </tr> 
" 
Add-Content $diskReport $dataRow; 
Write-Host -ForegroundColor DarkYellow "$computer $deviceID percentage free space = $percentFree"; 
    $i++   
  } 
 } 
} 

# Create table at end of report showing legend of colors for the critical and warning 
 $tableDescription = " 
 </table><br><table width='20%'> 
 <tr bgcolor='White'> 
    <td width='10%' align='center' bgcolor='#FBB917'>Warning less than 15% free space</td> 
 <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 10% free space</td> 
 </tr> 
" 
  Add-Content $diskReport $tableDescription 
 Add-Content $diskReport "</body></html>" 

# Send Notification if alert $i is greater then 0 
if ($i -gt 0) 
{ 
    foreach ($user in $users) 
{ 
        Write-Host "Sending Email notification to $user" 

  $smtpServer = "MySMTPServer" 
  $smtp = New-Object Net.Mail.SmtpClient($smtpServer) 
  $msg = New-Object Net.Mail.MailMessage 
  $msg.To.Add($user) 
        $msg.From = "myself@company.com" 
  $msg.Subject = "Environment DiskSpace Report for $titledate" 
        $msg.IsBodyHTML = $true 
        $msg.Body = get-content $diskReport 
  $smtp.Send($msg) 
        $body = "" 
    } 
  }

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X