J'ai lu sur la page Wikipedia de HFS Plus que la taille de secteur par défaut sur un Mac est de 512 b. Cependant, j'ai aussi lu que les Macs supportent les secteurs de 4kb. Comment puis-je déterminer ce que j'ai, 512 b ou 4 kb secteurs ? Je pense que 512 est la bonne réponse, mais j'aimerais en être sûr.
Réponses
Trop de publicités?Tout d'abord, notez que la taille de bloc du périphérique est différente de la taille de bloc utilisée par le système de fichiers. La première valeur, telle que rapportée par diskutil, fait référence à la taille de bloc brute utilisée par le matériel. Je n'ai pas trouvé de moyen facile de vérifier cette dernière valeur par la ligne de commande, mais vous pouvez simplement créer un fichier de zéro octet puis faire Get Info depuis le Finder. Il dira 0 octet, mais 4k utilisés sur le disque.
Deuxièmement, vous pouvez créer un système de fichiers HFS+ avec des tailles de bloc supérieures à 4k en utilisant le programme en ligne de commande newfs_hfs
. Le plus simple est d'utiliser l'Utilitaire de disque pour partitionner le disque et créer une partition avec le formatage par défaut, puis d'utiliser l'application /bin/df
pour déterminer le dispositif de blocage (à titre d'exemple uniquement) : /dev/disk0s2
). Ensuite, démontez cette partition (en utilisant umount /dev/diskXXX
ou Disk Utility), et de reformater comme HFS+ avec des blocs de 64k font :
newfs_hfs -v VolumeName -b 65536 /dev/disk0s2
Utilisez l'astuce Get Info ci-dessus pour vérifier qu'un petit fichier occupe maintenant 64k sur le disque (il peut indiquer 65k pour les puissances de 10).
Les performances sont la principale raison pour laquelle vous souhaitez procéder de la sorte, si la plupart des données à stocker sont des fichiers volumineux (tels que des MP3, des photos, des vidéos, des fichiers .zip, etc.), et cela permet également de limiter la fragmentation du disque. ), et cela permet également de limiter la fragmentation du disque. Évidemment, ne vous embêtez pas si vous prévoyez de stocker principalement des petits fichiers.
J'ai constaté que sur les gros disques (> 1 To) formatés en HFS avec la taille de bloc par défaut de 4k, lorsque le disque approche de sa capacité, les performances d'écriture se dégradent terriblement. Je suppose que cela est dû au fait que la partition est fragmentée et qu'elle doit chasser et picorer les blocs libres afin d'écrire le dernier 1% des données. J'espère que des blocs de plus grande taille atténueront quelque peu ce problème.
La taille du bloc de périphériques OS X peut être déterminée en exécutant la commande suivante à l'invite d'une fenêtre Terminal :
diskutil info / | grep "Block Size"
Ce qui donnera les informations suivantes :
Device Block Size: 512 Bytes
La taille des blocs du système de fichiers peut être déterminée en utilisant la commande stat
utilitaire :
stat -f %k .
Ce qui vous montrera la taille optimale des blocs d'opérations E/S du système de fichiers en octets :
4096
Avec l'ancien système de fichiers HFS, la deuxième tentative d'Apple de créer un système de fichiers pour le Macintosh, il ne pouvait y avoir que 65 535 blocs d'allocation sur un disque. La taille des blocs était fonction de la taille du disque en octets divisée par le nombre maximal de blocs d'allocation, soit 65 535. Pour les petits disques, cela convenait, mais lorsque la taille des disques a commencé à approcher 1 Go, la taille minimale des blocs d'allocation était de 16 Ko (1073741824 / 65535) = 16384,25, mais il fallait tronquer à 16384.
Cela signifie qu'un fichier d'un octet sur un disque HFS de 1 Go nécessitait 16 384 octets pour être stocké sur le disque dur, et qu'il y avait donc trop d'espace perdu. Apple a donc créé l'enveloppe HFS+ pour réduire l'espace gaspillé.
Il existe peut-être un moyen d'augmenter la taille des blocs, mais pourquoi le faire ?
Voici un bash script rapide qui va lister toutes les sorties diskinfo pour tous vos disques actuellement connectés.
#!/bin/bash
for disk in /dev/disk*s*
do
diskutil info $disk
echo "**************************************************************************************"
echo " "
done