
我有一個透過 LUKS 加密的外部硬碟。它包含一個 ext4 fs。
我剛剛從 rsync 收到位於此磁碟機上的檔案的錯誤:
rsync: readlink_stat("/home/some/dir/items.json") failed: Structure needs cleaning (117)
如果我嘗試刪除該文件,我會收到相同的錯誤:
rm /home/some/dir/items.json
rm: cannot remove ‘//home/some/dir/items.json’: Structure needs cleaning
有誰知道我可以做什麼來刪除檔案並修復磁碟機/檔案系統的相關問題(如果有)?
答案1
這強烈表示檔案系統損壞。您應該卸載磁碟,對磁碟進行磁區級備份,然後執行 e2fsck 以查看發生了什麼。如果有嚴重損壞,您可能會慶幸在讓 e2fsck 竄改資料之前進行了磁區級備份。
答案2
如果它對任何人有幫助,我也遇到了類似的問題(受影響文件上的 rsync/rsnapshot 備份)。我在這裡發布了我的問題/解決方案:
https://ubuntuforums.org/showthread.php?t=2348768&p=13627299#post13627299
概括:
arch linux x86_64 系統上的 rsnapshot (rsync) 備份錯誤;損壞的深度嵌套檔案引發了該錯誤,當我嘗試刪除該檔案時也會顯示該錯誤:
sudo rm -fR hourly.5/
rm: cannot remove 'hourly.5/snapshot_root/mnt/Vancouver/temp/temp - old/temp - 09 (Dec 07, 2014 - Sep 02, 2015)/a_OLD-gmail/[email protected]/[Gmail]/LINUX/rsync, rsnapshot; Other backups/19.bak': Structure needs cleaning
問題是這樣的:
cd mnt/Vancouver/temp/temp\ -\ old/temp\ -\ 09\ \(Dec\ 07\,\ 2014\ -\ Sep\ 02\,\ 2015\)/a_OLD-gmail/[email protected]/\[Gmail\]/LINUX/rsync\,\ rsnapshot\;\ Other\ backups/
ls -l
ls: cannot access '19.bak': Structure needs cleaning
total 0
-????????? ? ? ? ? ? 19.bak ## << THAT IS THE PROBLEM!!
[另請參閱:https://www.reddit.com/r/linuxquestions/comments/4b47r2/has_anyone_ever_gotten_struct_needs_cleaning/]
我的備份磁碟機是/dev/sda1。
sudo umount /dev/sda1
sudo fsck.ext4 /dev/sda1 ## << accepted suggested fixes
- 編輯 (2023-02):注意事項:您不能
fsck
在 NAS - 網路關聯 (RAID) 硬碟 - 通常在網路上出售(亞馬遜;...),並且看起來像普通 HDD 上運行;修復 NAS 驅動器需要特殊軟體。如果您應用fsck
到 NAS HDD,則可能會損壞它。
重新啟動:一切似乎都很好。進入備份驅動器,刪除有問題的檔案:
/mnt/Backups/rsnapshot_backups/hourly.5/snapshot_root/mnt/Vancouver/temp/temp - old/temp - 09 (Dec 07, 2014 - Sep 02, 2015)/a_OLD-gmail/[email protected]/[Gmail]/LINUX/rsync, rsnapshot; Other backups/19.bak
量子ED?
[更新:是的;有效:我的備份再次正常運作! :-)]
答案3
檔案系統有時不正常,需要清理。這可以透過以下方式完成FSCK命令。但請記住,您必須僅對已卸載的分割區執行 fsck,以避免檔案損壞的風險。
如果您的檔案系統是 ext4,請嘗試執行以下命令:
fsck -AR -t ext4 -y
答案4
當我嘗試刪除檔案時,我從 rsync 收到相同的錯誤訊息,從 rm 收到相同的錯誤訊息。由於檔案系統是根檔案系統,因此無法使用 fsck。但是當我重新啟動系統時,檔案就消失了,備份成功了。我不知道為什麼會這樣,但至少這是一個簡單的修復,值得先嘗試重新啟動。