USB 设备显示为只读

ood*_*2do 154 usb mount read-only

我正在使用 Ubuntu 14.04。

我有一个 8GB 的​​ FAT32 U 盘和一个 500GB 的 FAT32 硬盘;这两种设备都突然变成了只读设备。

我试过删除里面的目录/media,然后再次创建它,重命名它,然后赋予该目录完全权限。然而,这并没有奏效。

结果mount

$ mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro) 
proc on /proc type proc (rw,noexec,nosuid,nodev) 
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) 
none on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/fuse/connections type fusectl (rw) 
none on /sys/kernel/debug type debugfs (rw) 
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755) 
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) 
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) 
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) 
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755) 
none on /sys/fs/pstore type pstore (rw) 
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=simon)
Run Code Online (Sandbox Code Playgroud)

结果sudo parted -l

Model: ATA ST9500325AS (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size    Type      File system     Flags
 4      1049kB  500GB  500GB   extended
 5      2097kB  496GB  496GB   logical   ext4
 6      496GB   500GB  4238MB  logical   linux-swap(v1)


Model: Verbatim STORE N GO (scsi)
Disk /dev/sdb: 8028MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      24.6kB  8028MB  8028MB  primary  fat32        boot
Run Code Online (Sandbox Code Playgroud)

结果lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk 
??sda4   8:4    0     1K  0 part 
??sda5   8:5    0 461.8G  0 part /
??sda6   8:6    0     4G  0 part [SWAP]
sdb      8:16   1   7.5G  0 disk 
??sdb1   8:17   1   7.5G  0 part /media/simon/LYDIA
sr0     11:0    1  1024M  0 rom 
Run Code Online (Sandbox Code Playgroud)

USB写测试:

$ cd /media/simon/LYDIA
$ touch newfile001
touch: cannot touch ‘newfile001’: Read-only file system 
Run Code Online (Sandbox Code Playgroud)

结果dmesg

[  159.366772] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be       corrupt. Please run fsck.
[  159.383252] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.383258] FAT-fs (sdb1): Filesystem has been set read-only
[  159.383571] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.384251] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.384319] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.475111] systemd-hostnamed[2966]: Warning: nss-myhostname is not installed.
Changing the local hostname might make it unresolveable. Please install nss-myhostname!
[  159.480141] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.480224] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.480497] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.480516] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[ 2893.091767] wlan0: deauthenticating from c0:3e:0f:31:21:05 by local choice   (reason=3)
Run Code Online (Sandbox Code Playgroud)

way*_*ure 286

看到这个错误

运行此命令以杀死 Nautilus(文件):

killall nautilus
Run Code Online (Sandbox Code Playgroud)

  • 哇,我不敢相信这有效 (53认同)
  • 很遗憾在 2018 年仍然有效(Ubuntu 16.04.3 LTS) (20认同)
  • 我会被诅咒的,这有效哈哈 (13认同)
  • 我正在使用 `nemo`,所以我做了 `killall nemo` 并且它有效。 (10认同)
  • 给这个人一枚奖牌 (3认同)
  • 我见过的最奇怪的修复。仍然适用于 Ubuntu 18.04 (3认同)
  • 多么奇怪的修复啊! (2认同)
  • 这对我也有用。由于我是个白痴,我失去了所有 sudo 访问权限,并且打算备份一些东西。在进度中取消了副本,并且在分离之前没有卸载。将其重新安装,并卡在只读权限中。`killall Thunar` 修复了它。 (2认同)

小智 95

将 USB 密钥连接到笔记本电脑时:

  • 运行sudo -i(这样您就不会一直输入密码)
  • 运行df -Th(查看您的 USB 记忆棒的安装位置)
  • 卸载你的 U 盘
  • dosfsck在您从上一个命令中看到的设备上运行。例子:dosfsck /dev/sdc1
  • 移除并重新连接您的 USB 记忆棒

问题现在应该解决了。

