Un ami a un problème avec son disque dur d'1 To (perte de fichiers, cliquetis). Je décide de copier le contenu de son disque sur le mien. Le sien est formaté en NTFS. Le mien est formaté en EXT4. Mon disque est vide. Pourtant : espace insuffisant pour réaliser la copie.
Je cherche, je cherche. 1To = 932Gio. Jusque là : normal. Mais EXT4 prend 50 Go (46 Gio) de plus ! Je trouve très vite une réponse sur le web : par défaut, les FS ext réservent 5% de l'espace pour root. Seul root (donc ce qui tourne avec ses permissions) peut utiliser cet espace. Utile sur un serveur dont on remplit tout l'espace : les démons peuvent encore fonctionner. C'est du vécu mais je ne savais pas que mon salut venait de ces 5%. Mais sur un disque destiné à recevoir uniquement des données, ça ne juste sert à rien. Pour supprimer cet espace, il suffit d'utiliser l'option -m0 de mkfs lors du formatage ou de tune2fs après coup.
Pourtant, l'espace libre pour réaliser la copie est toujours insuffisant ... En effet, il manque encore 14 Gio ... Je cherche, je cherche ... Je finis par trouver une explication :
http://geoff.com.au/content/format-drive-ext4 . Un fichier = un inode. On a donc une table des inodes. Jusque là, c'est du basique enseigné dans les modules de systèmes d'exploitation des formations en informatique. Plus d'inodes = plus de fichiers = une table plus grande = moins d'espace libre. Moins d'inodes = moins de fichiers = une table plus petite = plus d'espace libre.
Plusieurs ratios sont prévus dans /etc/mke2fs.conf : small, huge, largefile, largefile4, ... Le ratio par défaut est 16384, donc la moitié de ce que permet l'option big. La seule option qui permet d'avoir autant d'espace libre qu'avec NTFS est largefile4. Il faut donc préciser -T largefile4 à mkfs.ext4.
La commande finale est donc : mkfs.ext4 -L nom -m0 -T largefile4 /dev/sdb1