Ottenere file da XFS con blocchi di 64kb


9

Sono stato in missione per recuperare i file da una delle mie 2 unità NAS perfettamente funzionanti, non corrotte e non crittografate che erano in RAID 1. Il NAS era Patriot Javelin S4, che (come ho scoperto dalla mia ricerca ) utilizza il controller di raid falso Promise Fasttrack.

Le informazioni sono molto scarse su questo, quindi per i googler nella stessa situazione qui ci sono alcuni fatti su questo NAS:

  • Controller RAID: Promise FastTrack (FakeRaid)
  • Sistema di volume: LVM2
  • File system: XFS con blocchi di 64kb (65536 byte)
  • Arch: processore AMPC PowerPC a 800 MHz, 256 MB di RAM (grazie alla ricerca di Matthew)

Avevo solo Windows 10 e MacOS mentre facevo questo e non ho trovato nessun software in grado di montare XFS nel volume LVM2 (con 1 eccezione, più su questo sotto). Ho dovuto estrarre il mio vecchio netbook Acer Aspire One e installare il cucciolo Linux su di esso (in particolare il sapore lxpup).

Su Puppy Linux sono riuscito a montare questo file system usando uno strumento chiamato dmraid. Questo strumento ha un modo per montare un volume pdc, che è il suo id per Promise FastTrack. Una volta che sono riuscito a saltare attraverso alcuni cerchi montandolo, ho ottenuto l'accesso al file system XFS reale e, con mio grande sgomento, si è rivelato essere una dimensione del blocco di 64kb.

È qui che ho iniziato a cercare su google cose come "leggi la dimensione del blocco xfs 64kb" e non ho trovato nulla. Solo poche risposte che dicono: "Linux non può leggere blocchi di dimensioni superiori a 4kb, a meno che non si patch il kernel". Non ho idea di come patchare il kernel e sono sconcertato dal fatto che non ci sia alcun tipo di emulazione che lo consenta.

Ho citato 1 eccezione tra le app che non sono in grado di leggere questa partizione su Win / Mac. Quell'eccezione era ufsexplorer. È un'app da $ 100, è stata in grado di mostrarmi perfettamente i file. Ho copiato alcuni file dimostrando che funziona, ma la versione di prova consente solo di copiare piccoli file.

Mi rifiuto di credere che non ci sia uno strumento open source gratuito là fuori di qualsiasi livello di complessità che non può aiutarmi a leggere 64kb xfs.

La mia domanda è: qualcuno conosce uno di questi strumenti? Qualsiasi istruzione specifica su come ottenere i dati utilizzando uno o più strumenti, patching del kernel o qualcos'altro (gratuito) è molto apprezzata.

