삭제되었지만 마운트된 루프 파일/파일 시스템 복구

삭제되었지만 마운트된 루프 파일/파일 시스템 복구

실수로 lxc 이미지 파일을 삭제했습니다. 컨테이너는 계속 실행 중이므로 컨테이너를 중지하기 전에는 파일이 실제로 삭제되지 않았습니다. 매우 민감하므로 컨테이너를 중지하지 않고 싶습니다.

다음 명령을 사용하여 삭제된 파일을 찾으려고 했지만 for i in $(ls /proc/|grep '^[0-9]*$'); do ls -l /proc/$i/fd|grep delete; done 루프 장치를 찾을 수 없습니다. 단순함과 동일lsof | vm-

삭제되지 않은 다른 이미지에 대해 lsof를 실행하면 해당 이미지를 사용하는 프로세스가 표시되지 않습니다 lsof /var/lib/vz/images/100/vm-100-disk-0.raw. 아마도 프로세스가 아닌 커널에 의해 열렸기 때문일 것입니다.

의견에서 제안한대로 :

# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                          DIO
/dev/loop1         0      0         1  0 /var/lib/vz/images/200/vm-200-disk-0.raw (deleted)   0
/dev/loop0         0      0         1  0 /var/lib/vz/images/100/vm-100-disk-0.raw             0

나는 시도했다:

debugfs /dev/mapper/pve-data
debugfs:  cd images/200
debugfs:  lsdel
 Inode  Owner  Mode    Size      Blocks   Time deleted
 0 deleted inodes found.

아직 삭제되지 않아서 그런 것 같아요. 삭제하도록 두고 여기에 표시되고 손상되지 않기를 바라는 것은 약간 위험합니다(300GB 이상).

컨테이너 내부에는 mount다음이 제공됩니다.

/var/lib/vz/images/200/vm-200-disk-0.raw (deleted) on / type ext4 (rw,relatime,data=ordered)

전체 파일 시스템을 덤프하고 컨테이너를 완전히 다시 만드는 것 외에 다른 해결책이 있습니까? (또한 호스트 드라이브가 거의 꽉 차서 옆에 두 번째 컨테이너를 만들 공간이 이제 부족합니다. 스토리지를 축소하면 실제로 실제 삭제가 발생할까 걱정됩니다. :(

답변1

[완전한 답변은 아니지만 코멘트가 너무 깁니다.]

LOOP_GET_STATUS또는 ioctl을 사용하여 루프 장치의 백업 파일(삭제되었을 수 있음)의 inode를 찾을 수 있습니다 . 이는 and 구조의 필드 LOOP_GET_STATUS64입니다 ..lo_inodeloop_infoloop_info64

이 정보를 노출하는 명령줄 유틸리티를 찾을 수 없으므로 다음은 트릭을 수행해야 하는 Perl 단일 라이너입니다.

perl -le 'ioctl STDIN, 0x4C05, $s = pack "a512" or die "ioctl: $!"; print unpack "x[Q]Q", $s' </dev/loop1
1179684

loop(4)자세한 내용은 맨페이지와 설명서를 참조하십시오 /usr/include/linux/loop.h.

하지만 삭제된 파일을 inode로 복구하는 안전한 방법이 있는지는 모르겠습니다. debugfs(8)마운트된 라이브 파일 시스템에서 복구할 수 없을 정도로 손상시키지 않고는 그렇게 할 수 없다고 생각합니다.절대삭제된 파일에 대한 링크를 만듭니다.

내가 생각할 수 있는 유일한 안전한 방법은 전체 루프 장치/파티션이 아직 존재하는 동안 복사하는 것입니다.

cp --sparse=always /dev/loop1 /path/where/to/save/it

답변2

컨테이너가 실행되는 동안에는 이 파일을 하드 드라이브에서 삭제하면 안 됩니다.

Andrew Gallagher의 답변에서 언급한 대로 inode를 찾고 lsof파일을 복구 할 수 있습니다.debugfs이 문제.

외부 디스크를 서버에 마운트할 수 있는 경우 허용되는 답변을 시도하고 거기에 파일을 복사할 수 있습니다.

관련 정보