Deve ser fácil restaurar os LVs se eles não estiverem fragmentados (no nível LVM) e se forem volumes simples (lineares); pode funcionar também com o provisionamento thin, mas não estou familiarizado com isso. Você só precisa criá-los na mesma ordem e com o mesmo tamanho de antes.
Não estou familiarizado com testdisk
. Se lhe disser o tamanho dos volumes encontrados, você não precisará descobrir a si mesmo.
Isso ajuda a entender como o dmsetup
funciona. Um exemplo do meu sistema:
> dmsetup ls
[...]
linux2-test (254:4)
> dmsetup table linux2-test
0 106496 linear 8:8 384
Os primeiros 384 setores contêm os metadados do LVM. Se esse volume foi excluído, testdisk
deve mostrar um volume ext4
começando no setor 384. Em seguida, você pode configurar um dispositivo de mapeamento de dispositivo temporário:
> dmsetup create restore-lv-1 --table "0 100 linear 8:8 384" --readonly
O número de setores (100 neste exemplo) não é conhecido primeiro, então você pode escolher praticamente qualquer valor, mas não deve exceder o tamanho do dispositivo de bloco subjacente. Você pode usar um valor pequeno como 100, pois você só precisa do superbloco. Então você lê o tamanho do sistema de arquivos do dispositivo temporário:
> dumpe2fs -h /dev/mapper/restore-lv-1
dumpe2fs 1.41.14 (22-Dec-2010)
[...]
Block count: 53248
[...]
Block size: 1024
[...]
O tamanho do volume é 53248 * 1024 = 54525952, que é 106496 setores de 512 bytes. Se o sistema de arquivos cobriu todo o LV (o que geralmente é o caso), então este também é o tamanho do dispositivo. O deslocamento do próximo LV deve ser 106496 + 384 = 106880. Com esse deslocamento, você pode repetir esse processo.
Se você criar um novo LV, você deve verificar com dmsetup table
se ele tem o offset e comprimento esperados.