Mover os dados da partição com dd para a direita

2

Preciso de ajuda para obter uma linha de comando dd que está se movendo minha partição no sentido horário para a direita.

Eu tropecei em um erro ao usar ferramentas para criar imagens de alguns computadores e agora preciso reparticionar essas máquinas sem perder nenhum dado. Isso funciona muito bem com o gparted 0.18.0. Lá eu movo minha segunda partição para a direita com um deslocamento de 79MB. Então eu cresço minha primeira partição 79MB. Tudo está funcionando perfeitamente. Mas como há cerca de 35 máquinas, eu queria criar um script que fizesse isso.

O redimensionamento e tudo é muito fácil. O que não entendo na minha cabeça é a movimentação da partição para a direita. Basicamente eu preciso de uma linha de comando dd que faz isso. Meu pensamento é que eu preciso começar na parte de trás e trabalhar do meu jeito na frente. Então eu pensei:

  • if e de são a mesma partição (lembre-se já é crescido para ajustar os dados de deslocamento) / dev / sda2
  • os bs podem ser 16MiB, pois é isso que o gparted comparou
  • quais seriam os parâmetros que realizam a cópia da direita para a esquerda para que os dados não sejam sobrescritos

Eu conversei com o mantenedor do gparted e ele disse que dd é usado para conseguir isso. Mas não consigo descobrir como.

    
por Sebastian 04.04.2014 / 08:19

2 respostas

2

  • quais seriam os parâmetros que arquivam a cópia da direita para a esquerda para que os dados não sejam sobrescritos

Não existe, não há em um comando dd solution

Além disso, eu avisá-lo de usar dd para mover a partição, porque se algo falhar você não tem chances de restaurar os dados, sem backup, o que você fez antes dessa operação. Mas se você tiver backup, a operação é trivial. Então, isso foi disclaimer .

Agora, a maneira divertida (acho sua pergunta interessante). Eu não, movendo de partições dessa forma, mas pode funcionar, então prova de conceito no arquivo de teste:

perl -e 'foreach $i (0..1023) { printf "%0.7i\n", $i; }' >test.dat

apenas fazendo um arquivo de teste, para experimentos

Precisamos também do comando pv , que podem funcionar como buffer para nossos dados no formulário: pv -B buffer_size_in_bytes

dd if=test.dat | pv -B 1024 | dd of=test.dat seek=2

o tamanho padrão do bloco dd é de 512 bytes - nós mudamos os dados por 2 blocos dd, então o buffer em 1024 bytes é suficiente.

dd if=/div/sda bs=512*device block size* skip=111111*much blocks until sda2 begins*
| pv -B 90000000 *have_to_fit_shift size+*
| dd of=/div/sda seek=(blocks until sda2 begins + amount of blocks we shift that for)

depois disso, se tudo correu bem, precisa corrigir a tabela de partições.

mas provavelmente mais comum - seria mover dados com dd chunk por pedaço

dd if=/div/sda bs=1M count=100 skip=PosToRead seek=PosToWrite
PosToRead -= dd_count
PosToWrite -= dd_count
repeat if not done

também dd se movendo na direção oposta, interessante ao manipular o comando dd e determinar deslocamentos

    
por 04.04.2014 / 11:40
0

dd_rescue tem a opção -r para reverter a direção.

Exemplo de uso:

partition=/dev/vdc1
disk=/dev/vdc
sector_size=512
new_start_sector=4096
# opos is right after the new partition and given in bytes
opos=$(($new_start_sector * $sector_size + 'blockdev --getsize64 $partition'))
dd_rescue -v -r -S $opos $partition $disk

Depois, não esqueça de atualizar a tabela de partições. Não atualize antes!

    
por 04.06.2014 / 05:50