Un Fusion Drive externe en APFS, avec un dock Thunderbolt 3

Il y a quelques jours, je testais le Seagate FireCuda Gaming Dock, qui combine un disque dur externe et un SSD en Thunderbolt, avec la même connexion. Et je me suis posé une question : et si je faisais un Fusion Drive ?

Le Fusion Drive, pour rappel, est une technologie Apple utilisée dans les iMac et les Mac mini, qui permet de combiner un SSD et un HDD. le SSD stocke l’OS et les données souvent utilisées, le reste est déplacé automatiquement sur le HDD. Pour l’utilisateur, c’est normalement transparent, il ne voit qu’un seul volume et le système s’occupe en arrière-plan des transferts. C’est plus efficace que les équivalents Windows, essentiellement parce que l’OS peut être placé directement dessus et que la gestion dépend directement de macOS et pas d’un pilote ou d’un logiciel ajouté.

Faire un Fusion Drive externe est souvent une mauvaise idée parce que les boîtiers qui offrent deux volumes (un SSD et un HDD) sont rares. Et le Fusion Drive, comme le RAID 0, n’apprécie pas qu’un des deux périphériques soit absent. S’il est donc possible de le faire en USB avec deux boîtiers externes, c’est dangereux. Avec le FireCuda Gaming Dock, et si vous le branchez en Thunderbolt 3, vous aurez le SSD et le HDD sur la même connexion, avec en bonus un SSD rapide.

En HFS

Il existe deux méthodes pour faire un Fusion Drive. La première, l’originale, passe par un partitionnement en GPT et Core Storage. Il faut sortir le Terminal, et c’est documenté chez Apple.

Première chose, un petit diskutil list qui va liste les périphériques. Il faut noter les valeurs /dev/diskxx du SSD et du HDD. Je vous conseille de vérifier deux fois. Pendant la rédaction de ce post, j’ai effacé un disque dur de sauvegarde.

La commande va créer un volume Core Storage avec le SSD et le HDD.

diskutil cs create FusionDrive /dev/disk11 /dev/disk12

Maintenant, il faut utiliser la commande diskutil cs list et noter la valeur Logical Volume Group (ici 61B206D1-5393-4644-B797-D8260F166959).

Puis il faut créer un volume, en remplaçant logicalvolumegroup par la valeur trouvée juste avant.

diskutil cs createVolume logicalvolumegroup jhfs+ FusionDrive 100%

Et voilà, vous avez obtenu un Fusion Drive externe. Dans mon cas, il faut 4,25 To : le disque dur de 4 To et le SSD NVMe de 256 Go.

En APFS

Depuis Mojave, il est possible de créer un volume Fusion Drive en APFS, le récent système de fichiers d’Apple. Ce n’est pas forcément une bonne idée, APFS est très lent avec les HDD, mais c’est possible et j’ai utilisé ce tutorial.

Il faut commencer de la même façon, avec un diskutil list, et bien noter les identifiants.

Ensuite, la commande suivante va permettre de créer le Fusion Drive. Il faut bien indiquer le périphérique principal (le SSD) et le secondaire (le disque dur). Si vous voulez faire un Fusion Drive de SSD, placez le plus rapide en premier.

diskutil apfs createContainer -main /dev/disk10 -secondary /dev/disk11

Refaites un diskutil list, et cherchez la valeur liée au volume synthesized.

Avec cette valeur, il faut taper cette commande.

diskutil apfs addVolume /dev/disk13 APFS "Fusion Drive"

Et voilà, le volume Fusion Drive est monté.

Ça donne quoi ?

Dans les deux cas, le système va s’arranger pour écrire d’abord sur le SSD, puis sur le HDD. C’est un peu compliqué de montrer des benchmark, vu que l’OS fait sa popote interne : si vous faites un test d’écriture, il va d’abord mettre 4 Go en cache sur le SSD puis généralement passer sur le HDD, mais ensuite les données seront déplacée sur le SSD. Fusion Drive est vraiment pensé pour être utilisé pour l’OS, qui sera forcément sur le SSD, alors que le reste des données de l’utilisateur passeront du SSD au HDD (ou le contraire) en fonction de votre usage. L’intérêt avec le Gaming Dock est surtout de proposer un espace combiné qui sera rapide dans les usages du quotidien. Pour une sauvegarde Time Machine, ça peut notamment accélérer un peu les transferts au départ, et le système déplacera ensuite les données vers le HDD.