LUKS의 LVM에서 ext4의 파일 1개 삭제 취소

LUKS의 LVM에서 ext4의 파일 1개 삭제 취소

일반화하다

파일이 삭제되기 전에 파일의 정규화된 경로를 알고 있는 경우 LUKS 컨테이너 내부의 LVM 볼륨 내부에 있는 ext4 파일 시스템의 파일을 어떻게 (비교적 쉽고 안정적으로) {복구, 삭제 취소}합니까? (잘못된 용어를 사용한 경우 미리 사과드립니다. 필요한 경우 수정해 주세요.)

세부 사항

좋은 소식은 쉽게 복원할 수 없는 파일(예: 백업)을 실수로 삭제한 지 몇 년이 지났다는 것입니다. 몇 가지 정밀도 용어를 정의합니다.

  • 내 파일에 전화하세요. {삭제됨, 복구 요청}target file
  • 이전에 대상 파일이 있던 디렉터리/폴더를 호출합니다.target dir
  • 호출 파티션 {대상 파일이 있던 곳과 대상 파일을 복원하려고 하는 곳}target partition

나쁜 소식은,

  • 지난번에는 대상 파티션이 "단순 ext4"였습니다. 즉, 암호화나 기타 관리가 없었습니다.
  • LVM2_crypt-home이번에 대상 파티션은 다음 표에서 이름이 =인 파티션입니다 lsblk.

    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
    

다음 명령을 사용하여 단순 파티션에서 파일을 복구하는 방법을 기억하는 것 같습니다.확장 삭제: 아래 절차를 참조하세요. 내가 알고 싶은 것은

  1. 관리 + 암호화 파티션에 대해 동일하거나 유사한 프로세스가 작동합니까? 그렇지 않다면 무엇을 추가, 수정, 삭제해야 합니까?
  2. extundelete이 사용 사례에 대해 (보다) 더 안정적인 도구가 있습니까? 그렇다면 이 사용 사례의 절차는 무엇입니까?

간단한 파티셔닝 프로세스

내 마지막 절차 - "간단한" ext4 파티션의 경우 - extundelete다음 (bash) 예제를 사용했습니다.

  1. 독서 info extundelete와 (너무 빈약함)문서 삭제 확장(제목 = 까지 아래로 스크롤 Documentation). 복구 등 여기에 표시된 것 이외의 사용 사례도 처리할 수 있습니다.모두파티션에서 파일을 삭제합니다.
  2. 대상 파일 지정:

    1. 정규화된 경로를 정의하고 TARGET_FQP기억하세요.아니요사용 ~:

      # CHANGE FOR YOUR USECASE!
      TARGET_FQP="${HOME}/video/greatest_movie_ever.mp4"
      echo "TARGET_FQP='${TARGET_FQP}'"
      
    2. 디렉터리/폴더를 정의합니다(대상 파일과 동일한(대상) 파티션에 있다고 가정합니다).

      TARGET_DIR="$(dirname "${TARGET_FQP}")"
      echo "TARGET_DIR='${TARGET_DIR}'"
      
    3. 파일 이름 정의(아래 사용)

      TARGET_FN="$(basename "${TARGET_FQP}")"
      echo "TARGET_FN='${TARGET_FN}'"
      
  3. 대상 디렉터리에서 대상 파티션 TARGET_PART과 해당 마운트 지점을 식별합니다.TARGET_MP

    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}'"
    
  4. 현재 작업 디렉터리(CWD)를 사용하여 원하는 터미널에서 원하는 쉘을 엽니다.

    • CWD가 대상이 아닌 다른 파티션에 있습니다. ( 파티션에 대한 정보를 얻으려면 원하는 도구를 사용하십시오. lsblk)fdisk
    • extundelete찾은 모든 파일(있는 경우)을 CWD 하위 디렉터리 name= 에 복원하므로 RECOVERED_FILES해당 이름의 파일이 이미 있으면 해당 파일을 이동하고 싶을 것 같습니다. (재정의하는 방법을 알고 계시다면 알려주세요. IIRC, --restore-directory실제로아니요이 작업을 수행. )
  5. 대상 파티션을 읽기 전용으로 다시 마운트합니다.

    mount --options remount,ro --source "${TARGET_PART}"
    
  6. 달리기 extundelete:

    date # because if this runs too long, you'll wanna give up
    extundelete --restore-file "${TARGET_FQP}" "${TARGET_PART}"
    
  7. 복구된 파일을 확인하세요.

    SAVED_RELPATH="./RECOVERED_FILES/${TARGET_FN}"
    echo '(hopefully) restored file @'
    ls -al "${SAVED_RELPATH}"
    
  8. 복구된 file@이 SAVED_RELPATH원하는 것이라고 가정하면 TARGET_PART읽기/쓰기를 다시 마운트하여 그곳으로 이동할 수 있습니다. 또는 (보통 그렇게 합니다)

    1. 복구된 파일을 외부 백업으로 이동
    2. 다음으로 PC를 다시 시작하세요.TARGET_PART
    3. 복구된 파일을 백업에서 다음으로 복사합니다.TARGET_DIR

귀하의 수정이나 개선을 환영합니다.

관련 정보