Данные файла утеряны после копирования rsync

Данные файла утеряны после копирования rsync

Я сделал резервную копию каталога с некоторыми каталогами внутри, используя rsync -aPv source/ dest. Он не вывел сообщений об ошибках, не вернул статус сбоя и дошел до конца. Он скопировал каждый файл из sourceв dest, или так я думал.

Проблема в том, что только файлы из корня исходного каталога были правильно скопированы и могут быть открыты и использованы. Остальные файлы и каталоги каким-то образом повреждены, и возникают ошибки:

~/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вероятно, было излишним; можно было просто исправить права доступа к каталогу Screenshotsс помощью chmod -R u+X Screenshots.

Корневой причиной ошибочных разрешений может быть то, что исходная файловая система-источник, возможно, не поддерживала разрешения в стиле Unix, и поэтому разрешения, сообщаемые драйвером файловой системы (для совместимости с POSIX), не соответствовали реальности того, к чему драйвер фактически разрешал rsyncдоступ. Поэтому rsyncподдельные разрешения были скопированы в целевую файловую систему, где они фактически использовались как реальные настройки разрешений, что и вызвало проблему.

Связанный контент