web-dev-qa-db-fra.com

Déplacement d'un fichier entre deux lecteurs sur un SSD - sera-t-il copié?

Lorsque vous déplacez un fichier dans un lecteur, le fichier n'est ni copié ni supprimé. Le tableau qui fait référence aux fichiers vient d'être mis à jour. Et pour autant que je sache, ce n'est pas le cas sur 2 lecteurs sur un disque dur. Mais les SSD sont différents, il n'y a pas d'espace physique dédié à chaque lecteur. ( source )

Ma question est donc la suivante: que se passe-t-il lorsqu'un fichier est déplacé d'un lecteur à un autre sur le même disque SSD, les octets sont-ils copiés et l'original est-il supprimé ou une table est-elle mise à jour, réduisant ainsi le disque SSD?

Il y a déjà une question en double ici . Mais les deux réponses prétendent:

chaque partition aura sa propre zone physique du lecteur sur elle-même

et

Le partitionnement d'un disque dur désigne en réalité des régions physiques pour chaque partition. [et dans un commentaire:] SSD est toujours un disque dur, il n'a tout simplement pas de disque.

Autant que je sache, c'est faux. Voir ici .

Alors, quelqu'un qui en sait plus sur les disques SSD peut-il me dire s'il est correct dans son évaluation malgré son erreur?

18
ispiro

Autant que je sache, c'est faux

La description citée est à moitié correcte, à moitié incorrecte. Mais c'est aussi à moitié faux pour les disques durs.

Le partitionnement d'un lecteur désigne les régions logical pour chaque partition. Le système d'exploitation ne se soucie pas du tout des emplacements physiques - il demande simplement au lecteur de "lire bloc logique # 31415926" et le lecteur décide lui-même de l'emplacement des données. Cela fonctionne de la même manière pour les mémoires magnétiques et flash.

C'est en fait le même comme avec les disques durs des 20-25 dernières années: bien que les premiers systèmes d'exploitation utilisaient des emplacements physiques de cylindre/tête/secteur, ils sont révolus depuis longtemps. Vous ne savez pas précisément sur quel plateau se trouve le LBA # 1234. Les lecteurs de disque dur remappent automatiquement les secteurs physiques défectueux automatiquement, de sorte que le même LBA puisse être lu soudainement depuis une zone physique complètement différente, comme avec les disques SSD.