Un altro punto: preferirei non dover creare immagini locali di queste unità (a meno che non sia l'unico modo). Dopotutto, sono 2 TB di dati, potrei non avere così tanto spazio.

PS Se esiste un Linux noto che posso installare sul mio Acer in grado di leggere 64kb xfs, anche questa è una soluzione praticabile.

Aggiornamento 1 : ho appena appreso su https://www.cgsecurity.org/wiki/TestDisk . Potrebbe valere la pena di un colpo. Riporterò una volta che ho avuto il tempo di provarlo.

Aggiornamento 2 : TestDisk sembra riconoscere la presenza della partizione XFS, ma non sono sicuro di come procedere lì. Non vedo un modo per estrarre un file, quindi per ora l'ho abbandonato e ho provato l'approccio qemu nella risposta di Matthew.


Vedo due soluzioni, costruisco il tuo kernel personalizzato o creo
Alexander Tolkachev,

@AlexanderT Ciao, grazie per aver risposto. Qualche link sul kernel personalizzato? Inoltre, c'è forse un modo per clonare l'unità nell'unità del mio mac durante la conversione al volo del filesystem? E per essere chiari: l'unità NAS è collegata tramite SATA -> convertitore USB, quindi posso collegarla direttamente a Windows o Mac senza creare un'immagine.
Max Chernyak,

Prova a vedere se xfsdump aiuta.
Martian,

> si è rivelato essere una dimensione del blocco di 64kb. Informati su come sei arrivato a questa conclusione, per favore
poige

1
Vedo. Bene, la cosa che vorrei fare per essere nei tuoi panni è scrivere nella corrispondente mail list: xfs.org/index.php/XFS_email_list_and_archives
poige

Risposte:


8

Ho fatto un po 'di ricerche sul tuo problema. Non facile ma sembra fattibile.

L'area di violazione del codice è questa (beh, nei kernel più recenti): fs/xfs/libxfs/xfs_sb.c

271         /*
272          * Until this is fixed only page-sized or smaller data blocks work.
273          */
274         if (unlikely(sbp->sb_blocksize > PAGE_SIZE)) {
275                 xfs_warn(mp,
276                 "File system with blocksize %d bytes. "
277                 "Only pagesize (%ld) or less will currently work.",
278                                 sbp->sb_blocksize, PAGE_SIZE);
279                 return -ENOSYS;
280         }

Praticamente richiede che la dimensione del blocco XFS sia almeno uguale alla dimensione della pagina del sistema.

Questo significa due cose.

  1. Questa è una soluzione alternativa a un bug precedentemente sconosciuto.
  2. La dimensione della pagina del sistema era originariamente di 64k.

Sono andato a controllare un kernel davvero vecchio (EL4) e quella restrizione sopra era ancora lì. Ciò significa che fondamentalmente non è possibile fare ciò che si desidera fare sulla propria architettura (x86).

Dato che hai fornito il nome del NAS, ho fatto un po 'di googling e l'ho scoperto: http://www.techwarelabs.com/patriot-javelin-s4-network-attached-storage/2/

Ciò implica che utilizza una CPU PPC.

L'hardware del Javelin è più che in grado di gestire ruoli aggiuntivi. È essenzialmente un sistema Linux incorporato con un processore PowerPC AMCC a 800 MHz e 256 MB di RAM.

In effetti, sui kernel PowerPC può essere creato per utilizzare 64k pagine o 4k pagine. Questo spiegherebbe perché il blocco è 64k e anche perché non è possibile eseguire il filesystem sul proprio computer, dove prima funzionava sul proprio NAS.

Se vuoi provare ad aprire il filesystem - penso che la tua migliore opzione sia quella di eseguire un'istanza di macchina virtuale in un hypervisor usando PPC64LE (penso che sia l'architettura reale di quella CPU), Fedora costruisce il suo PPC64LE con 64k pagine.

https://alt.fedoraproject.org/alt/

Puoi usare qemu per farlo. Questo ragazzo sembra dare alcune istruzioni (non testate) su come faresti per farlo.

https://rwmj.wordpress.com/tag/ppc64le/

Da lì, esporre direttamente i dischi nella VM ed eseguire normalmente dmraid / lvm / mount per accedere all'unità.


Riferirò non appena avrò tempo di esaminare l'approccio qemu. Sembra molto fiducioso, apprezza il tempo che hai dedicato a questo Matthew.
Max Chernyak,

Al momento sono impegnato a cercare di correre virt-builder fedora-25 --arch ppc64le -o fedora-25-ppc64le.img. Sono su Puppy Linux e ricevo "supermin: impossibile rilevare il gestore pacchetti utilizzato da questo sistema o dalla distribuzione".
Max Chernyak,

Usa una distro fedora per farlo.
Matthew Ife,

Non ho ancora avuto la possibilità di finire questo tentativo, ma ti sto dando la generosità. Spero di poter ancora dare seguito mentre ci sto lavorando.
Max Chernyak,

@hakunin Sono stato in grado di formattare e montare un filesystem xfs 64kb in un'architettura ppc64le come ti ho suggerito di fare all'inizio di questa settimana, quindi so che funzionerà.
Matthew Ife,
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.