Mount

無法從 SD 卡中刪除,“只讀文件系統”

  • September 30, 2020

我正在使用 Ubuntu 14.04。

我有一張用於相機的 SD 卡,我正在嘗試從中刪除照片。我能夠將它們移動到垃圾箱,但是當我嘗試從垃圾箱中刪除任何文件時,我得到Failed to delete the item from the trash.

我可以導航到.Trash-1000/files設備上的目錄,但是當我嘗試訪問sudo rm文件時,我得到rm: cannot remove ‘IMG_1483.JPG’: Read-only file system.

mount給了我這個:

/dev/sdb1 on /media/zack/6562-61611 type vfat (ro,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

我嘗試使用重新安裝設備sudo mount /dev/sdb1 /media/zack/SD -o rw,dmask=0000並嘗試刪除文件時遇到相同的錯誤。

最後,我檢查了卡本身的開關並確認它處於解鎖位置。我嘗試將其切換到鎖定狀態,以防萬一它是一張愚蠢的卡,然後我也無法將其刪除。

這裡發生了什麼?我怎樣才能擺脫這些文件?

**更新 1:**我嘗試了其他幾件事來回應 aventurin 的評論。我拍了一張新照片,然後試了sudo rm一下,效果很好。當我回到.Trash-1000/files並再次嘗試時,我能夠刪除一些文件,但不能刪除其他文件:

$ ls
100___12
101___01
102___02    # directories
103___03
...
IMG_1365.JPG
IMG_1374.JPG
IMG_1375.JPG
IMG_1380.JPG
...

$ sudo rm -rvf *.JPG
removed ‘IMG_1365.JPG’
removed ‘IMG_1374.JPG’
removed ‘IMG_1375.JPG’
rm: cannot remove ‘IMG_1380.JPG’: Read-only file system
rm: cannot remove ‘IMG_1381.JPG’: Read-only file system
rm: cannot remove ‘IMG_1383.JPG’: Read-only file system
...

…等等。我ll在刪除這些文件之前做了一個正確的操作,所有 .JPG 文件的權限看起來完全一樣。

更新 2:

$ dmesg | grep sdb1
[  714.950034] FAT-fs (sdb1): error, invalid access to FAT (entry 0x6ce0c8c0)
... # a bunch more of those
[ 2192.017345] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 2192.663466] sdb1: rw=0, want=105540772768, limit=62325760
[ 2192.663470] sdb1: rw=0, want=105540772744, limit=62325760
[ 2192.663499] FAT-fs (sdb1): error, invalid access to FAT (entry 0xad23600b)
[ 2192.663501] FAT-fs (sdb1): Filesystem has been set read-only
[ 2192.663601] FAT-fs (sdb1): error, invalid access to FAT (entry 0x58f3a807)
[ 2271.537913]  sdb: sdb1
[ 2273.782060] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 2407.374492] FAT-fs (sdb1): error, fat_free_clusters: deleting FAT entry beyond EOF
[ 2407.374496] FAT-fs (sdb1): Filesystem has been set read-only

我嘗試sudo fsck /dev/sdb1了很多錯誤:

0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
1) Remove dirty bit
2) No action
? 1
...
/.Trash-1000/files/IMG_1483.JPG  and
/.Trash-1000/files/117___09/IMG_1737.JPG
 share clusters.
1) Truncate first to 5439488 bytes
2) Truncate second to 0 bytes
? 1

我告訴它修復它們,但是當我再次執行它時,它們都再次出現。

更新 3:

我卸下了卡,然後跑了sudo fsck /dev/sdb1 -a。它執行了大約 6 個小時,但仍未完成,所以我最終 Ctrl-C 完成了它。它似乎主要是用損壞的使用者名重命名文件,並且在我殺死它之前重命名了近 18000 個文件(我之前肯定從未拍過那麼多照片……)。

然後我嘗試sudo mount /dev/sdb1 /media/zack/SD -v -o rw並得到了這個輸出:

$ sudo mount /dev/sdb1 /media/zack/SD -v -o rw
mount: you didn't specify a filesystem type for /dev/sdb1
      I will try type vfat
/dev/sdb1 on /media/zack/SD type vfat (rw)

儘管沒有錯誤,但我仍然無法刪除文件並獲得相同的舊“只讀文件系統”錯誤。

您的文件系統似乎已損壞。如果你不能讓 fsck 執行到最後,我建議用mkfs.vfat. 但是為了避免以後損壞,我建議您先檢查您的 SD 卡badblocks(您可以使用破壞性-w選項,但之後您需要重新創建分區表 -cfdisk例如使用 )。然後,如果您有任何壞塊,您可以將它們傳遞給 mkfs 命令,如下所示:

badblocks -w -o ~/badblocksList /dev/sda
mkfs.vfat -l ~/badblocksList /dev/sda

注意:或者,您可以mkfs.vfat -c在格式化時使用執行簡單的壞塊檢查。另請注意,FAT 不是日誌文件系統,因此,如果未正確解除安裝,對損壞非常敏感。如果可能,請盡量避免在您隨身攜帶的設備上使用它。

引用自:https://unix.stackexchange.com/questions/308009