
Meu objetivo é criar um backup inicializável do meu sistema sem reiniciar, usarei qemu-img para converter uma imagem dd bruta em vhdx e executá-la no Hyper-V.
Se eu inicializar em um liveCD e executar:
dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc
Posso convertê-lo em um vhdx e executá-lo diretamente no Hyper-V sem muito esforço.
saída fdisk -l:
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7555D04B-D6DC-4ABB-8863-529E874BADAD
Device Start End Sectors Size Type
/dev/sda1 2048 2000895 1998848 976M EFI System
/dev/sda2 2000896 500117503 498116608 237.5G Linux filesystem
No entanto, você não pode usar esse comando enquanto o sistema estiver online, então estou usando o driver dattobd para copiar todo o meu sistema de arquivos ext4 assim:
dd if=/dev/datto0 of=/nfs/sda2.raw bs=1M
Isso copia efetivamente todos os dados /dev/sda2
corretamente, verifiquei isso porque o hash é o mesmo se eu usar o liveCD e dd a /dev/sda2
partição. Agora posso inicializar em um liveCD e copy /dev/sda1
, essa é a partição EFI, então ela não muda com muita frequência, a menos que eu atualize o grub ou algo relacionado ao kernel do Linux, estou bem em reiniciar apenas para fazer backup dessa partição de vez em quando, mas se alguém sabe uma maneira de fazer isso online, por favor me diga.
Agora que tenho /dev/sda1
e /dev/sda2
em dois arquivos separados, minha pergunta é como posso montar esses dois em um único arquivo que forneceria essencialmente a mesma saída que a execução dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc
em um liveCD? Você precisaria apenas alinhar os bytes perfeitamente? Eu procurei por isso em todos os lugares e sem sorte. Qualquer ajuda é muito apreciada!
Responder1
Você pode montar em loop a imagem de todo o disco com suporte de partição e, em seguida, colocar dd
a imagem atualizada dentro dela:sda2
losetup -P /dev/loop0 /nfs/sda.raw #this will create /dev/loop0p1 and loop0p2
dd if=/nfs/sda2.raw of=/dev/loop0p2
losetup -d /dev/loop0
Alternativamente, sua tabela de partições indica que sua primeira partição começa no setor #2048, então seu disco tem 2048 * 512 bytes = 1 MiB de espaço antes da primeira partição ("cabeça") e 500118192 - 500117503 - 1 = 688 setores (344 kiB) de espaço no final ("cauda") fora de qualquer partição. ( -1 porque o primeiro setor é #0, não #1)
A primeira partição termina no setor #2000895 e a segunda começa em #2000896, portanto não há espaço não utilizado entre elas.
Você está usando a tabela de partição GPT, que inclui uma cópia de backup da tabela de partição no final do disco, portanto, a parte "final" também será necessária para capturar. Começa no setor #500117504 e continua até o final do disco.
Assim, você poderia capturar o conteúdo das partes "cabeça" e "cauda" separadamente e depois juntar tudo:
dd if=/dev/sda of=/nfs/head.raw bs=512 count=2048
dd if=/dev/sda of=/nfs/tail.raw bs=512 skip=500117504
cat /nfs/head.raw /nfs/sda1.raw /nfs/sda2.raw /nfs/tail.raw > /nfs/sda.raw
A menos que você modifique a tabela de partição, você precisará capturar as partes "inicial" e "final" apenas uma vez: elas não devem ser alteradas durante o uso normal do sistema.