Obtendo arquivos fora do XFS com tamanho de bloco de 64kb

10

Eu estive em uma missão para recuperar arquivos de um dos meus 2 NAS perfeitamente funcionando, não corrompidos, não criptografados que costumavam estar em RAID 1. O NAS era Patriot Javelin S4, que (como eu encontrei da minha pesquisa) usa Promise Fasttrack falso controlador raid.

As informações são muito escassas, então, para os googlers na mesma situação, aqui estão alguns fatos sobre este NAS:

  • Controlador RAID: Promise FastTrack (FakeRaid)
  • Sistema de volume: LVM2
  • Sistema de arquivos: XFS com tamanho de bloco de 64kb (65536 bytes)
  • Arch: processador AMPC PowerPC de 800 MHz, 256 MB de RAM (graças à pesquisa de Matthew)

Eu só tinha o Windows 10 e MacOS ao fazer isso, e não encontrei nenhum software capaz de montar o XFS no volume LVM2 (com 1 exceção, mais sobre isso abaixo). Eu tive que pegar meu velho netbook Acer Aspire One, e instalar o filhote de cachorro linux nele (especificamente sabor lxpup).

No puppy linux eu consegui montar este sistema de arquivos usando uma ferramenta chamada dmraid . Esta ferramenta tem uma maneira de montar um volume pdc, que é o seu id para Promise FastTrack. Uma vez que consegui passar por alguns obstáculos, consegui acesso ao sistema de arquivos XFS, e para meu espanto, ele se tornou um tamanho de bloco de 64kb.

Foi aí que comecei a pesquisar coisas como "leia o tamanho do bloco xfs de 64kb" e não chegue a lugar algum. Apenas algumas respostas que dizem: "o linux não pode ler tamanhos de bloco maiores que 4kb, a menos que você corrija o kernel". Eu não tenho idéia de como corrigir o kernel, e estou confuso que não há nenhum tipo de emulação para permitir isso.

Mencionei uma exceção entre aplicativos que não podem ler essa partição no Win / Mac. Essa exceção foi ufsexplorer. É um aplicativo de US $ 100, foi capaz de me mostrar os arquivos sem problemas. Eu copiei alguns arquivos provando que isso funciona, mas a versão de teste permite apenas copiar arquivos minúsculos.

Eu me recuso a acreditar que não existe uma ferramenta gratuita de código aberto disponível em qualquer nível de complexidade que não possa me ajudar a ler 64kb xfs.

A minha pergunta é: alguém conhece alguma dessas ferramentas? Quaisquer instruções específicas sobre como obter os dados usando uma ou mais ferramentas, ou correção de kernel, ou qualquer outra coisa (grátis) são muito apreciadas.

Mais um ponto: eu preferiria não ter que criar imagens locais dessas unidades (a menos que seja o único caminho). Afinal, são 2 TB de dados, posso não ter muito espaço.

P.S. Se existe um linux conhecido que eu possa instalar no meu Acer e que possa ler 64kb xfs, também é uma solução viável.

Atualização 1 : Acabei de saber sobre o link . Pode valer a pena um tiro. Relatará quando eu tiver tempo para experimentá-lo.

Atualização 2 : TestDisk parece estar reconhecendo a presença da partição XFS, mas não tenho certeza de como proceder lá. Eu não vejo uma maneira de extrair um arquivo, então eu o abandonei por enquanto, e tentei a abordagem qemu na resposta de Matthew.

    
por Max Chernyak 29.05.2017 / 16:53

1 resposta

8

Eu fiz um pouco de pesquisa sobre o seu problema. Não é fácil, mas parece viável.

A área de código que quebra você é essa (bem, em novos kernels): 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         }

Basicamente, requer que o tamanho do bloco XFS seja pelo menos igual ao tamanho da página do sistema.

Isso significa duas coisas.

  1. Esta é uma solução alternativa de um bug anteriormente desconhecido.
  2. O tamanho da página do sistema era originalmente de 64k.

Eu fui e verifiquei um kernel realmente antigo (EL4) e a restrição acima ainda estava lá. Isso significa que fundamentalmente não é viável fazer o que você deseja fazer em sua arquitetura (x86).

Dado que você forneceu o nome do NAS, fiz algumas pesquisas e descobri isso: link

O que implica que usa uma CPU PPC.

The hardware of the Javelin is more than capable of handling additional roles. It is essentially an embedded Linux system with a 800 MHz AMCC PowerPC processor and 256 MB of RAM.

De fato, os kernels PowerPC podem ser construídos para usar 64k páginas ou 4k páginas. Isso explicaria porque o bloco é 64k e também porque você não pode executar o sistema de arquivos em sua máquina, onde ele trabalhou em seu próprio NAS antes.

Se você quer tentar abrir o sistema de arquivos - eu acho que sua melhor opção é rodar uma instância de máquina virtual em um hipervisor usando PPC64LE (acho que é a arquitetura real daquela CPU), o Fedora constrói seu PPC64LE com 64k páginas .

link

Você pode usar o qemu para fazer isso. Esse cara parece dar algumas instruções (não testadas) sobre como você faria isso.

link

A partir daí, exponha diretamente o (s) disco (s) na VM e faça o seu dmraid / lvm / mount normal para obter acesso à unidade.

    
por 01.06.2017 / 14:34