Faut-il encore « retirer le périphérique en toute sécurité » ? — Réfléchir à partir du retrait rapide et du cache d'écriture
· Mis à jour le: · Go Komura · Windows, USB, Stockage, Investigation d'incidents
Vous avez copié vos fichiers sur une clé USB. L’écran a indiqué que la copie était terminée. Et pourtant, avant de la débrancher, on vous demande de passer encore une fois par « Retirer le périphérique en toute sécurité ».
C’était censé être fini — que reste-t-il donc à finir ?
Les données qu’une application a transmises à Windows peuvent encore attendre sur le PC d’être écrites. Suivons un seul fichier sur son chemin vers la clé USB.1
On suppose ici un stockage USB connecté à Windows 11. Le transfert de fichiers depuis un smartphone et les cas analogues sont hors sujet.
1. Avant que quoi que ce soit n’atteigne la clé USB, le PC le retient
Pour cette explication, découpons le fichier en trois morceaux : A, B et C. L’application les transmet à Windows dans l’ordre et demande qu’ils soient écrits sur la clé USB.
S’il fallait attendre chaque écriture sur la clé USB, l’application attendrait elle aussi. Windows peut donc répondre dès qu’il a pris les données dans la mémoire du PC, et les écrire sur la clé USB plus tard. L’objectif est de ne pas faire attendre l’application et de traiter ensemble les petites écritures. Cette zone de rétention temporaire est le cache d’écriture.12
Considérez l’instant où Windows a reçu A, B et C, mais n’a réussi à écrire que A et B sur la clé USB. C attend son tour sur le PC.
flowchart TB
accTitle: Pour un même fichier, ce que le PC a reçu et ce que la clé USB a enregistré diffèrent
accDescr: Montre l'instant où Windows a reçu A, B et C, où A et B sont enregistrés sur la clé USB, et où C attend encore d'être écrit dans le cache côté PC.
A["Windows a reçu A, B et C"]
A --> P["La mémoire du PC retient C, en attente d'écriture"]
A --> U["Enregistré sur la clé USB : A et B seulement"]
Figure 1 : L’application a tout transmis. Malgré cela, à cet instant, C n’est pas encore sur la clé USB.
Débranchez maintenant et C, resté sur le PC, n’atteindra jamais la clé USB. Une partie du fichier que vous emportez manque.
L’application a tout transmis. Mais la clé USB n’a pas encore tout. Dans une conception qui diffère les écritures, ces deux affirmations peuvent être vraies en même temps.
Le moment où apparaît le message de fin dépend de l’application et des paramètres. Cet exemple n’affirme pas qu’il reste toujours des écritures après que l’Explorateur de fichiers a signalé la fin.2
Dans le diagramme, un trait continu marque une relation qui vaut toujours et un trait pointillé une relation conditionnelle (les conditions figurent dans l’explication de chaque relation sur la page de détail). La liste complète des relations (6 au total, avec preuve et niveau de certitude) et les définitions des concepts principaux sont rassemblées sur la page de détail de la carte des connaissances (en japonais). Données : JSON-LD / Turtle
2. Terminez l’écriture de ce qui a été retenu avant de débrancher
Comment débrancher la clé USB sans laisser C derrière soi ?
« Retirer le périphérique en toute sécurité » est l’action qui indique à Windows : ce périphérique va sortir, termine donc les écritures restantes. Achever les opérations encore présentes dans le cache fait partie de ses tâches.3
Pour le fichier ci-dessus, cela signifie écrire C, qui était encore sur le PC, et attendre que la clé USB contienne elle aussi A, B et C.
flowchart TB
accTitle: Comment la même écriture en attente C se termine selon la manière de retirer le lecteur
accDescr: Si la connexion est coupée alors que C est encore sur le PC, la clé USB ne contient que A et B ; si C est écrit pendant que le lecteur est encore connecté, la clé USB contient A, B et C.
P["C est sur le PC, en attente d'écriture"]
P -->|"Débrancher avant d'écrire C"| L["La clé USB n'a que A et B"]
P -->|"Écrire C pendant que la connexion tient"| R["La clé USB a A, B et C"]
Figure 2 : Ce que vous voulez attendre avec « Retirer le périphérique en toute sécurité » n’est pas l’écoulement du temps mais l’achèvement des écritures restantes.
Attendre simplement un peu avant de débrancher ne vous dit rien sur ce qui reste. L’action de retrait demande à Windows d’exécuter le travail de clôture, et vous pouvez attendre la notification indiquant que le périphérique peut être retiré.4
Le paramètre « Meilleures performances » de Windows est la stratégie qui autorise ce cache. En échange du regroupement des écritures pour plus d’efficacité, vous devez exécuter « Retirer le périphérique en toute sécurité » avant de débrancher.3
3. « Retrait rapide », la stratégie qui ne diffère rien
Vous vous dites peut-être : si le reste doit de toute façon être écrit avant de débrancher, pourquoi laisser quoi que ce soit sur le PC au départ ?
C’est exactement ce qu’est « Retrait rapide ». Windows ne met pas en cache les écritures destinées au périphérique concerné, ce qui permet d’omettre l’étape de retrait. Autrement dit, il n’emploie pas l’approche consistant à laisser C sur le PC pour l’écrire plus tard.3
Le travail d’écriture sur la clé USB subsiste. Il y a moins de marge pour regrouper les écritures par souci d’efficacité, et les performances peuvent baisser, mais en échange le lecteur devient plus facile à retirer.3
flowchart TB
accTitle: Une stratégie qui diffère les écritures et une qui ne le fait pas
accDescr: Avec Meilleures performances, le PC peut retenir des écritures en attente mais leur achèvement doit être confirmé au moment du retrait, tandis qu'avec Retrait rapide Windows ne diffère pas les écritures de cette manière.
H["Meilleures performances"] --> HC["Le PC peut retenir des écritures"]
HC --> HE["Écrire le reste avant de débrancher"]
Q["Retrait rapide"] --> QC["Les écritures ne sont pas différées"]
QC --> QE["L'étape de retrait après votre travail peut être omise"]
Figure 3 : Le travail d’écriture sur la clé USB ne disparaît pas ; ce qui change, c’est s’il est différé.
Depuis Windows 10 version 1809, « Retrait rapide » est la valeur par défaut. C’est le fondement des affirmations selon lesquelles on peut désormais simplement retirer la clé. Le paramètre peut toutefois être modifié périphérique par périphérique.3
En bref : terminez-vous le travail différé avant de débrancher, ou ne le différez-vous jamais ? Les deux affirmations — le retrait sécurisé est nécessaire, il est inutile — découlent toutes deux de cette différence de paramètre.
Même avec « Retrait rapide », cela ne signifie pas que vous pouvez interrompre une copie ou un enregistrement en cours. Attendez la fin de l’opération et enregistrez d’abord les modifications non sauvegardées.5
4. Sur quel paramètre est réglée votre propre clé USB ?
Dans l’Explorateur de fichiers, repérez le nom et la lettre du lecteur USB concerné.
Faites un clic droit sur le bouton Démarrer, ouvrez Gestion des disques et faites un clic droit sur l’étiquette du périphérique correspondant dans la liste inférieure. « Propriétés > Stratégies » indique laquelle des deux options est sélectionnée.3
Si « Stratégies » n’apparaît pas, il existe aussi une disposition où vous sélectionnez le lecteur dans l’onglet « Matériel » et ouvrez les propriétés depuis là. Si vous ne faites que consulter, ne modifiez pas le paramètre. Si vous ne pouvez pas effectuer ces étapes sur un PC d’entreprise, adressez-vous à votre administrateur.3
Si vous ignorez le paramètre, utiliser « Retirer le périphérique en toute sécurité » est la pratique la plus simple à suivre. Terminez vos enregistrements et vos copies, puis fermez les applications qui utilisent la clé USB. Choisissez le périphérique sous « Retirer le périphérique en toute sécurité et éjecter le média » dans la zone de notification, et débranchez-le une fois que la notification indique que le périphérique peut être retiré. Si l’icône est masquée, ouvrez la liste des icônes masquées.4
Lorsque plusieurs périphériques sont connectés, vérifiez que le nom sélectionné correspond bien à la clé USB que vous débranchez.
5. Pourquoi indique-t-il que le périphérique est utilisé alors que la copie est terminée ?
A, B et C du fichier ont tous été écrits sur la clé USB. Mais si l’application avec laquelle vous avez vérifié le contenu garde encore le fichier ouvert, l’action suivante pourrait le relire ou le réécrire.
Le processus de retrait vérifie aussi si ce type d’utilisation peut prendre fin. Lorsqu’un handle — la référence qu’une application utilise pour travailler sur un fichier — est encore ouvert, le retrait peut être refusé alors même que les lectures et les écritures ont cessé.67
flowchart TB
accTitle: Une application en cours d'utilisation reste attachée à des fichiers déjà écrits
accDescr: Même lorsque A, B et C sont tous enregistrés sur la clé USB, une application qui garde un handle sur les fichiers peut bloquer le retrait du périphérique.
A["Application qui garde encore le fichier ouvert"]
A -->|"Garde un handle"| U["Fichiers sur la clé USB : A, B et C"]
A -.-> N["La référence subsiste même quand lectures et écritures cessent"]
Figure 4 : C’est le cas où la raison pour laquelle vous ne pouvez pas retirer le périphérique n’est pas une donnée manquante mais le fait que le périphérique est encore utilisé.
Dans ce cas, ne vous contentez pas d’attendre : enregistrez ce qui doit l’être et fermez l’application. Fermez aussi toute fenêtre de l’Explorateur de fichiers affichant la clé USB, puis réessayez le retrait.
Si rien ne vous vient à l’esprit, recherchez dans Process Explorer le nom du fichier ou du dossier sur la clé USB et découvrez quel processus le garde ouvert. Évitez de fermer de force un handle ainsi trouvé, car cela peut déstabiliser l’application ou le système. Fermez l’application par sa procédure normale, et pour une application métier ou un service, voyez avec la personne responsable.87
Ce n’est qu’un exemple de cause. Pour les méthodes d’investigation détaillées, voir Comment utiliser Process Explorer et Handle.
6. Une note pour les développeurs d’applications : ce que signifie « Enregistrement terminé »
Décidez délibérément si votre application annonce « Enregistrement terminé » dès que les données ont été transmises à Windows, ou seulement après avoir vérifié le résultat des écritures dont elle a besoin.
L’API Win32 FlushFileBuffers écrit les données mises en tampon pour le fichier spécifié. Un appel sur un handle de fichier ordinaire n’enregistre pas le document non sauvegardé d’une autre application et ne met pas fin à l’utilisation de toute la clé USB.2
Avant et après le cache de Windows, il y a aussi les données non enregistrées à l’intérieur de l’application et le cache interne du périphérique. « Retrait rapide » n’est pas un paramètre qui élimine tout cela.9
flowchart TB
accTitle: Chaque endroit qui retient des données a un propriétaire différent
accDescr: Montre les données non enregistrées dans l'application, le cache de fichiers côté Windows et le cache côté périphérique, dans l'ordre où les données les traversent.
A["Dans l'application : modifications non enregistrées"] -->|"Opération d'enregistrement"| W["Côté Windows : le cache de fichiers"]
W -->|"Écriture sur le périphérique"| D["Côté périphérique : cache interne et support"]
Figure 5 : Le fait que des données subsistent dans chaque couche dépend des paramètres et de l’implémentation. Ne prenez pas le paramètre d’une couche pour la vérification d’achèvement d’une autre.
Une application qui traite les notifications de retrait a aussi besoin d’un nettoyage, comme la fermeture de ses handles de périphérique.10 Le choix entre les API est traité dans l’article sur le Cache Manager et WriteFile.
Résumé
Ce que vous pouvez emporter sur une clé USB, ce sont les données dont l’écriture y est achevée. Si vous ignorez le paramètre, terminez votre travail et utilisez « Retirer le périphérique en toute sécurité ». Pour les fichiers importants, conservez une copie ailleurs que sur la clé USB.
Articles liés
- Le Cache Manager de Windows : quand votre WriteFile atteint-il le disque ?
- Comment gérer les périphériques USB dans une application Windows
- Investiguer avec Process Explorer, Handle et VMMap
Liens de référence
-
Microsoft Learn, File Caching. Le cache de fichiers en mémoire, l’écriture différée et le rôle du vidage. ↩ ↩2
-
Microsoft Learn, FlushFileBuffers function. Les écritures ordinaires par rapport au vidage des données mises en tampon. Vider un fichier et retirer un périphérique sont deux choses différentes. ↩ ↩2 ↩3
-
Microsoft Learn, Manage default media removal policy. La différence entre « Retrait rapide » et « Meilleures performances », la modification de la valeur par défaut et la vérification du paramètre par périphérique. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Microsoft Support, Safely remove hardware in Windows. L’action de retrait depuis la zone de notification et la notification indiquant que le périphérique peut être retiré. ↩ ↩2
-
Microsoft Learn, Handling an IRP_MN_SURPRISE_REMOVAL Request. Les échecs d’E/S et le nettoyage qui suivent une déconnexion inattendue du périphérique. ↩
-
Microsoft Learn, Handling an IRP_MN_QUERY_REMOVE_DEVICE Request. La vérification avant le retrait, les handles ouverts et la façon dont le système de fichiers et les applications répondent. ↩
-
Microsoft Learn, Handle. L’examen des références de fichiers ouvertes et l’avertissement concernant la fermeture forcée de handles. ↩ ↩2
-
Microsoft Learn, Process Explorer. La recherche du processus qui garde ouvert un fichier ou un répertoire donné. ↩
-
Microsoft Learn, File Buffering. La distinction entre les tampons de fichiers côté Windows et le cache côté matériel. ↩
-
Microsoft Learn, DBT_DEVICEQUERYREMOVE event. Comment une application se prépare au retrait et ferme ses handles de périphérique. ↩
Articles associés
Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.
Pourquoi le son se coupe-t-il alors que l'utilisation du processeur est faible ? — Raisonner en termes de tampons et d'échéances
Le son se coupe alors que l'utilisation du processeur reste faible. Explication à partir du tampon de lecture et de l'échéance de réappro...
Pourquoi RDP est-il lent sur une connexion rapide ? — Séparer la saisie, l'affichage et le réseau
Le test de débit est rapide, pourtant la saisie et le défilement du Bureau à distance traînent. Explication, des allers-retours et du tra...
Pourquoi un partage de fichiers Windows fonctionne parfois et échoue à d'autres moments — Diagnostiquer Kerberos, NTLM et les identifiants
Diagnostiquer les accès intermittents aux partages Windows à l'aide des symptômes et des journaux. Nom contre adresse IP, échecs limités ...
Capture de paquets sous Windows en pratique — choisir entre pktmon, netsh trace et Wireshark
Une panne qui ne laisse que « timeout » dans le journal applicatif s'enquête un cran plus bas en regardant les paquets réellement passés ...
Lire les codes d'erreur Windows — la structure à trois couches Win32, HRESULT et NTSTATUS
Quand 0x80004005 apparaît, décomposez-le avant de chercher. Structure à trois couches Win32, HRESULT et NTSTATUS, motif essentiel 0x8007x...
Sujets associés
Ces pages replacent le sujet dans un contexte plus large de services et de décisions.
Thèmes techniques Windows
Portail des sujets sur le développement Windows, l'analyse des incidents et la valorisation des actifs existants.
Services liés à ce sujet
Cet article est directement lié aux services suivants.
Développement d'applications Windows
Applications métier, intégration d'équipements et outils de communication, des besoins au développement.
Questions fréquentes
Questions souvent posées lors d’une consultation sur le sujet de cet article.
- Faut-il encore retirer une clé USB en toute sécurité sous Windows 11 ?
- Cela dépend de la stratégie de retrait du périphérique concerné. « Retrait rapide » est conçu pour que cette étape puisse être omise ; avec « Meilleures performances », vous devez exécuter « Retirer le périphérique en toute sécurité ». Si vous ignorez le paramètre, le plus simple est de terminer vos enregistrements et vos copies, de fermer les applications qui utilisent la clé, puis de lancer l'action de retrait.
- Avec « Retrait rapide », puis-je débrancher la clé pendant une copie ?
- Non. « Retrait rapide » est une stratégie qui empêche Windows de mettre les écritures en cache et de les différer. Ce n'est pas une fonction qui complète des données que vous n'avez pas encore transmises, et elle n'autorise pas à interrompre une copie ou un enregistrement en cours.
- Où vérifier si un lecteur est réglé sur « Retrait rapide » ?
- Repérez la lettre et le nom du lecteur USB dans l'Explorateur de fichiers, ouvrez les propriétés du périphérique correspondant dans Gestion des disques et consultez l'onglet « Stratégies ». Si l'onglet n'apparaît pas, sélectionnez le périphérique dans l'onglet « Matériel » et ouvrez ses propriétés depuis là. La disposition varie selon les environnements, et il n'est pas nécessaire de modifier le paramètre pour le consulter.
- Pourquoi Windows indique-t-il que le périphérique est utilisé alors que les écritures sont terminées ?
- Si une application garde encore un fichier ou un dossier ouvert, l'utilisation du périphérique n'est pas forcément terminée, même si le trafic s'est momentanément arrêté. Enregistrez et fermez d'abord les fichiers concernés, vérifiez que les copies et les sauvegardes sont terminées, puis réessayez le retrait. Au besoin, utilisez Process Explorer pour trouver le processus qui les garde ouverts, mais évitez de fermer des handles de force.
- Si j'utilise « Retirer le périphérique en toute sécurité », un document que j'ai oublié d'enregistrer sera-t-il écrit sur la clé USB ?
- Non. « Retirer le périphérique en toute sécurité » ne remplace pas la commande Enregistrer d'une application. Enregistrez d'abord le document et vérifiez que l'application a signalé la fin de l'opération. Ne conservez pas des données importantes uniquement sur une clé USB : gardez-en aussi une copie ailleurs.
Profil de l’auteur
Page de présentation de l’auteur de l’article.
Go Komura
Représentant de KomuraSoft LLC
Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.