Les gens s'il vous plaît aider - Je suis un newb avec un mal de tête majeur à portée de main (situation de tempête parfaite).
J'ai un disque dur de 1 1 To sur mon ubuntu 11.04 configuré en tant que raid logiciel 5. Les données avaient été copiées chaque semaine sur un autre disque dur séparé de l'ordinateur jusqu'à ce que cela échoue complètement et soit jeté. Il y a quelques jours, nous avons eu une panne de courant et après avoir redémarré ma boîte, je ne voulais pas monter le raid. Dans mon infinie sagesse je suis entré
mdadm --create -f...
commande au lieu de
mdadm --assemble
et n'a pas remarqué la parodie que j'avais faite jusqu'à après. Le tableau a commencé à se dégrader et a été construit et synchronisé, ce qui a pris environ 10 heures. Après mon retour, j’ai vu que le tableau était opérationnel mais que le raid n’était pas
Je veux dire que les lecteurs individuels sont partitionnés (type de partition f8
), mais pas le md0
périphérique. Réalisant avec horreur ce que j'ai fait, j'essaie de trouver des solutions. Je prie juste pour --create
ne pas écraser tout le contenu du pilote dur.
Est-ce que quelqu'un pourrait m'aider avec ceci - les données qui sont sur le lecteur sont très importantes et uniques ~ 10 ans de photos, de documents, etc.
Est-il possible qu'en spécifiant les disques durs participants dans le mauvais ordre, on puisse les mdadm
écraser? quand je fais
mdadm --examine --scan
Je reçois quelque chose comme ARRAY /dev/md/0 metadata=1.2 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b name=<hostname>:0
Curieusement, le nom utilisé était 'raid' et non l'hôte avec: 0 ajouté.
Voici les entrées de configuration "assainies":
DEVICE /dev/sdf1 /dev/sde1 /dev/sdd1
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>
MAILADDR root
ARRAY /dev/md0 metadata=1.2 name=tanserv:0 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b
Here is the output from mdstat
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdd1[0] sdf1[3] sde1[1]
1953517568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
fdisk shows the following:
fdisk -l
Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bf62e
Device Boot Start End Blocks Id System
/dev/sda1 * 1 9443 75846656 83 Linux
/dev/sda2 9443 9730 2301953 5 Extended
/dev/sda5 9443 9730 2301952 82 Linux swap / Solaris
Disk /dev/sdb: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000de8dd
Device Boot Start End Blocks Id System
/dev/sdb1 1 91201 732572001 8e Linux LVM
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00056a17
Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 8e Linux LVM
Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca948
Device Boot Start End Blocks Id System
/dev/sdd1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/dm-0: 1250.3 GB, 1250254913536 bytes
255 heads, 63 sectors/track, 152001 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/sde: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x93a66687
Device Boot Start End Blocks Id System
/dev/sde1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/sdf: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe6edc059
Device Boot Start End Blocks Id System
/dev/sdf1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/md0: 2000.4 GB, 2000401989632 bytes
2 heads, 4 sectors/track, 488379392 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
Disk /dev/md0 doesn't contain a valid partition table
Selon les suggestions, j'ai nettoyé les superblocs et ai recréé le tableau avec --assume-clean
option mais sans aucune chance.
Existe-t-il un outil qui m'aidera à restaurer au moins certaines des données? Quelqu'un peut-il me dire quoi et comment mdadm --create fait quand se synchronise pour détruire les données afin que je puisse écrire un outil pour annuler tout ce qui a été fait?
Après la recréation du raid, je lance fsck.ext4 / dev / md0 et voici la sortie
root @ tanserv: / etc / mdadm # fsck.ext4 / dev / md0 e2fsck 1.41.14 (22-Dec-2010) fsck.ext4: superbloc non valide, en essayant des blocs de sauvegarde ... fsck.ext4: mauvais nombre magique en super bloquer en essayant d'ouvrir / dev / md0
Le superbloc n'a pas pu être lu ou ne décrit pas un système de fichiers ext2 correct. Si le périphérique est valide et qu'il contient réellement un système de fichiers ext2 (et non swap, ufs ou autre chose), le superbloc est corrompu et vous pouvez essayer de faire fonctionner e2fsck avec un superbloc alternatif: e2fsck -b 8193
La suggestion de Per Shanes j'ai essayé
root@tanserv:/home/mushegh# mkfs.ext4 -n /dev/md0
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
122101760 inodes, 488379392 blocks
24418969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
et exécutez fsck.ext4 avec chaque bloc de sauvegarde, mais tous ont renvoyé ce qui suit:
root@tanserv:/home/mushegh# fsck.ext4 -b 214990848 /dev/md0
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Invalid argument while trying to open /dev/md0
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
Aucune suggestion?
Cordialement!
la source
Réponses:
Ok. Quelque chose me dérangeait à propos de votre problème, alors j’ai allumé une VM pour lui expliquer le comportement auquel il fallait s’attendre. J'arriverai à ce qui m'ennuyait dans une minute; laissez-moi d'abord dire ceci:
Sauvegardez ces lecteurs avant de tenter quoi que ce soit!
Vous avez peut-être déjà fait plus de dégâts que ce que la resynchronisation a fait; pouvez-vous préciser ce que vous vouliez dire quand vous avez dit:
Si vous avez couru un
mdadm --misc --zero-superblock
, alors ça devrait aller.Quoi qu’il en soit, récupérez de nouveaux disques et prenez-en des images exactes avant de faire quoi que ce soit qui pourrait écrire davantage sur ces disques.
Cela étant dit, il semble que les données stockées sur ces objets soient extrêmement résistantes aux resynchronisations fantaisistes. Continuez à lire, il y a de l'espoir, et c'est peut-être le jour où j'atteins la limite de longueur de réponse.
Le meilleur scénario
J'ai jeté ensemble une VM pour recréer votre scénario. Les disques ne font que 100 Mo, je ne serais donc pas en attente de chaque resynchronisation, mais cela devrait être une représentation assez précise sinon.
Construit le tableau de manière aussi générique et par défaut que possible - morceaux de 512 Ko, disposition symétrique à gauche, disques dans l'ordre des lettres .. rien de spécial.
Jusqu'ici tout va bien; faisons un système de fichiers et mettons quelques données dessus.
D'accord. Nous avons un système de fichiers et des données ("données"
datafile
, et 5 Mo de données aléatoires contenant cette valeur de hachage SHA1randomdata
); Voyons ce qui se passe quand on recrée.La resynchronisation s'est terminée très rapidement avec ces minuscules disques, mais cela s'est produit. Alors voici ce qui m'ennuyait de plus tôt; votre
fdisk -l
sortie. N'avoir aucune table de partition sur lemd
périphérique n'est pas un problème du tout, c'est prévu. Votre système de fichiers réside directement sur le faux périphérique de bloc sans table de partition.Oui, pas de table de partition. Mais...
Système de fichiers parfaitement valide, après une resynchronisation. Donc c'est bien; vérifions nos fichiers de données:
Solide - pas de corruption de données du tout! Mais ceci est avec exactement les mêmes paramètres, donc rien n'a été mappé différemment entre les deux groupes RAID. Laissons tomber cette chose avant d'essayer de la casser.
Prendre du recul
Avant de tenter de résoudre ce problème, voyons pourquoi il est difficile de rompre. RAID 5 fonctionne en utilisant un bloc de parité qui protège une zone de la même taille que le bloc de chaque disque de la matrice. La parité ne concerne pas seulement un disque spécifique, elle est pivotée uniformément sur les disques pour mieux répartir la charge de lecture sur les disques en fonctionnement normal.
L'opération XOR pour calculer la parité ressemble à ceci:
Ainsi, la parité est répartie entre les disques.
Une resynchronisation est généralement effectuée lors du remplacement d'un disque mort ou manquant. Cela est également fait
mdadm create
pour s'assurer que les données sur les disques s'alignent avec ce à quoi la géométrie du RAID est supposée ressembler. Dans ce cas, le dernier disque de la spécification de matrice est celui sur lequel la synchronisation est effectuée: toutes les données existantes sur les autres disques sont utilisées pour la synchronisation.Ainsi, toutes les données du "nouveau" disque sont effacées et reconstruites; soit en construisant de nouveaux blocs de données à partir de blocs de parité pour ce qui aurait dû être là, soit en créant de nouveaux blocs de parité.
Ce qui est bien, c’est que la procédure à suivre pour ces deux choses est exactement la même: une opération XOR sur les données du reste des disques. Le processus de resynchronisation dans ce cas peut avoir dans sa présentation qu’un bloc donné doit être un bloc de parité et penser qu’il construit un nouveau bloc de parité alors qu’il recrée en fait un ancien bloc de données. Donc même s'il pense que cela construit ceci:
... il peut simplement s'agir de reconstruire à
DISK5
partir de la mise en page ci-dessus.Il est donc possible que les données restent cohérentes même si la matrice est mal construite.
Lancer un singe dans les travaux
(pas une clé; le singe entier)
Test 1:
Faisons le tableau dans le mauvais ordre!
sdc
, alorssdd
, alorssdb
..Ok, tout va bien. Avons-nous un système de fichiers?
Nan! Pourquoi donc? Parce que même si toutes les données sont là, elles sont dans le mauvais ordre; ce qui était autrefois 512 Ko de A, puis 512 Ko de B, A, B, etc. a maintenant été mélangé à B, A, B, A. Le disque ressemble maintenant à un charabia pour le vérificateur de système de fichiers, il ne fonctionnera pas. La sortie de
mdadm --misc -D /dev/md1
nous donne plus de détails; Cela ressemble à ceci:Quand cela devrait ressembler à ceci:
Donc, tout va bien. Nous avons écrasé tout un tas de blocs de données avec de nouveaux blocs de parité. Recréez, dans le bon ordre maintenant:
Bien, il y a encore un système de fichiers! Vous avez encore des données?
Succès!
Test 2
Ok, changeons la taille du bloc et voyons si cela nous cause des problèmes.
Ouais, ouais, c'est arrosé quand ça se passe comme ça. Mais pouvons-nous récupérer?
Le succès, encore!
Test 3
C’est celui qui, à mon avis, tuerait les données à coup sûr. Faisons un algorithme de présentation différent!
Effrayant et mauvais - il pense avoir trouvé quelque chose et veut faire des réparations! Ctrl+ C!
Ok, la crise évitée. Voyons si les données sont toujours intactes après la resynchronisation avec une mise en page incorrecte:
Succès!
Test 4
Montrons simplement que la réduction à zéro des superblocs n'est pas préjudiciable très rapidement:
Ouais, pas grave.
Test 5
Jetons tout ce que nous avons à faire. Les 4 tests précédents, combinés.
En avant!
Le verdict?
Sensationnel.
Il semble donc qu'aucune de ces actions n'a corrompu les données. J'ai été assez surpris par ce résultat, franchement; Je m'attendais à une probabilité modérée de perte de données lors du changement de taille de bloc et à une perte certaine lors du changement de présentation. J'ai appris quelque chose aujourd'hui.
Alors .. Comment puis-je obtenir mes données?
Autant d'informations que vous avez sur l'ancien système vous seraient extrêmement utiles. Si vous connaissez le type de système de fichiers, si vous disposez d'anciennes copies de vos
/proc/mdstat
informations avec l'ordre du lecteur, l'algorithme, la taille de bloc et la version des métadonnées. Avez-vous configuré les alertes par e-mail de mdadm? Si c'est le cas, trouvez-en un ancien. sinon, vérifiez/var/spool/mail/root
. Vérifiez votre~/.bash_history
pour voir si votre construction d'origine est là-bas.Alors, la liste des choses que vous devriez faire:
dd
avant de faire quoi que ce soit !!fsck
le md actif actuel - vous venez peut-être de construire dans le même ordre que précédemment. Si vous connaissez le type de système de fichiers, c'est utile. utiliser cetfsck
outil spécifique . Si l'un des outils propose de réparer quoi que ce soit, ne le laissez pas sauf si vous êtes certain d'avoir trouvé le système de fichiers valide! Si unefsck
offre de réparer quelque chose pour vous, n'hésitez pas à laisser un commentaire pour demander si cela aide réellement ou juste sur des données nucléaires./proc/mdstat
, alors vous pouvez simplement imiter ce qu'il montre; sinon, vous êtes un peu dans le noir - il est raisonnable d'essayer tous les différents ordres de lecteurs, mais il est inutile de vérifier chaque taille de bloc possible avec chaque ordre possible. Pour chacun,fsck
voir si vous avez quelque chose de prometteur.Alors c'est ça. Désolé pour le roman, n'hésitez pas à laisser un commentaire si vous avez des questions et bonne chance!
note de bas de page: moins de 22 000 caractères; 8k + timide de la limite de longueur
la source
Si vous avez de la chance, vous pourrez peut-être récupérer vos fichiers avec un logiciel de récupération capable de lire une matrice RAID-5 défectueuse. Zero Assumption Recovery est un programme avec lequel j'ai eu du succès auparavant.
Cependant, je ne suis pas sûr que le processus de création d'un nouveau tableau ait été détruit et détruit toutes les données. Il pourrait donc s'agir d'un effort ultime.
la source
J'ai eu un problème similaire:
après une défaillance d'un logiciel RAID5, j'ai déclenché
mdadm --create
sans le donner--assume-clean
et je ne pouvais plus monter le module. Après deux semaines de recherches, j'ai finalement restauré toutes les données. J'espère que la procédure ci-dessous permettra à quelqu'un de gagner du temps.Longue histoire courte
Le problème était dû au fait qu’un
mdadm --create
nouveau tableau était différent de l’original sous deux aspects:Comme le montre la réponse brillante de Shane Madden ,
mdadm --create
ne détruit pas les données dans la plupart des cas! Après avoir trouvé l'ordre de la partition et le décalage des données, je pouvais restaurer le tableau et en extraire toutes les données.Conditions préalables
Je n'avais aucune sauvegarde de superblocs RAID, donc tout ce que je savais, c'est qu'il s'agissait d'un ensemble RAID5 sur 8 partitions créé lors de l'installation de Xubuntu 12.04.0. Il avait un système de fichiers ext4. Un autre élément de connaissance important était la copie d'un fichier qui était également stocké sur la matrice RAID.
Outils
Xubuntu 12.04.1 live CD a été utilisé pour effectuer tout le travail. Selon votre situation, vous aurez peut-être besoin des outils suivants:
version de mdadm permettant de spécifier le décalage de données
bgrep - recherche de données binaires
hexdump, e2fsck, mount et une calculatrice hexadécimale - outils standard de repos
Commencer avec une sauvegarde complète
La dénomination des fichiers de périphérique, par exemple,
/dev/sda2
/dev/sdb2
etc., n’est pas persistante, il est donc préférable de noter les numéros de série de vos lecteurs, donnés par.Connectez ensuite un disque dur externe et sauvegardez chaque partition de votre matrice RAID comme suit:
Déterminer la disposition RAID5 d'origine
Diverses dispositions sont décrites ci-dessous: http://www.accs.com/p_and_p/RAID/LinuxRAID.html
Pour savoir comment les bandes de données ont été organisées sur le tableau d'origine, vous avez besoin d'une copie d'un fichier de style aléatoire, comme vous le savez. stocké sur le tableau. La taille de bloc par défaut actuellement utilisée par
mdadm
est de 512 Ko. Pour un tableau de N partitions, vous avez besoin d’un fichier d’une taille minimale (N + 1) * 512 Ko. Un jpeg ou une vidéo est bon car il fournit des sous-chaînes relativement uniques de données binaires. Supposons que notre fichier s'appellepicture.jpg
. Nous lisons 32 octets de données en N + 1 positions à partir de 100k et en augmentant de 512k:Nous recherchons ensuite des occurrences de toutes ces chaînes d'octets sur toutes nos partitions brutes, donc au total (N + 1) * N commandes, comme ceci:
Ces commandes peuvent être exécutées en parallèle pour différents disques. L'analyse d'une partition de 38 Go a pris environ 12 minutes. Dans mon cas, chaque chaîne de 32 octets n'a été trouvée qu'une seule fois sur les huit lecteurs. En comparant les décalages renvoyés par bgrep, vous obtenez une image comme celle-ci:
Nous voyons une disposition normale symétrique à gauche , qui est la valeur par défaut pour
mdadm
. Plus important encore, nous connaissons maintenant l'ordre des partitions. Cependant, nous ne savons pas quelle partition est la première du tableau, car elles peuvent être décalées de manière cyclique.Notez également la distance entre les décalages trouvés. Dans mon cas, c'était 512KB. La taille du bloc peut en réalité être inférieure à cette distance, auquel cas la disposition réelle sera différente.
Trouver la taille d'origine
Nous utilisons le même fichier
picture.jpg
pour lire 32 octets de données à des intervalles différents les uns des autres. Nous savons par le haut que les données à l'offset 100k/dev/sdh2
reposent, à l'offset 612k à/dev/sdb2
et à 1124k à/dev/sdd2
. Cela montre que la taille du bloc n'est pas supérieure à 512 Ko. Nous vérifions qu'il n'est pas inférieur à 512 Ko. Pour cela, nous vidons la chaîne d'octets à l'offset 356k et regardons sur quelle partition elle se trouve:Il se trouve sur la même partition que l'offset 612k, ce qui indique que la taille du bloc n'est pas de 256 Ko. Nous éliminons les plus petites tailles de morceaux de la même manière. Je me suis retrouvé avec des morceaux de 512KB étant la seule possibilité.
Trouver la première partition dans la mise en page
Nous connaissons maintenant l'ordre des partitions, mais nous ne savons pas quelle partition devrait être la première et quel décalage de données RAID a été utilisé. Pour trouver ces deux inconnues, nous allons créer une grappe RAID5 avec une disposition correcte des blocs et un petit décalage de données, puis rechercher le début de notre système de fichiers dans cette nouvelle grappe.
Pour commencer, nous créons un tableau avec le bon ordre de partitions, que nous avons trouvé précédemment:
Nous vérifions que l'ordre est obéi en émettant
Nous déterminons maintenant les décalages des N + 1 chaînes d'octets connues dans la matrice RAID. Je lance un script pour une nuit (le Live CD ne demande pas de mot de passe sur sudo :):
Sortie avec des commentaires:
Sur la base de ces données, nous constatons que la 3ème chaîne n'a pas été trouvée. Cela signifie que le bloc at
/dev/sdd2
est utilisé pour la parité. Voici une illustration des positions de parité dans le nouveau tableau:Notre objectif est de déduire la partition sur laquelle démarrer le tableau, afin de déplacer les morceaux de parité au bon endroit. Comme la parité doit être décalée de deux morceaux vers la gauche, la séquence de partition doit être décalée de deux pas vers la droite. Ainsi, la mise en page correcte pour ce décalage de données est la suivante
ahbdcefg
:À ce stade, notre matrice RAID contient des données sous la forme appropriée. Vous aurez peut-être de la chance si le décalage des données RAID est identique à celui de la matrice d'origine et vous pourrez alors probablement monter la partition. Malheureusement, ce n'était pas mon cas.
Vérifier la cohérence des données
Nous vérifions la cohérence des données sur une bande de morceaux en extrayant une copie de
picture.jpg
la matrice. Pour cela, localisons le décalage de la chaîne de 32 octets à 100 ko:Nous soustrayons ensuite 100 * 1024 du résultat et utilisons la valeur décimale obtenue en
skip=
paramètre pourdd
. Lecount=
est la taillepicture.jpg
en octets:Vérifiez que
extract.jpg
c'est la même chose quepicture.jpg
.Trouver le décalage de données RAID
Une remarque: le décalage de données par défaut pour la
mdadm
version 3.2.3 est de 2048 secteurs. Mais cette valeur a changé avec le temps. Si le tableau d' origine utilisé un plus petit que votre décalage de données en coursmdadm
, puismdadm --create
sans--assume-clean
peut remplacer le début du système de fichiers.Dans la section précédente, nous avons créé une matrice RAID. Vérifiez le décalage de données RAID dont il disposait en émettant pour certaines des partitions individuelles:
2048 secteurs de 512 octets est 1MB. La taille de bloc étant de 512 Ko, le décalage de données actuel est de deux morceaux.
Si à ce stade, vous avez un décalage de deux blocs, il est probablement suffisamment petit et vous pouvez ignorer ce paragraphe.
Nous créons une matrice RAID5 avec le décalage de données d'un bloc de 512 Ko. Commencer un morceau plus tôt déplace la parité d'un pas vers la gauche, donc nous compensons en déplaçant la séquence de partition d'un pas vers la gauche. Par conséquent, pour un décalage de données de 512 Ko, la mise en page correcte est
hbdcefga
. Nous utilisons une versionmdadm
qui prend en charge le décalage de données (voir la section Outils). Cela prend offset en kilo-octets:Maintenant, nous recherchons un superbloc ext4 valide. La structure de superbloc peut être trouvée ici: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
Nous analysons le début du tableau à la recherche d'occurrences du nombre magique
s_magic
suivies des_state
ets_errors
. Les bytestrings à rechercher sont:Exemple de commande:
Le nombre magique commence 0x38 octets dans le superbloc, nous soustrayons donc 0x38 pour calculer le décalage et examiner le superbloc entier:
Cela semble être un superbloc valide.
s_log_block_size
champ à 0x18 est 0002, ce qui signifie que la taille du bloc est 2 ^ (10 + 2) = 4096 octets.s_blocks_count_lo
à 0x4 est 03f81480 blocs qui est 254GB. Cela semble bon.Nous recherchons maintenant les occurrences des premiers octets du superbloc pour trouver ses copies. Notez le basculement d'octet par rapport à la sortie hexdump:
Cela correspond parfaitement aux positions attendues des superblocs de sauvegarde:
Par conséquent, le système de fichiers commence à l’offset 0xdc80000, c’est-à-dire 225792 Ko à partir du début de la partition. Puisque nous avons 8 partitions, dont une pour la parité, nous divisons le décalage par 7. Cela donne 33030144 octets décalés sur chaque partition, ce qui correspond exactement à 63 blocs RAID. Et comme le décalage de données RAID actuel est d'un bloc, nous concluons que le décalage de données d'origine était de 64 morceaux, soit 32768 Ko. Un décalage de
hbdcefga
63 fois vers la droite donne la mise en pagebdcefgah
.Nous construisons finalement la bonne matrice RAID:
Voilà!
la source
J'ai eu un problème similaire. J'ai formaté et réinstallé mon lecteur de système d'exploitation / système d'exploitation avec une nouvelle installation d'Ubuntu 12.04, puis j'ai exécuté la commande mdadm --create ... et je n'ai pas pu le monter.
Il a dit qu'il n'avait pas de superbloc ou de partition valide.
De plus, lorsque j'ai arrêté le raid mdadm, je ne pouvais plus monter le périphérique standard.
J'ai pu réparer le superbloc avec mke2fs et e2fsck:
Puis couru:
Cela a restauré le superbloc afin que je puisse monter et lire le lecteur.
Pour que le tableau fonctionne sans détruire le superbloc ou les partitions que j'ai utilisées pour la construction:
Après avoir vérifié les données, j'ajouterai l'autre lecteur:
la source
Je ne fais que mettre à jour certaines des informations données précédemment. Un tableau RAID 3 à 3 disques fonctionnait correctement lorsque ma carte mère est morte. Le tableau contenait / dev / md2 en tant que partition / home de 1,2 To et / dev / md3 en tant que partition / var de 300 Go.
J'avais deux sauvegardes de choses "importantes" et une série de choses aléatoires que j'avais saisies à divers endroits d'Internet et que j'aurais vraiment dû parcourir et jeter de manière sélective. La plupart des sauvegardes ont été décomposées en fichiers .tar.gz de 25 Go ou moins, et une copie distincte de / etc a également été sauvegardée.
Le reste du système de fichiers s'est déroulé sur deux petits disques raid0 de 38 Go.
Ma nouvelle machine était semblable à l'ancien matériel et je l'ai mise en marche simplement en branchant les cinq disques et en sélectionnant un ancien noyau générique. Donc, j'avais cinq disques avec des systèmes de fichiers propres, bien que je ne puisse pas être sûr que les disques soient dans le bon ordre, et je devais installer une nouvelle version de Debian Jessie pour être sûr de pouvoir mettre à jour la machine si nécessaire, et de trier les autres problèmes.
Avec le nouveau système générique installé sur deux disques Raid0, j'ai commencé à réassembler les tableaux. Je voulais être sûr d'avoir les disques dans le bon ordre. Ce que j'aurais dû faire était de publier:
Mais je n'ai pas. Il semble que mdadm soit assez intelligent et que, avec un uuid, il sache où aller. Même si le bios désigne / dev / sdc en tant que / sda, mdadm le mettra correctement ensemble (bien que YMMV).
Au lieu de cela, j'ai publié
mdadm --create /dev/md2 without the --assume-clean
:, et laissé la resynchronisation sur / dev / sde1 se terminer. L’erreur suivante que j’ai faite est de travailler sur / dev / sdc1 au lieu du dernier lecteur de / dev / md2, / sde1. À tout moment, mdadm pense qu’il ya un problème, c’est le dernier disque qui a été mis à la porte ou resynchronisé.Après cela, mdadm n'a pu trouver aucun superbloc, et e2fsck -n n'a pas pu non plus.
Après avoir trouvé cette page, j’ai essayé de trouver la séquence des disques (terminée), de vérifier la validité des données (6 Mo vérifiés d’un fichier de 9 Mo), d’obtenir les disques dans le bon ordre, cde, de saisir les uuid de / md2 et / md3 à partir de l’ancien /etc/mdadm.conf et essayé de les assembler.
Eh bien, a
/dev/md3
commencé et amdadm --misc -D /dev/md3
montré trois partitions en bonne santé, et les disques dans le bon ordre./dev/md2
avait également l'air bien, jusqu'à ce que j'ai essayé de monter le système de fichiers.Le système de fichiers a refusé d'être monté et e2fsck n'a trouvé aucun superbloc. En outre, lors de la vérification des superblocs comme décrit ci-dessus, le nombre total de blocs trouvé comme étant un 880 0076, un 880 0076 ou un 5500 1176 ne correspondait pas à la taille de la capacité du disque de 1199,79 indiquée par mdadm. En outre, aucun des emplacements des "superblocs" alignés avec les données des publications ci-dessus.
J'ai sauvegardé tout le répertoire / var et je me suis préparé à effacer les disques. Pour voir s'il était possible d'effacer simplement / md2, (je n'avais rien d'autre à perdre à ce stade), voici ce qui suit:
Tout semblait aller bien, sauf le changement de l'uuid. Après quelques vérifications supplémentaires, j’ai écrit 600 Go de données sauvegardées sur / dev / md2. Ensuite, démontez et essayez de remonter le lecteur:
Vous plaisantez j'espère? qu'en est-il de mes 600 Go sur le fichier?
Ah - facilement réparé. non commenté une ligne dans /etc/mdadm.conf
Yippie!
la source