Come montare / ripristinare i dati su un disco che faceva parte di un raid 1 di mdadm su un'altra macchina?


17

Qualche sfondo

  • Il disco stesso è stato "lavorato" da un amico e si dice che sia ancora intatto, integro e ancora montabile / recuperabile
  • Il disco faceva parte di un raid software 1 su Ubuntu 12.04
  • L'altro disco nel raid originale 1 è stato formattato e utilizzato per un altro scopo, lasciando il disco corrente (quello in questione) ancora tecnicamente parte di un raid che non esiste più

Quello che ho già provato

  • Montaggio base

    • Ho aggiunto una voce a fstab, contrassegnato il disco come ext3 / ext4 e ho provato a montare.
    • Al montaggio appare il seguente errore

      wrong fs type, bad option, bad superblock on

    • E in dmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • Ho provato a trovare il tipo di file system del disco e ho trovato

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

Dove ho bisogno di aiuto / Le mie domande

  • C'è un modo per convertire il disco in ext4 senza danneggiare i dati?
  • Esiste un modo semplice per montare il disco del tipo di file Linux 83 e recuperare i dati?
  • Ho un altro disco attualmente libero nel caso sia possibile ricostruire in qualche modo il raid
  • Il mio obiettivo principale è recuperare i dati dal disco. Sono aperto a tutte le opzioni.

Aggiornare

Uscita di alcuni comandi

  • fdisk -l / dev / sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • file -s / dev / sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 / dev / sdc (Non sono sicuro se questo potrebbe aiutare o no)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    

Il problema è che la partizione pensa di avere un volume di raid su di essa e non un ext4fs. E il kernel ha ragione. Tuttavia, dato che si trattava di un raid 1, sembra essere un ext4fs. a mount -f ext4 /dev/sdc1 /mountpointdovrebbe fare il trucco.
Forzare

1
Il mount forzato non dà alcun errore, ma il punto di mount è vuoto. O i dati sono spariti o il montaggio non ha funzionato come previsto. Fare uno dfmi mostra che il disco appena montato è in uso al 2%, che è significativamente inferiore al previsto.
Adam,

@ user1129682, se mount dice che non è ext4, allora non lo è ... provare a forzare non aiuterà.
psusi,

@psusi: ha funzionato per me. La risposta di Gilles spiega perché funziona in alcune circostanze
Bananguin,

@Bananguin Non intendi mount -t ext4? Il flag -f è per il montaggio 'falso' (ubuntu 14.04).
Quantum7

Risposte:


11

Funziona in modo eccellente in Ubuntu 14.04:

sudo -i
mdadm --assemble --scan

Otterrete:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

Quindi montare e vedere i tuoi file:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

Stava ottenendo "esiste ma non è un array MD" su un disco rigido guasto che faceva parte di un array ... e questo ha funzionato meglio di tutti gli altri suggerimenti. Montato correttamente, occupato a copiare subito i dati.
Zayne S Halsall,

questa opzione ha funzionato bene per me. 2 SSD Intel in RAID1. Ne ha estratto uno e rimosso la porta SATA sul PC che esegue suse linux. Inizialmente si presenta come solo /dev/sdce come /dev/md127. Poi ha mdadm --assemble --scanche ha provocato /dev/md/Volume0_0p1e /dev/md/Volume0_0p2ecc corrispondente a 4 partizioni che erano sul disco. P2 era quello di cui avevo bisogno: mkdir /p2 seguito da mount /dev/md/Volume0_0p2 /p2montarlo che era EXT3 e posso facilmente accedere e copiare i dati. Lo ha anche montato come lettura-scrittura.
Ron,

mi hai reso felice! Grazie!
Gooshan,

a volte la --scanmodalità non avvia le matrici con dischi mancanti, nel mio caso qui ho dovuto interrompere la matrice mdadm --assemble --force /dev/md/1 /dev/sdc1
autoassemblata

7

Linux mdraid ha diversi formati di metadati . I formati 0.9 e 1.0 inseriscono i metadati alla fine del dispositivo contenitore e il payload (il filesystem) inizia all'inizio del dispositivo ed è possibile accedervi direttamente senza passare attraverso il layer raid. I formati 1.1 e 1.2 mettono rispettivamente i metadati al centro e all'inizio del dispositivo di contenimento, quindi il payload è in offset.

Il programma di installazione di Ubuntu crea volumi con il formato di metadati 1.2, quindi i tuoi dati iniziano dopo i metadati anziché all'inizio del dispositivo.

Il modo più semplice per accedere a quei dati è assemblare il dispositivo raid. In un volume RAID-1, è sufficiente un singolo dispositivo.

madadm -A /dev/sdc1

(Fermati qui se non ti piace il dolore.)

È inoltre possibile accedere ai dati con un offset. L'unico punto che posso vedere per fare questo è se devi lavorare in un kernel molto vecchio che non supporta i formati mdraid 1.x. Innanzitutto, determina l'offset mdadm -E /dev/sdc1: cerca la linea Data Offset : SSS sectors. Un settore mdadm è di 512 byte.

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1