现在,对于您的硬盘,请按照此问题的答案进行操作。它与外部硬盘驱动器有关,但对于您的情况也是如此。

  • 感谢您的帮助,但它没有用。USB 记忆棒仍然是只读的。我认为这是 Ubuntu 的问题,而不是 U 盘本身的问题,因为它太突然了。并且它同时影响了多个 USB 设备这一事实。 (25认同)
  • @SimonBremford 如果您的 USB 安装在 `/dev/sdb1` 中,当然您的命令是正确的。对于您的其他问题,只需键入:`dosfsck -a /dev/sdb1` (3认同)
  • 有时最简单的方法就是重新启动 (3认同)
  • 添加确实需要重新启动的答案会很有用。 (2认同)
  • 就我而言,问题是由于 U 盘没有提前正确卸载。命令 dosfsck 重置脏位,经过一些更正后,它可以自动以读/写模式挂载,问题解决了。 (2认同)
  • 这个解决方案对我有用。列表中的第一个答案不适用,因为我也无法使用控制台在 USB 磁盘上工作。需要注意的两件事: 1. `dosfsck` 表示设置了“脏位”并询问是否将其删除。我说是”。2、有一个“指向root”的目录被删除了。这导致需要更正空闲簇计数。 (2认同)

小智 21

我也有这个问题。复制到 USB 记忆棒时出错。我使用的是 Mint 17.1 Cinnamon,3.13.0-43 内核和 Caja 作为文件管理器。

当我使用这个终端命令查看媒体目录时:

dir /media
Run Code Online (Sandbox Code Playgroud)

我看到布局已经改变了。通常,您希望看到此处列出的驱动器,但现在它们列在您的用户名下,您猜怎么着?该用户名只有 ROOT 权限。

我所做的是运行:

sudo chown [username] /media/[username]
Run Code Online (Sandbox Code Playgroud)

和:

sudo chgrp [username] /media/[username]
Run Code Online (Sandbox Code Playgroud)

[username]用我的用户名替换的地方。之后我把U盘拔了,等着再放回去。问题解决了,我现在可以写了!


小智 20

使用 GParted 设置分区表并格式化我的 USB 记忆棒时,我遇到了同样的错误......之后所有 USB 驱动器都变为“只读”。

但是在根复制下工作正常......

机器重启后问题消失。所以我猜测在使用GParted时可能会出现这个问题。


Ser*_*ira 17

我在 Ubuntu 上遇到了同样的问题,到目前为止这里给出的答案都没有对我有用。这是我尝试过的:

  • 使用 GParted 格式化设备。我什至尝试重新创建分区表,但没有成功。
  • 用 来检查设备fsck。没有发现问题。
  • 修复了挂载点的权限。事实证明挂载点是 root 拥有的,但即使在让自己成为所有者之后,我也只能从命令行写入设备(我仍然无法从 GUI 创建文件)。

当我连接 USB 记忆棒时,它会安装在 下/media/<username>/<label>/,其中<username>是我的用户名, <label>是 USB 记忆棒或存储设备的标签。

我再次查看了权限:

$ ls -ld /media/<username>
drwxrwx---+ 2 <username> <username> 4096 Mar  4 18:32 /media/<username>
Run Code Online (Sandbox Code Playgroud)

请注意+权限末尾的 。这对我来说是新的,我以前从未注意到它。这意味着该目录具有称为访问控制列表 (ACL) 的扩展权限(请参阅此相关问题)。我列出了此目录的 ACL 详细信息:

$ getfacl /media/<username>
# file: <username>/
# owner: <username>
# group: <username>
user::rwx
user:<username>:r-x
group::---
mask::r-x
other::---
Run Code Online (Sandbox Code Playgroud)

如您所见,user:<username>:r-x我的用户名有一个额外的条目,它只给我读权限。我用一个简单的命令修复了这个问题:

setfacl -m u:<username>:rwx /media/<username>
Run Code Online (Sandbox Code Playgroud)

我拆下我的 USB 设备,重新连接,问题解决了。

  • 好的。谢谢,这就是解决方案。但最后您需要“重新启动计算机”才能完全访问“已安装的 USB”。我相信还有一点值得一提,这个问题是在使用“GParted”在“USB 棒”上“创建新的 gpt 分区表”之后发生的。随后我的所有 USB 都受到了影响。绝对“GParted”的人应该表现得不同...... (2认同)

