Questo post spiega come analizzare un problema che ci è capitato di recente.

Problema

Dopo aver esteso una LUN utilizzata in un Cluster, I valori riportati di Capacità e Spazio disponibile non sono aggiornati nelle proprietà del disco di Explorer.

Disk Management invece riporta la dimensione corretta.

Consideriamo per esempio questi  valori:

  • Capacità del disco originale = 800 Gb
  • Spazio disponibile originale = 20 Mb
  • Estensione del disco a 831 Gb con 31 Gb di spazio disponibile

L’estensione del disco deve essere fatta prima lato SAN in modo che la LUN abbia del freespace nella parte finale, successivamente si procedere ad estendere partizione e volume dalla console “Disk Management” tramite l’opzione “Extend Volume...”

Un altro modo per estendere partizione e volume è tramite diskpart come riportato nell’articolo “Extend a Basic Volume”

Se il volume si estende ma il file system rimane con le dimensioni precedenti, consiglio di eseguire

Analisi

Il tool Diskpart riporta la dimensione corretta della dimensione del disco e lo spazio disponibile.
Il tool fsutil riporta valori “contrastanti” ovvero:

fsutil volume diskfree <Drive_Letter>
Total # of free bytes        : 33064624128  <—  31 Gb di spazio libero
Total # of bytes             : 858993459200 <— 831 Gb di spazio totale
Total # of avail free bytes  : 20959232     <—  20 MB di spazio libero disponibile 

Il comando sopra riportato se lanciato su un qualsiasi volume che non presenta il problema, riporta I 2 valori uguali “Total # of free bytes” e “Total # of avail free bytes”.

Il tool utilizza la seguente funzione GetDiskFreeSpaceEx documentata in MSDN per ottenere i valori richiesti:

BOOL WINAPI GetDiskFreeSpaceEx(
  __in_opt   LPCTSTR lpDirectoryName,
  __out_opt  PULARGE_INTEGER lpFreeBytesAvailable,
  __out_opt  PULARGE_INTEGER lpTotalNumberOfBytes,
  __out_opt  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

La documentazione suggerisce un possibile motivo per cui il valore “lpTotalNumberOfFreeBytes” è inferiore al “lpFreeBytesAvailable”

lpTotalNumberOfBytes [out, optional]
A pointer to a variable that receives the total number of bytes on a disk that are available to the user who is associated with the calling thread.
This parameter can be NULL.
If per-user quotas are being used, this value may be less than the total number of bytes on a disk.
To determine the total number of bytes on a disk or volume, use IOCTL_DISK_GET_LENGTH_INFO.

Risoluzione

Verificando le impostazioni del quota manager in effetti c’era un quota attiva nella cartella utilizza per montare il disco che limitava la dimensione massima a 800 Gb.
Disabilitando la policy, la dimensione del volume veniva riportata correttamente 830 Gb e lo spazio disponibile 33 Gb.

Gli strumenti quali diskpart e fsutil leggono le dimensioni direttamente nel disco e quindi non verificano le quote impostate che invece sono gestite a livello di Explorer.

Daniele Maso
Senior Support Engineer
Microsoft Enterprise Platform Support