Como (de forma relativamente indolor e confiável) {restaurar, undelete} um arquivo de um sistema de arquivos ext4 dentro de um volume LVM dentro de um contêiner LUKS, dado que se conhece o caminho completo para o arquivo antes de ser deletado? (Desculpas antecipadas se eu estiver usando termos incorretos - por favor, corrija onde for necessário).
A boa notícia é que faz anos que eu acidentalmente excluí um arquivo que não era possível restaurar facilmente (por exemplo, de backup). Defina alguns termos para exatidão:
target file
target dir
target partition
A má notícia é que
Desta vez, a partição de destino é aquela com nome = LVM2_crypt-home
da seguinte lsblk
table:
NAME MAJ:MIN SIZE TYPE MOUNTPOINT
sda 8:0 465.8G disk
├─sda1 8:1 16.6G part
├─sda2 8:2 97.7G part
├─sda3 8:3 500M part /boot
├─sda4 8:4 1K part
└─sda5 8:5 351G part
└─LVM2_crypt 254:0 351G crypt
├─LVM2_crypt-swap 254:1 3.9G lvm
├─LVM2_crypt-root 254:2 20G lvm /
└─LVM2_crypt-home 254:3 327.1G lvm /home
Eu acredito que lembro como recuperar um arquivo de uma partição simples usando o extundelete : veja o procedimento abaixo. O que eu gostaria de saber é
extundelete
) para este uso? Em caso afirmativo, qual é o procedimento para este uso? Meu procedimento da última vez - para a partição "simples" do ext4 - use extundelete
como o exemplo a seguir (bash):
info extundelete
(e também muito pequeno) (role para baixo até o título = Documentation
). Observe que ele pode lidar com casos diferentes dos ilustrados aqui, por exemplo, restaurar todos arquivos excluídos de uma partição. Especifique o arquivo de destino:
defina seu caminho completo TARGET_FQP
, lembrando não para usar ~
:
# CHANGE FOR YOUR USECASE!
TARGET_FQP="${HOME}/video/greatest_movie_ever.mp4"
echo "TARGET_FQP='${TARGET_FQP}'"
defina seu diretório / pasta (que nós assumimos estar na mesma partição (destino) que o arquivo de destino):
TARGET_DIR="$(dirname "${TARGET_FQP}")"
echo "TARGET_DIR='${TARGET_DIR}'"
defina seu nome de arquivo (para uso abaixo)
TARGET_FN="$(basename "${TARGET_FQP}")"
echo "TARGET_FN='${TARGET_FN}'"
Identifique a partição de destino TARGET_PART
e seu ponto de montagem TARGET_MP
do seu diretório de destino:
TARGET_PART="$(df --output=source "${TARGET_FQP}" | tail -1)"
echo "TARGET_PART='${TARGET_PART}'"
TARGET_MP="$(df --output=target "${TARGET_FQP}" | tail -1)"
echo "TARGET_MP='${TARGET_MP}'"
Abra o seu shell de escolha (no seu terminal de escolha) com um diretório de trabalho atual (CWD) tal que
lsblk
, fdisk
ou sua ferramenta de escolha.) extundelete
irá restaurar qualquer arquivo que encontrar (se houver) para um nome de subdiretório CWD = RECOVERED_FILES
, então estou supondo que, se você já tiver um com esse nome, você deseja movê-lo. (Se você sabe como anular isso, por favor deixe-me saber. IIRC, --restore-directory
não não faça isso.) Remontar a partição de destino como somente leitura:
mount --options remount,ro --source "${TARGET_PART}"
Executar extundelete
:
date # because if this runs too long, you'll wanna give up
extundelete --restore-file "${TARGET_FQP}" "${TARGET_PART}"
Verifique o arquivo restaurado:
SAVED_RELPATH="./RECOVERED_FILES/${TARGET_FN}"
echo '(hopefully) restored file @'
ls -al "${SAVED_RELPATH}"
Supondo que o arquivo restaurado @ SAVED_RELPATH
é o que você quer, você pode remontar TARGET_PART
leitura / gravação e movê-lo para lá, ou (o que eu costumo fazer)
TARGET_PART
TARGET_DIR
Suas correções ou melhorias são bem-vindas.
Tags ext4 lvm luks extundelete