Adr*_*pez 9

我使用 Gparted 格式化。这擦除了磁盘中的所有数据,事实证明它也解决了问题。


Xen*_*050 6

当您运行时,mount/挂载了sda5(您的),并且它是可读写的(rw),因此您应该能够写入它。通常,像/sys,之类的大多数目录/bin只能由 root 写入(您sudo首先需要),但是您的主文件夹应该可以写入您的普通用户。

您可以在您的主文件夹中创建任何文件吗?也许您的 gui 文件管理器认为它们是只读的,如果您在终端中尝试它是否有效?例如,这些命令有效吗?:

cd ~
touch newfile001
echo stuff >> newfile001
cat newfile001
Run Code Online (Sandbox Code Playgroud)

如果这些工作成功,那么您可以写入您的 HD (sda5)。


对于USB驱动器,插入并安装后,查看mount以找到它(该/dev/sdb1 ...行)并查看()'s 中的安装选项是否为rw(读写)那么您应该能够写入它。如果它是ro(只读)试试这个,看看它是否改变:

sudo mount -o remount,rw /dev/sdb1 /media/simon/LYDIA
Run Code Online (Sandbox Code Playgroud)

如果文件系统 (fs) 有错误,它可能会被挂载为ro,在dmesg& 中/var/log/syslog也应该有关于它的消息。这是您的日志显示的内容:

[  159.366772] FAT-fs (sdb1): Volume was not properly unmounted. Some data may  
be corrupt. Please run fsck.
[  159.383252] FAT-fs (sdb1): error, fat_get_cluster: invalid cluster chain (i_pos 0)
[  159.383258] FAT-fs (sdb1): Filesystem has been set read-only
Run Code Online (Sandbox Code Playgroud)

这包括有关 fs 可能如何损坏的线索 - “未正确卸载”,在拔下任何东西之前,您应该始终卸载。大多数文件管理器都有一个“弹出”来帮助解决这个问题。

dmesg日志也说如何解决它:fsck可以尝试修复FS的错误,它会尝试选择正确的检查程序,或者你可以明确地选择一个具有fsck.vfatfsck.[other]压制TABfsck.应列出的选项。

  • 对于 FAT 系统(通常必须运行两次,第一次不一定能修复所有错误)
    • fsck.vfat -vaV [device] 应该自动工作(-a)并显示更多信息(-v)并进行“验证”传递(-V),或者只是:
    • fsck.vfat -a [device]

注意:这不能保证文件系统会保持固定,它可能会再次损坏并且可能无法确切知道原因。在移除 USB 驱动器之前,始终卸载/“弹出”。

请注意,如果 fs挂载为rw,但随后会看到错误并自动重新ro挂载,则 mount 命令可能仍会报告它已挂载rw。查看此文件less /proc/mounts通常应显示更可靠的信息(请参阅 参考资料man mount)。


如果安装了某些内容rw但您仍然无法在其上添加/删除/编辑文件,则您可能不是这些文件的所有者。在某些 fs 中,您可以chown成为所有者,但是 sdb1 上的 FAT32 fs 没有这些权限;它们在使用 mount 选项挂载时设置uid=value(值是您的用户 ID,使用echo $UID或学习id -u)然后您可以尝试此操作并查看它之后是否有效:

sudo mount -o remount,rw,uid=[userid] /dev/sdb1 /media/simon/LYDIA
Run Code Online (Sandbox Code Playgroud)
  • 注意:有时,您可能需要重新启动 gui 文件管理器以使其“注意到”允许您写入文件系统/驱动器的挂载更改,但终端应始终工作。

或者,如果上面没有工作,尝试sudo su以“成为”根,看看是否有什么可以写入文件上的USB(与touchecho等)?


小智 5

转到磁盘

选择您的 USB 驱动器。

单击“其他分区选项”并选择“格式化分区”

然后选择擦除用零覆盖现有数据(慢)并输入FAT

在互联网上搜索后我尝试了很多东西,但这对我有用。