J'ai un script .bat, qui démarre à la mise sous tension d'un serveur de sauvegarde dédié, enregistre l'environnement de production à l'aide de Robocopy et arrête le serveur à la fin.
Il effectue certaines vérifications avant de sauvegarder et demande les mesures appropriées lorsque quelque chose ne va pas, par exemple lorsque le cas JBOD cible n'a pas été détecté suite à sa mise hors tension.
Il y a une autre mise en garde, cependant, que je n'ai pas été capable de gérer jusqu'à présent.
Comment puis-je tester dans le fichier .bat, si j'ai suffisamment d'espace sur les disques cibles pour recevoir tous les fichiers ou non? (Il est correct de tester une taille d'espace fixe, modifiée périodiquement; elle approche actuellement les 100 Go.)
Est-ce même possible? Si oui, quelle commande dois-je rechercher?
Je suggère d'utiliser un script PowerShell pour cela.
wmic
renvoie la taille en octets, batch est limité aux comparaisons de nombres d'entiers 32 bits signés, nettement inférieures à 100 Go. Vous devez d'abord tronquer le nombre.
PowerShell
if ((Get-WMIObject Win32_Logicaldisk -filter "deviceid='C:'").FreeSpace -gt 100GB){
"yes enough free space"
} else {
"not enough free space"
}
Je dois étendre les informations ci-dessus sur la comparaison de numéros en lot.
Si les nombres sont contenus dans des chaînes de longueur égale, ils peuvent être comparés valablement en tant que chaînes.
Une comparaison de chaînes a lieu caractère par caractère, un espace/zéro au début est inférieur à 1.
À l'heure actuelle, la taille la plus grande des disques durs est de 10 To = 10995116277760 octets, avec 14 décimales. Le lot suivant utilise 15 emplacements pour tous les nombres.
@Echo off
Rem 543210987654321
Set "Blank= "
Set "GB100= 107374182400"
Set "TB_10= 10995116277760"
for /f "tokens=2" %%A in (
'wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "C:"'
) Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%"
Echo 100 GB="%GB100%"
If "%FreeSpace%" gtr "%GB100%" (
Echo yes enough free space
) else (
Echo not enough free space
)
Exemple de sortie:
> Check-FreeSpace.cmd
FreeSpace=" 101606346752"
100 GB=" 107374182400"
not enough free space
> Check-FreeSpace.cmd
FreeSpace=" 1181504520192"
100 GB=" 107374182400"
yes enough free space
La manière la plus simple est de regarder la dernière ligne de la sortie dir
dir /-c /w C: | find "bytes free"
Cependant ce n'est pas fiable. Notez également que, parfois, vous avez beaucoup d’espace libre, mais que vous ne pouvez plus écrire de fichiers, car vous avez atteint certaines limites, telles que la taille maximale ou le nombre maximal de fichiers dans un volume/répertoire ...
La manière la plus correcte est
wmic LogicalDisk where DeviceID='C:' Get FreeSpace /value