LUKS 암호화된 텍스트 파일에 잘못된 문자가 나타납니다.

LUKS 암호화된 텍스트 파일에 잘못된 문자가 나타납니다.

암호화된 USB 디스크가 있습니다루크스. 오늘 디스크를 장착한 후 최근에 편집한 텍스트 파일에 겉보기에 임의의 문자가 포함되어 있는 것을 즉시 발견했습니다. 내가 확인한 다른 모든 파일과 디렉터리 계층 구조는 괜찮은 것 같습니다.

이 문제의 원인은 무엇이며 그러한 파일을 복구할 수 있습니까?

전체 디스크에 대한 최근 백업이 있고 텍스트 파일의 최신 버전이 Git 아카이브에 커밋되었습니다. 그러나 저는 예방 지침뿐만 아니라 해결책에도 관심이 있습니다.

답변1

"C"로 작성된 빠른 메모리 테스트입니다. 메모리 오류로 인해 디스크 손상이 발생한 경우 이를 확인하는 쉬운 방법이 될 수 있습니다.

조심하세요,이렇게 하면 컴퓨터가 잠깁니다.(가상 메모리 스래시) 사용 가능한 것보다 훨씬 더 많은 메모리를 테스트하려고 하는 경우.

time { make -s CFLAGS="-Wall -Werror -std=c99" mymemtest && free -m && ./mymemtest && free -m && echo "PASS" || echo "FAIL" ; }

   #include <stdio.h>
   #include <stdlib.h>
   #include <stdint.h>
   #include <assert.h>

int main()
   {
   fprintf(stderr,"\n");
   fprintf(stderr,"sizeof(int)=%ld, sizeof(void*)=%ld\n", sizeof(int), sizeof(void*) );

   double TESTSIZE = 2.2; // amount of memory to test in GB
   uint64_t K=1024; // used to define a GB

   typedef uint64_t T;
   uint64_t sizebytes=TESTSIZE*K*K*K;
   uint64_t size = sizebytes/sizeof(T);
   T * a = malloc(sizebytes);
   assert( a != NULL );
   fprintf(stderr,"sizebytes=%ld, size=%ld, chunk size=%ld, test size=%g GB\n", sizebytes, size, sizeof(T), sizebytes/(double)(K*K*K) );

   fprintf(stderr,"writing...\n");  for ( uint64_t i=0; i<size; i++ ) a[i] = i;
   fprintf(stderr,"checking...\n"); for ( uint64_t i=0; i<size; i++ ) assert( a[i] == (T)i );

   fprintf(stderr,"writing...\n");  for ( uint64_t i=0; i<size; i++ ) a[i] = 0;
   fprintf(stderr,"checking...\n"); for ( uint64_t i=0; i<size; i++ ) assert( a[i] == (T)0 );

   fprintf(stderr,"writing...\n");  for ( uint64_t i=0; i<size; i++ ) a[i] = -1;
   fprintf(stderr,"checking...\n"); for ( uint64_t i=0; i<size; i++ ) assert( a[i] == (T)-1 );

   fprintf(stderr,"writing...\n");  for ( uint64_t i=0; i<size; i++ ) a[i] = 0x5A5A5A5A5A5A5A5AUL;
   fprintf(stderr,"checking...\n"); for ( uint64_t i=0; i<size; i++ ) assert( a[i] == (T)0x5A5A5A5A5A5A5A5AUL );

   fprintf(stderr,"writing...\n");  for ( uint64_t i=0; i<size; i++ ) a[i] = 0xA5A5A5A5A5A5A5A5UL;
   fprintf(stderr,"checking...\n"); for ( uint64_t i=0; i<size; i++ ) assert( a[i] == (T)0xA5A5A5A5A5A5A5A5UL );

   free(a);
   fprintf(stderr,"\n");
   return 0;
   }

답변2

중단 후 파일 시스템이 엉망이 됨(Ubuntu 13.10)

LUKS 암호화 USB 디스크를 장착할 때 노트북이 멈추는 것과 관련된 반복되는 파일 시스템 문제를 찾아냈습니다. 일반적으로 일시 중지에서 다시 시작한 후 터미널에 열려 있는 모든 디렉터리가 이제 비어 있다고 가정합니다. 이러한 디렉터리에 파일을 저장하면 손상이 발생할 가능성이 있는 것 같습니다(그러나 이러한 일은 한 번만 발생했습니다). 나의 일반적인 해결책은 일시 중단하기 전에 디스크를 마운트 해제하는 것입니다. 그러나 때로는 이 작업을 잊어버리는 경우가 있습니다.

내가 찾은캐시 지우기복구 후 파일 시스템을 복구하려면:

sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'

sync멈추기 전에 달리는 것이 현명할 수도 있습니다...

관련 정보