Nella disperazione, con i formati 1.x, l'offset dei dati viene archiviato in byte 128-135 dei metadati, little-endian¹. 1.2 metadati sono 4096 byte dopo l'inizio del dispositivo.

È inoltre possibile modificare la tabella delle partizioni per avviarla ulteriormente. Stai molto attento con la tua aritmetica. Fallo solo se vuoi continuare a usare il disco a lungo termine in un vecchio sistema che non può accedere al dispositivo raid.

¹ O con endianness della piattaforma? Non ne sono sicuro.


i dati possono iniziare con diversi offset (vedi mdadm -E /dev/sdc1dove esattamente) ma certamente non a 4k per 1,2 metadati, poiché 4k è esattamente dove sono memorizzati i metadati. Vedi anche unix.stackexchange.com/q/57477/22565
Stéphane Chazelas

@StephaneChazelas Oops, sì, scoreggia cerebrale. Grazie.
Gilles 'SO- smetti di essere malvagio' il

3
mdadm -A /dev/sdc1uscite mdadm: device /dev/sdc1 exists but is not an md array.Sono andato un po 'oltre per usare mdadm e vedere se ci sono informazioni aggiuntive ... mdadm --misc --examine /dev/sdc1uscite mdadm: No md superblock detected on /dev/sdc1.. C'è un modo in cui posso riscrivere i superblocchi su questo disco per contrassegnarlo come disco disponibile per l'assemblaggio RAID?
Adam,

@Gilles A mdadm -E /dev/sdcrestituisce quanto segue per me: /dev/sdc: MBR Magic : aa55 Partition[0] : 1953520002 sectors at 63 (type 83) ma nessuna informazione per / dev / sdc1 però
Adam

1
@Adam Se mdadm non riesce a trovare i suoi metadati non c'è niente che tu possa fare lì: non puoi costringerlo a fare qualcosa poiché non sa cosa fare. Devi cercare un filesystem e se i consigli di psusi non portano da nessuna parte, le prospettive sono desolate. Forse un dump esadecimale dei primi pochi kilobyte del disco potrebbe ispirare qualcuno (attenzione che potrebbe esporre alcuni dati riservati).
Gilles 'SO- smetti di essere malvagio' il

5

Con mia sorpresa, sono stato / sono in grado di recuperare i dati semplicemente usando innanzitutto .

L'aiuto ricevuto qui è stato prezioso. Dopo aver provato una varietà di combinazioni suggerite, così come i miei mix-in, il metodo ideale (per montare e usare il disco normalmente) non sembrava più un'opzione. Ricorrere al recupero dei dati è la mia soluzione in questo caso.


Mi rendo conto che era passato un po 'di tempo! Ma ti ricordi se sei stato in grado di usare prima di tutto senza montare la partizione?
PhillipOReilly,

Mi dispiace, non ricordo più i dettagli di questo. : /
Adam

3

Sembra che tu abbia già distrutto il superblocco mdadm. Se era lì ed era in formato 1.1 o 1.2, molto probabilmente il filesystem si trova in offset 2048 settori. È possibile eseguire e2fsck /dev/sdc1?offset=2048per forzarlo a cercare il filesystem a partire da tale offset. Se lo trova, puoi modificare la tabella delle partizioni in modo che indichi dove inizia effettivamente il filesystem. È possibile utilizzare parted /dev/sdce il unit scomando per utilizzare unità di settori. printla tabella, notare il settore iniziale e finale, quindi rmla partizione, quindi ricrearla con mkparte utilizzare lo stesso settore finale, ma aggiungere l'offset al settore iniziale.

Se il 2048 non funziona, potresti provare anche il 1985.


Esecuzione di e2fsck /dev/sdc1?offset=2048output (ho anche eseguito offset = 1985) Bad magic number..Superblock invalid...oltre a suggerire che il superblocco sia corrotto e provare a eseguire e2fsck con un superblocco alternativo. Sembra che dovrei fornire un superblocco alternativo per andare avanti.
Adam,

@Adam, no, devi solo ottenere l'offset corretto. testdiskdovrebbe essere in grado di eseguire una scansione dettagliata e correggere la tabella delle partizioni per te.
psusi,

testdiskè un territorio completamente nuovo per me. Uno spettacolo di base (Analizza) No ext2, JFS, Reiser.. marker. Bad relative sector. No partition is bootable.Fornisce inoltre quanto segue: 1 P Linux 0 1 1 121600 254 63 1953520002Come posso dare un senso a quello per aiutare la situazione?
Adam,

@Adam, non l'ho mai usato da solo, so solo che dovrebbe essere in grado di cercare e trovare il superblocco. L'hai eseguito su tutto il disco, non sulla partizione, giusto?
psusi,

Dopo aver eseguito un'analisi su tutto il disco, non è stata rilevata alcuna partizione. Attualmente eseguo una scansione approfondita ora. Se questo non presenta nulla, non sono sicuro di dove andare da qui.
Adam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.