Como particionar uma partição NTFS em um disco menor sem ter espaço para a imagem completa

0

De vez em quando, tenho o seguinte problema:

Um disco falha e o disco de substituição é menor. Os dados geralmente se ajustam facilmente ao disco menor, mas o partclone simplesmente não reduz o sistema de arquivos para corresponder ao tamanho menor da partição.

Você pode simplesmente criar uma imagem de todo o disco em sua unidade temporária e depois encolher. Mas se não houver espaço suficiente?

    
por JPT 13.10.2018 / 20:04

1 resposta

1

Não funciona ainda a partir do ponto 16 em diante. Talvez porque houve um dispositivo de loop obsoleto que eu não deletei.

partclone despejo bruto em imagem esparsa

Esta solução é perigosa para seus dados. Apenas tente se você entender o que está fazendo e estiver familiarizado com dd e dispositivos. Não serei responsável por qualquer perda de dados.

Antes de começarmos:

  • Não use este procedimento para espelhar um disco que esteja fisicamente danificado porque

    • partclone precisa de um sistema de arquivos saudável para funcionar em

    • este procedimento é muito mais complexo do que fazer dd , então você provavelmente terá que repeti-lo várias vezes até conseguir - trazendo mais pressão sobre o disco quebrado

    • para discos quebrados, você deve usar safecopy porque dd é anulado em setores defeituosos

  • Você precisa de até 2 x de espaço livre em tamanho de dados em sua unidade temporária.

  • Eu inserirei sdXX para qualquer comando que possa destruir dados se você esquecer de personalizar o comando. Isso não lida com loops, portanto, certifique-se de NÃO usar outros dispositivos de loop durante o processo a seguir para evitar a substituição acidental de dados valiosos.

  • Se você falhar em algum lugar e excluir a imagem, primeiro desmonte qualquer coisa apontando para ela e, em seguida, remova os dispositivos de loop: kpartx -dv <image> . Isso pode causar grandes problemas se você usar dispositivos de loop errados! Acredito que meu problema seja causado por um dispositivo de loop obsoleto ...

  • Encontre correções para problemas comuns no final desta resposta.

Vamos

  1. obtenha o tamanho do disco do seu disco de origem

    sudo fdisk -l /dev/sda
    output: Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
    
  2. leia o layout original da partição na imagem

    sudo dd if=/dev/sda of=sparse.img bs=1M count=1
    
  3. preencha a imagem com "nada" até o tamanho acima. - Isto não terá espaço no disco.

    sudo dd if=/dev/zero of=sparse.img bs=1 count=0 seek=500107862016
    
  4. verifique se não há outros dispositivos de loop ativos - se a saída não estiver vazia, veja a seção de resolução de problemas

    losetup -l -a 
    
  5. verifique se o layout da partição é o mesmo da unidade de origem

    fdisk -l sparse.img
    
  6. crie dispositivos de loop para acessar as partições na imagem

    sudo kpartx -av sparse.img 
    output: add map loop0p1 (253:0): 0 976771072 linear 7:2 2048
    
  7. leia os dados na imagem usando partclone - isso aumentará o uso de espaço por "tamanho dos dados" mais "sobrecarga".

    sudo partclone.ntfs -s /dev/sda1 -o /dev/mapper/loop0p1 -b -L sparse.log
    
  8. remova a unidade de origem para salvá-la

  9. reduzir usando gparted - deve ser pelo menos 10% menor que o disco alvo

    • crie links porque gparted não entende os devs kpartx criados.

      ln -s /dev/mapper/loop0p1 sparse.img1
      
    • use gparted para reduzir a partição

      sudo gparted sparse.img
      
  10. alternativamente, você pode diminuir usando ntfsresize , mas também precisa diminuir a partição.

    • obtenha o tamanho mínimo

      sudo ntfsresize -i /dev/mapper/loop0p1
      
    • teste redimensionar

      sudo ntfsresize -n -s 100G /dev/mapper/loop0p1
      
    • redimensionamento real - isso aumentará o uso do espaço em até "tamanho dos dados"

      sudo ntfsresize -s 100G /dev/mapper/loop0p1
      
    • TODO: reduza a partição

  11. (desnecessário porque encolhido não ampliado?) excluir e recriar os dispositivos de loop porque o tamanho da partição mudou

    sudo kpartx -dv sparse.img 
    sudo kpartx -av sparse.img 
    
  12. (opcional) TODO trunca a imagem

  13. verifique usando ntfsresize - para mim isso dá uma resposta OK

    sudo ntfsresize -i /dev/mapper/loop0p1
    
  14. insira a unidade de destino - verifique novamente se você inseriu a unidade correta

  15. (não funciona porque ntfsresize marcou o fs sujo) partclone da imagem para a nova unidade

    sudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
    
  16. em vez disso, dd da imagem para a nova unidade - não fornece um tamanho ou é 10% acima do tamanho da partição reduzida

    sudo dd if=sparse.img of=/dev/sdXX
    
  17. verifique usando ntfsresize - FALHA para mim, isso não deve acontecer, pois a imagem foi OK e criamos uma cópia idêntica da imagem !!!

    sudo ntfsresize -i /dev/sda1
    
  18. excluir dispositivos de loop

    sudo kpartx -dv sparse.img
    
  19. exclua todos os dispositivos de loop que não foram removidos de forma limpa - se ainda persistirem, reinicie ou pesquise na web sobre isso.

    sudo losetup -D 
    
  20. Finalmente, você deve tentar inicializar o disco e executar o Windows chkdsk / f . Depois disso, use gparted para expandir a partição para seu tamanho total.

Solução de problemas:

  • Se ntfsresize ou gparted não puder acessar a imagem: exec chkdsk /f das janelas no disco de origem. NÃO use ntfsfix . Qualquer verificador de NTFS para Linux?

  • Se kpartx não puder criar os dispositivos de loop: verifique com losetup e exclua os não usados.

  • Se você quiser se livrar de dispositivos de loop obsoletos, exclua com sudo losetup -d ou pesquise na Web.

por 13.10.2018 / 20:04