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
porquedd
é 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
-
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
-
leia o layout original da partição na imagem
sudo dd if=/dev/sda of=sparse.img bs=1M count=1
-
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
-
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
-
verifique se o layout da partição é o mesmo da unidade de origem
fdisk -l sparse.img
-
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
-
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
-
remova a unidade de origem para salvá-la
-
reduzir usando
gparted
- deve ser pelo menos 10% menor que o disco alvo-
crie links porque
gparted
não entende os devskpartx
criados.ln -s /dev/mapper/loop0p1 sparse.img1
-
use
gparted
para reduzir a partiçãosudo gparted sparse.img
-
-
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
-
-
(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
-
(opcional) TODO trunca a imagem
-
verifique usando
ntfsresize
- para mim isso dá uma resposta OKsudo ntfsresize -i /dev/mapper/loop0p1
-
insira a unidade de destino - verifique novamente se você inseriu a unidade correta
-
(não funciona porque
ntfsresize
marcou o fs sujo)partclone
da imagem para a nova unidadesudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
-
em vez disso,
dd
da imagem para a nova unidade - não fornece um tamanho ou é 10% acima do tamanho da partição reduzidasudo dd if=sparse.img of=/dev/sdXX
-
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
-
excluir dispositivos de loop
sudo kpartx -dv sparse.img
-
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
-
Finalmente, você deve tentar inicializar o disco e executar o Windows
chkdsk / f
. Depois disso, usegparted
para expandir a partição para seu tamanho total.
Solução de problemas:
-
Se
ntfsresize
ougparted
não puder acessar a imagem: execchkdsk /f
das janelas no disco de origem. NÃO usentfsfix
. Qualquer verificador de NTFS para Linux? -
Se
kpartx
não puder criar os dispositivos de loop: verifique comlosetup
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.