Independentemente de se --output-position
é a opção ddrescue
correta ou não, apresento o modo geral do Linux de concatenar dois arquivos sem gravar o resultado no disco.
A ferramenta é dmsetup
. Está no pacote dmsetup
no meu Kubuntu, o mesmo no Debian.
Temos begin.raw
do tamanho 32256 B
e fixed.vdi
correspondente à partição do tamanho <X>
(sobre 500 GB
, o valor exato desconhecido para mim). Precisamos expressar os tamanhos em 512 B
unit; os resultados são 63
e <Y>
, respectivamente. No código abaixo, você precisa substituir <Y>
pelo valor computado, portanto, não copie e cole sem pensar.
# Creating loop devices and storing their names.
BEGIN_LOOP=$(sudo losetup -f --show begin.raw)
FIXED_LOOP=$(sudo losetup -f --show fixed.vdi)
# Creating a map to feed to 'dmsetup' later.
# !!! REPLACE <Y> WITH THE PROPER VALUE !!!
echo "0 63 linear $BEGIN_LOOP 0" > whole.map
echo "63 <Y> linear $FIXED_LOOP 0" >> whole.map
# Creating a concatenated "file".
sudo dmsetup create whole.raw < whole.map
ln -s /dev/mapper/whole.raw
Agora você pode usar whole.raw
como uma imagem de todo o disco, enquanto ddrescue
ainda pode funcionar com fixed.vdi
. Cada operação de E / S em whole.raw
será mapeada para begin.raw
e fixed.vdi
.
Observe que esse mapeamento não é persistente. Após a reinicialização, é necessário repetir todo o procedimento, exceto ln -s
.
Para limpar esta configuração sem reiniciar, invoque:
rm whole.raw # removes the symlink
sudo dmsetup remove whole.raw # removes /dev/mapper/whole.raw
sudo losetup -d $FIXED_LOOP # removes /dev/loop1 (or so)
sudo losetup -d $BEGIN_LOOP # removes /dev/loop0 (or so)
Se você perder as variáveis de alguma forma (por exemplo, fechando o emulador de terminal), examine a saída de losetup -a
e faça sudo losetup -d /dev/loopX
de acordo.