暗号化されたUSBディスクがありますルクス。今日、ディスクを取り付けた後、最近編集したテキストファイルに、一見ランダムな文字が含まれていることがすぐに見つかりました。私が確認した他のすべてのファイルとディレクトリ階層はOKです。
この問題の原因は何であり、そのようなファイルを回復できますか?
ディスク全体の最近のバックアップがあり、テキストファイルの最新バージョンが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
止まる前に走るのが賢明かもしれません...