Comment récupérer une partition BTRFS qui ne sera pas montée?

13

L'installation de 12.04 échouait toujours et la solution consistait à ce que le programme d'installation ignore la partition btrfs que j'utilisais précédemment pour / home.

Maintenant qu'il est installé, j'ai essayé de le faire monter la partition btrfs pour pouvoir accéder à mes 70 Go de fichiers. Il ne montera pas et les erreurs de btrfsck sortiront avec les trois lignes suivantes:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

Quelqu'un peut-il me dire comment faire fonctionner cette partition? J'ai lu en ligne que je peux probablement récupérer les données en utilisant btrfs-restore, mais je ne trouve ce programme nulle part.

Tony
la source

Réponses:

10

Manière la plus simple

btrfs-zero-log /dev/sda5

Vous obtenez ce problème car une transaction (écriture ou suppression) est bloquée dans le journal du journal et le disque ne le correspond pas.

Comment ça fonctionne:

Ainsi, lorsque les données sont écrites en premier, elles sont écrites dans le journal puis sur le disque (ou en même temps, mais le journal enregistre simplement les métadonnées sur l'écriture à venir - pas sûr ... besoin de plus de recherches sur cette partie) ...

Quoi qu'il en soit , si vous désactivez le système au milieu de cette écriture / supprimer ou faire quelque chose hickups le système (démonter le câble USB qui contient vos Btrfs point de montage), puis quand il revient qui montent ne fonctionnera pas , il échouera ( dmesg et btrfsck volonté vous montrer les erreurs dans plus de détails) ...

En regardant vous dmesg verrez ces mêmes messages TRANSID.

Vous verrez quelque chose comme ceci:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Cela signifie que btrfs voulait transif 1826 (c'était sur le journal) mais sur le disque il a vu 1821. Donc, le disque était à 2 transactions d'être synchronisé avec le journal. Personnellement, je risquerais un brtfs-zero-log ici simplement parce que ce ne sont que 2 transactions. Mais pour être sûr à 100% s'il s'agit de vos seules données (au fait, si vous avez des données critiques, vous ne devriez JAMAIS en avoir qu'une seule copie, ayez toujours une copie / sauvegarde dans un autre endroit sûr - blâmer les créateurs de btrfs ne serait pas justifier contre le manque de responsabilité des personnes de ne pas avoir de sauvegarde - btrfs n'est pas une solution de sauvegarde, c'est un système de fichiers - rien n'est une vraie solution de sauvegarde en plus d'en avoir une copie ailleurs où - pas même la parité ou les lecteurs en miroir, une vraie sauvegarde est assis quelque part sous terre dans les Alpes tandis que sa copie active est dans votre bureau au Texas)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Ici, le journal manque 62455 mais le disque est en avance à 62456, donc dans votre cas, je voudrais simplement effacer le journal. Le journal n'a pas été mis à jour cette fois. Encore une fois, je vous ai dit d'être sûr, si ce sont vos seules données et son méga critique (honte à vous), et je ferais d'abord les opérations ci-dessous pour être sûr.

L'exécution d'un btrfsck / dev / sda5 (qui, soit dit en passant, effectue uniquement une vérification en lecture seule pour que ce soit complètement sûr, ses seules options btrfsck dont vous devez vous soucier) vous montrera également ces messages.

Mais méfiez-vous si ces données sont critiques, je le ferais d'abord (comme l'ont dit les autres hommes)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

Ensuite, cp ou rsync tous vos fichiers vers un emplacement sûr, puis en toute sécurité, faites le btrfs-zero-log, si c'est une opération réussie, vous venez de perdre beaucoup de temps à sauvegarder votre système (mais si ce n'est pas réussi, vous venez d'enregistrer votre cul)

Ensuite, si les montages ont échoué, effectuez une restauration btrfs (vidage du système, si je comprends bien, c'est une opération pouvant être reprise, mais il continue de demander Y ou y de temps en temps, alors regardez la sortie)

btrfs restore /dev/sda5 /USB

Ensuite, lorsque la sécurité est terminée (lorsque la restauration de btrfs est terminée), effectuez le btrfs-zero-log, si c'est une opération réussie, vous venez de perdre beaucoup de temps à sauvegarder votre système (mais si cela ne réussit pas, vous venez de sauvegarder votre cul)

Vous pouvez d'abord exécuter l'écran

screen /bin/bash

btrfs restore /dev/sda5 /USB

NOTE CÔTÉ ÉCRAN

Pour détacher (la commande sera toujours exécutée): CONTROL-a puis tapez ": détacher" sans les guillemets puis appuyez sur ENTREE

Une autre façon de se détacher: Fermez ensuite le mastic ou votre terminal et il se détachera (la commande / restauration s'exécutera toujours).

Pour vérifier, revenez simplement dessus:

screen -x

screen -x s'attachera aux sessions, même s'il est détaché, et contrairement à -h dit, il s'attachera même s'il est déjà attaché)

Si vous avez plusieurs écrans, screen -x vous indiquera que vous devez être plus spécifique pour attacher à la session:

screen -ls

ls pour lister toutes les sessions, facile à retenir.

pour voir le PID, vous pouvez également le faire:

ps aux | grep screen

Une fois que vous avez trouvé votre PID, lancez l'écran comme ceci:

screen -x PID

Cela se rattachera à une session spécifique. Vous pouvez avoir plusieurs sessions / puttys attachés au même écran (ils produiront le même texte, vous pouvez taper des commandes dans une, et elles seront reflétées sur l'autre putty)

kossboss
la source
7

Monter au démarrage en utilisant les options de montage root fs:

rootflags=recovery,nospace_cache

ou

rootflags=recovery,nospace_cache,clear_cache

La liste complète des options de montage de btrfs devrait être ici https://btrfs.wiki.kernel.org/index.php/Mount_options et d'autres choses peuvent également être utiles, comme noatime, nodatacow (correction d'un bug du noyau pour moi en me donnant un chance de copier mes fichiers).

Ajoutez-le à votre grub.cfg / menu.lst, ou saisissez-le lors du démarrage.

Le truc nospace_cache rendra les choses terriblement lentes. Il suffit de démarrer, d'attendre (longtemps), de s'arrêter et de démarrer normalement.

J'ai eu la même chose il y a quelques jours, et ce qui précède l'a corrigé. Mais aussi par la suite, il y a eu quelques problèmes d'espace ... l'espace rapporté n'est pas à 100% mais ça peut encore dire hors espace.

==

Je pense que vous pouvez également ajouter les mêmes options dans votre fstab, par exemple:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

Si vous tentiez de récupérer un répertoire / home monté sur une partition avec UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.

Peter
la source
Pourquoi deux nospace_cache?
un CVn
c'était une faute de frappe, était censé être clear_cache
Peter
:) Vous venez de sauvegarder par sauvegarde!
derflocki
1

La réponse de Pierre a résolu le problème pour moi, mais pas sur Ubuntu. J'ai eu une /homepartition btrfs'd qui a obtenu naturellement corrompu. Le système ne démarre parce qu'il était fstab. Je suis entré dans le mode d'entretien, HASHED la ligne avec cette partition, et démarrais normalement (j'avais une partition ext4 libre , je pouvais utiliser comme /home).

J'ai monté la partition manuellement avec la commande suivante:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3et a effectivement pu enregistrer mes données. Bien qu'il n'a pas fallu longtemps pour le monter. Alors MERCI Peter.

Nikos
la source
3
Vous voudrez peut - être après tout cela comme un commentaire sur la réponse de Pierre, en disant : « Cela a bien fonctionné », puis marquer simplement que la vraie réponse. sinon, Peter n'obtiendra plus de crédit "true" (points de rep)
Ward Thomas
1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = lecture seule

Ce travail pour moi

Dan
la source
1
Avez-vous lu le commentaire de @The Lord of Time à un commentaire similaire qui a été ajouté comme réponse? Ici, c'est à nouveau si vous n'avez pas - "Vous voudrez peut-être simplement poster cela en tant que commentaire sur la réponse de Peter, en disant 'Cela a fonctionné' et ensuite marquer cela comme la vraie réponse. Sinon, Peter n'obtiendra pas de" vrai " crédit (points rep) "
geezanansa
1

J'ai eu le même problème. Après un redémarrage, je ne pouvais plus monter ma partition btrfs. Cependant, aucune des solutions mentionnées ici n'a pu le résoudre.

Ce qui a résolu le problème pour moi, c'était la mise à niveau du noyau de 3.10 à 3.12. Après un redémarrage, la partition btrfs peut être à nouveau montée.

Fabian Jakobs
la source