rsync コピー後にファイルデータが失われる

rsync コピー後にファイルデータが失われる

を使用して、いくつかのディレクトリを含むディレクトリのバックアップを作成しましたrsync -aPv source/ dest。エラー メッセージは出力されず、失敗ステータスも返されず、最後まで進みました。 のすべてのファイルが にコピーされたsourcedestと私は思っていました。

問題は、ソース ディレクトリのルートのファイルのみが正しくコピーされ、開いて使用できることです。残りのファイルとディレクトリは何らかの理由で破損しており、エラーが発生します。

~/Pictures $ cd Screenshots/
cd: Permission denied: “Screenshots/”
~/Pictures $ ls -l Screenshots/
ls: cannot access 'Screenshots/2016-05-02-23:11:15.png': Permission denied
ls: cannot access 'Screenshots/2015-08-07-17-26-33.png': Permission denied
ls: cannot access 'Screenshots/screenshot_2019-05-27_20-41-55_665836194.png': Permission denied
ls: cannot access 'Screenshots/screenshot_2019-05-05_23-17-16_571047883.png': Permission denied
...
total 0
-????????? ? ? ? ?                ? 2015-03-22-03-49-39.png
-????????? ? ? ? ?                ? 2015-04-03-20-17-31.png
-????????? ? ? ? ?                ? 2015-05-18-22-09-39.png
-????????? ? ? ? ?                ? 2015-08-07-17-26-33.png
...

特定のファイル マネージャー (PCManFM を試しましたが、ranger は機能しませんでした) を使用してこれらのディレクトリにアクセスでき、ファイルが破損しており、指定された既定のプログラム (画像の場合は qimgv、ビデオの場合は mpv など) では開くことができないことがわかります。

この問題によってファイルが破損したのか、それともディレクトリだけが破損したのかはわかりません。実際のコンテンツにはアクセスできないかもしれませんが、コンテンツはまだ残っているかもしれませんし、メタデータが破損している可能性もあります (ほとんどが JPG および PNG ファイルです)。これらのファイルとそのコンテンツへのアクセスを回復するにはどうすればよいでしょうか?

答え1

x出力は、権限ビットが欠落しているディレクトリを一覧表示しようとした場合に得られる出力とまったく同じです。

状況を再現する方法の例を次に示します。

$ cd /tmp
$ mkdir dirperms
$ cd dirperms
$ touch foo bar baz
$ mkdir zot
$ cd ..
$ chmod a-x dirperms
$ cd dirperms
bash: cd: dirperms: Permission denied
$ ls -l dirperms
ls: cannot access 'dirperms/baz': Permission denied
ls: cannot access 'dirperms/bar': Permission denied
ls: cannot access 'dirperms/foo': Permission denied
ls: cannot access 'dirperms/zot': Permission denied
total 0
-????????? ? ? ? ?            ? bar
-????????? ? ? ? ?            ? baz
-????????? ? ? ? ?            ? foo
d????????? ? ? ? ?            ? zot/

したがって、 を使用するのはおそらくやりすぎです。でディレクトリtestdiskの権限を単純に修正するだけで済みます。Screenshotschmod -R u+X Screenshots

誤ったアクセス許可の根本的な原因は、元のソース ファイル システムが Unix スタイルのアクセス許可をサポートしていないファイル システムであったため、ファイル システム ドライバーによって報告されたアクセス許可 (POSIX 互換性のため) が、ドライバーが実際にrsyncアクセスを許可した内容と一致しなかったことにあると考えられます。そのため、rsync偽のアクセス許可が宛先ファイル システムに複製され、実際のアクセス許可設定として使用されたため、問題が発生しました。

関連情報