如何修复文件损坏又显示写保护的 u 盘

之前用盗版 win7 的时候 u 盘大概是中病毒了,这个盘里全是游戏,记得好像在拷贝游戏到 u 盘的时候出了啥问题,然后就显示这个 u 盘有写保护了,而且里面的游戏拿出来发现都损坏了无法打开,这种情况该如何解决?

请贴原始错误信息,不要自己总结。

这些信息行不,我这个是金士顿 u 盘:

首先确定 u 盘被分配在 sdc 了

  • ~ $ lsblk
    sdc 8:32 1 115.5G 1 disk
    └─sdc1 8:33 1 115.5G 1 part

尝试挂载:

  • ~ $ udisksctl mount -b /dev/sdc1
    Object /org/freedesktop/UDisks2/block_devices/sdc1 is not a mountable filesystem.

  • ~ $ sudo mount /dev/sdc1
    mount: /dev/sdc1: can’t find in /etc/fstab.

这两个命令都挂载不了,第一个命令说该文件系统不支持挂载

检查文件系统类型:

  • ~ $ sudo fdisk -l /dev/sdc
    Disk /dev/sdc: 115.47 GiB, 123983626752 bytes, 242155521 sectors
    Disk model: DataTraveler 3.0
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x047b3ae0

Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 64 242155519 242155456 115.5G c W95 FAT32 (LBA)

显示为 FAT32 所以不能挂载的原因不明

#fsck 无法使用,显示只读

  • ~ $ sudo fsck /dev/sdc1
    fsck from util-linux 2.37.4
    fsck.fat 4.1 (2017-01-24)
    open: 只读文件系统

尝试用这个命令让系统检测到 u 盘的存在 (首先拔掉 u 盘运行命令后再插上):

  • ~ $ sudo tail -f /var/log/messages

截取最后几行大概跟 u 盘有关的:

2024-02-17T00:54:23.432020+08:00 localhost kernel: [ 2697.825127][T27055] scsi 6:0:0:0: Direct-Access Kingston DataTraveler 3.0 0000 PQ: 0 ANSI: 6
2024-02-17T00:54:23.432042+08:00 localhost kernel: [ 2697.825342][T27055] sd 6:0:0:0: Attached scsi generic sg3 type 0
2024-02-17T00:54:23.432043+08:00 localhost kernel: [ 2697.825526][T18909] sd 6:0:0:0: [sdc] Media removed, stopped polling
2024-02-17T00:54:23.432044+08:00 localhost kernel: [ 2697.825669][T18909] sd 6:0:0:0: [sdc] Attached SCSI removable disk
2024-02-17T00:54:23.436024+08:00 localhost kernel: [ 2697.828228][ T2675] sd 6:0:0:0: [sdc] 242155521 512-byte logical blocks: (124 GB/115 GiB)
2024-02-17T00:54:23.436030+08:00 localhost kernel: [ 2697.828354][ T2675] sd 6:0:0:0: [sdc] Write Protect is on
2024-02-17T00:54:23.436031+08:00 localhost kernel: [ 2697.828356][ T2675] sd 6:0:0:0: [sdc] Mode Sense: 23 00 80 00
2024-02-17T00:54:23.436033+08:00 localhost kernel: [ 2697.828528][ T2675] sdc: detected capacity change from 0 to 242155521
2024-02-17T00:54:23.440017+08:00 localhost kernel: [ 2697.830337][ T2675] sdc: sdc1
2024-02-17T00:54:23.589848+08:00 localhost dbus-daemon[835]: [system] Activating service name=‘org.kde.kded.smart’ requested by ‘:1.36’ (uid=1000 pid=1816 comm="/usr/bin/kded5 ") (using servicehelper)
2024-02-17T00:54:23.611956+08:00 localhost dbus-daemon[835]: [system] Successfully activated service ‘org.kde.kded.smart’
^C

还是挂载不上

  • ~ $ udisksctl mount -b /dev/sdc1
    Error looking up object for device /dev/sdc1

  • ~ $ sudo mount /dev/sdc1
    mount: /dev/sdc1: can’t find in /etc/fstab.

再用一次 fdisk,发现盘没了

  • ~ $ sudo fdisk -l /dev/sdc
    fdisk: cannot open /dev/sdc: 找不到介质

不知为何再用一次 lsblk 发现盘还在但是少了一个分区:

  • ~ $ lsblk -l
    sdb 8:16 0 465.8G 0 disk
    sdb1 8:17 0 465.8G 0 part
    sdc 8:32 1 0B 0 disk
    sr0 11:0 1 1024M 0 rom

拔掉重新插上后再用 lsblk:

  • ~ $ NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
    sda 8:0 0 83.5G 0 disk
    ├─sda1 8:1 0 256M 0 part
    ├─sda2 8:2 0 10G 0 part
    ├─sda3 8:3 0 8M 0 part
    ├─sda4 8:4 0 2G 0 part [SWAP]
    └─sda5 8:5 0 71.3G 0 part /opt
    /home
    /var
    /boot/grub2/i386-pc
    /root
    /tmp
    /srv
    /boot/grub2/x86_64-efi
    /usr/local
    /.snapshots
    /
    sdb 8:16 0 465.8G 0 disk
    └─sdb1 8:17 0 465.8G 0 part
    sdc 8:32 1 115.5G 1 disk
    └─sdc1 8:33 1 115.5G 1 part
    sr0 11:0 1 1024M 0 rom

#u 盘的分区又有了

windows 可以正常挂载,并且格式化时显示只读


补充下,刚才用了下 bakblocks 命令,使用命令两秒后发现 u 盘又可以挂载了,但还是只读


说数据损坏是里面的东西有很多不见了,因为太久远我也不记的是啥原因了,当时是在中了一堆病毒的盗版 win7 上用的,估计写保护和丢数据都和病毒有关系吧。

mount 的这个报错应该是说你需要指定挂载点吧

看起来是盘不行了。只读可能也是主控觉得自己快挂了所以设置上的。

那有没有什么方法可以解除写保护,我还有个因为操作不当 (linux 上检测不到了,捣鼓半天又去 windows 上格式化,结果写保护) 导致写保护的 sd 卡,这个大概没有硬件问题,但是碍于写保护,目前处于报废状态。

如果是 U 盘主控开启了写保护的话,应该是没有办法的?估计可能是闪存芯片寿命快到头了,用 CrystalDiskInfo 这样的软件看看?