Système de files montrant toujours l'ancienne valeur après la réduction de Linux, mais montrant la valeur correcte dans LVM

Nous avons une tâche pour resize le système de files de 8T à 7T qui est dans LVM. Nous avons donné la command resize2fs, alors que la command est toujours en cours d'exécution, nous avons l'erreur «Échec de l'écriture: login réinitialisée par l'homologue». Toutefois, lorsque nous nous connectons à nouveau, la command resize2fs exécute toujours la list des process. Une fois le process terminé, nous avons réduit le LVM en utilisant "lvreduce" et l'avons remonté.

Maintenant, en df -h, il affiche encore 8 To, mais dans LVM, il affiche 7 To. Comment rectifier le problème?

resize2fs n'a probablement pas terminé le travail, mais vous ne pouvez pas le dire parce que vous avez manqué la fin de sa sortie.

Vous lvreduce pas dû aller de l'avant et exécuter lvreduce à ce moment-là. Il y a de très bonnes chances que cette partie corrompue de votre système de files. Notez que vous ne pouvez pas annuler cette opération en exécutant lvextend et en espérant que les octets perdus reviennent et que le système de files puisse récupérer, car lvextend peut vous redonner différents octets.

Si je devais deviner, ce qui est probablement arrivé est que votre connection a été réinitialisée pendant un point où resize2fs fonctionnait pendant un certain time sans émettre de sortie. Une fois que la connection a été réinitialisée, il a continué à fonctionner pendant un certain time (il a ignoré SIGHUP ou ne l'a jamais reçu?). Mais plus tard, probablement quand il était presque terminé, il a émis une sortie de statut et a été rapidement tué parce qu'il a reçu une erreur ou un signal en essayant d'écrire sur un terminal inexistant. Et ça n'a jamais été terminé.

Quel état resize2fs laissé le système de files dans une question ouverte, mais on peut espérer qu'il l'a laissée dans un état assez utilisable, avec la réduction de taille du système de files non validée.

Morale de cette partie de l'histoire: exécuter des opérations critiques comme resize2fs sous l' screen (ou comme at travail, ou autre chose) s'il y a une chance que votre connection pourrait être interrompue.

Peu importe ce que vous faites, assurez-vous d'avoir une bonne sauvegarde, car tout ce que vous pourriez tenter à ce stade est dangereux. Si vous ne disposez pas d'une bonne sauvegarde, vous pouvez monter le système de files en lecture seule (ne le montez pas en lecture + écriture car cela pourrait exacerber les dégâts) et en prendre un maintenant.

Le plus sûr est de simplement supprimer le système de files et récupérer à partir de la sauvegarde. Cependant, si vous souhaitez tenter de restaurer le système de files en place, vous souhaiterez probablement exécuter une combinaison de ces deux tâches:

  • fsck le système de files tel quel. Cela vous informera de toute tentative de lecture au-delà de la fin du système de files et vous donnera peut-être une idée de la quantité de données qui dépasse ces limites. Espérons que pas beaucoup, car resize2fs peut avoir réussi à déplacer ces données avant qu'il ne se soit écrasé.
  • lvextend périphérique de bloc en utilisant lvextend à la taille qu'il était, juste pour rendre le système de files heureux, puis fsck , puis réessayez toute l'opération depuis le premier carré. Cela pourrait potentiellement introduire une certaine corruption silencieuse lorsque le système de files accède aux plages d'octets situées au-delà de la plage où se trouvent des données valides.

Je ne suis pas sûr de ce qui fonctionnerait le mieux pour vous. Cela dépend de la layout que les choses ont eu sur le système de files et de la façon dont il a été touché depuis l'événement (vous mentionnez que vous l'avez monté, probablement lu + écrit, au less une fois …)