Ainsi, avec les disques durs et les disques SSD, le système d'exploitation ne dispose que d'une plage de LBA (par exemple, 0 à 9999999) pour la lecture et l'écriture de données. Le but du partitionnement est d’allouer des sous-plages - par ex. la partition A obtient 10–499999, la partition B 500000–999999. Chaque partition a un système de fichiers indépendant et les systèmes de fichiers à l'intérieur de chaque partition ne peuvent pas référencer de données en dehors de celle-ci - ils ne peuvent pas dépasser les limites de la partition. (Par exemple, la partition A ne peut pas avoir un fichier dont les données sont conservées dans le secteur # 600000.)

En conséquence, tous les fichiers passant de l'un à l'autre doivent être copiés intégralement.

(Cela dit, en théorie, le système d'exploitation peut peut-être demander le disque lui-même de dupliquer des données d'une zone à une autre (par exemple, "copier LBA # 1234 à # 567890"), sans avoir à les copier dans la mémoire principale. et ensuite, et bien sûr, cela contournerait complètement les limites de partition. Cela pourrait utiliser la "couche de traduction flash" du SSD, par exemple. Mais en pratique, pour autant que je sache, cela n'est pas fait.)

38
grawity

Ce qui se passe lorsque les données sont écrites sur un disque SSD est digne de plusieurs articles (bon résumé ici ), car cela est très compliqué et dépend de la technologie sous-jacente. En résumé, les disques SSD en général ne peuvent écrire aucun bit en mémoire. Au lieu de cela, ils doivent mettre à zéro (effacer) toute une partie de la mémoire, puis ils peuvent stocker des données après en écrivant simplement celles-ci. En général, ces jours-ci, ils écrivent blocs sur 512 octets, mais effacent un page sur 8 blocs, ce qui correspond à 4096. Ceci, et le fait que chaque cycle d'écriture/effacement provoque une usure physique de la mémoire et la mémoire finit par s'user, ce qui rend les disques SSD très différents des disques durs magnétiques en rotation.

En mettant cela de côté, les lecteurs SATA (et les lecteurs AFAIK SAS) n'implémentent pas de commande native permettant de copier des données d'un secteur à un autre. (Ou du moins, rien dans les spécifications SATA ou SAS ne les oblige à le faire, le système d'exploitation ne peut donc pas compter sur une telle commande.) Ainsi, la copie d'un fichier sur une partition implique la lecture des données d'un secteur de lecteur. dans la mémoire de l’hôte, puis l’écrire sur le lecteur dans un secteur différent.

En effet, en ce qui concerne le système d’exploitation, un lecteur est un ensemble de secteurs logiques numérotés et il ne peut que lire à partir de secteurs et écrire dans des secteurs. Le système d'exploitation ne peut pas dire au lecteur de remapper des secteurs.

De plus, le système de fichiers (HFS +, NTFS, ext3, etc.) est un ensemble de structures de données qui impose un ordre à un ensemble de blocs logiques. Ces structures de données implémentent "fichiers", "noms de fichiers", "répertoires", "autorisations", etc. Ainsi, oui, lorsque vous déplacez un fichier d'un répertoire à un autre, il n'est pas copié; seules les données du système de fichiers indiquant le répertoire dans lequel se trouve le fichier sont mises à jour.

Le concept d'une partition est qu'il s'agit d'un ensemble de secteurs logiques sur le disque revendiqué par un système de fichiers unique. Le corollaire à cela est qu'un système de fichiers ne peut pas accéder à des secteurs en dehors de sa partition. Il s'agit en grande partie d'une fonctionnalité de sécurité, mais elle découle également du fait que les structures de données du système de fichiers sont toutes construites autour de la comptabilisation de chaque secteur du lecteur sous la propriété du système de fichiers. Il est donc non trivial d'ajouter ou de supprimer des secteurs. à ces structures. C'est pourquoi vous devez exécuter des routines spéciales pour ajuster la taille d'une partition et pourquoi les systèmes de fichiers insistent pour s'exécuter sur un ensemble contigu de secteurs.

Il est donc impraticable et dangereux d’implémenter une copie de fichier simplement en transférant des secteurs d’un système de fichiers à un autre. Sur un lecteur magnétique en rotation, ce serait également un cauchemar de performance, car bien que le lecteur fasse exception à la règle pour les secteurs défectueux, il permet généralement que les secteurs soient physiquement situés de manière à optimiser la vitesse de lecture et d’écriture des numéros consécutifs. secteurs.

De plus, 2 systèmes de fichiers peuvent ne pas stocker les données de fichiers de la même manière sur le disque, ce qui signifie que l’échange de secteurs ne fonctionnerait pas, même s’il était pratique. Même s'il s'agit exactement du même type de système de fichiers, par exemple NTFS, l'un peut utiliser le chiffrement ou la compression et l'autre pas, ou les deux peuvent chiffrer les données, mais avec des clés différentes. Il n’est pas nécessaire que les données du fichier correspondent exactement à ce qui est stocké sur le disque. Il suffit de stocker une transformation réversible des données pour que le système de fichiers puisse obtenir les données du fichier en faisant quelque chose avec les données sur le disque. Par conséquent, à moins que les deux systèmes de fichiers utilisent exactement la même transformation, le simple fait de permuter des secteurs ne permettrait pas de transférer les données du fichier.

Pour toutes ces raisons, il est tout simplement trop de travail pour un gain insuffisant pour les rédacteurs de SE et les rédacteurs de système de fichiers d'implémenter une fonctionnalité qui optimise les déplacements d'une partition à l'autre pour les disques SSD. Ainsi, tout déplacement entre partitions sera une lecture et une écriture.

À l'intérieur du SSD, c'est une histoire légèrement différente. Bien que le système d'exploitation n'ait pas indiqué au lecteur qu'il copiait les données d'un endroit à un autre, les écritures sur les SSD sont si coûteuses (et compliquées) que les contrôleurs SSD travaillent beaucoup pour minimiser les écritures. Certains disques SSD vont jusqu’à essayer de détecter quand un secteur en cours d’écriture correspond à un secteur déjà stocké et de marquer cette mémoire physique comme étant maintenant mappée sur 2 secteurs logiques différents plutôt que de la copier, en faisant au niveau du lecteur interne OS ne pouvait pas.

Mais ne comptez pas dessus.

9
Old Pro