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 文件)。如何恢復對這些文件及其內容的訪問?
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
將虛假權限複製到目標文件系統,在那裡它們實際上被用作真正的權限設置,從而導致了問題。