当前位置: 首页>>技术问答>>正文


USB设备显示为只读

, , ,

问题描述

我使用的是Ubuntu 14.04。

我有一个8GB的FAT32 USB memory 棒和一个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)

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

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 

USB写测试:

$ cd /media/simon/LYDIA
$ touch newfile001
touch: cannot touch ‘newfile001’: Read-only file system 

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)

最佳解决方案

请参阅此bug

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

killall nautilus

次佳解决方案

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

  • 运行sudo -i(这样您就不会一直输入密码)

  • 运行df -Th(查看USB memory 棒的安装位置)

  • 卸下你的USB memory 棒

  • 在您从上一个命令中看到的设备上运行dosfsck。示例:dosfsck /dev/sdc1

  • 移除并重新连接USB memory 棒

现在应该解决问题。

现在,对于您的硬盘驱动器,请按照此question的答案进行操作。它是关于外置硬盘驱动器,但它与你的情况是一样的。

第三种解决方案

当使用GParted设置分区表并格式化我的USB memory 棒时,我得到了同样的错误..之后所有USB驱动器都转到了”read-only”。

但在根复制工作正常…

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

第四种方案

我也有这个问题。我在复制到我的usb棒时遇到错误,我使用Mint 17.1肉桂,内核3.13.0-43和caja文件管理器。

当我查看终端’dir /media’中的媒体目录时,我看到布局已更改,通常您希望看到此处列出的驱动器,但现在它们列在您的用户名下,猜猜是什么?该用户名仅具有ROOT权限。

我做的是打字

sudo chown [username] /media/[username]

sudo chgrp [username] /media/[username]

你用你的用户名替换[用户名],删除usb棒,等待,然后把它放回去,问题解决了,我现在可以写信给它!

第五种方案

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

第六种方案

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

  • 使用GParted格式化设备。我甚至尝试过re-creating分区表,但没有成功。

  • 使用fsck检查设备。没有发现任何问题。

  • 修复了挂载点的权限。事实证明,挂载点是root拥有的,但即使让自己成为所有者,我也只能从命令行写入设备(我仍然无法从GUI创建文件)。

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

我再次看了一下权限:

$ ls -ld /media/<username>
drwxrwx---+ 2 <username> <username> 4096 Mar  4 18:32 /media/<username>

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

$ getfacl /media/<username>
# file: <username>/
# owner: <username>
# group: <username>
user::rwx
user:<username>:r-x
group::---
mask::r-x
other::---

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

setfacl -m u:<username>:rwx /media/<username>

我分离了我的USB设备,再次连接它,问题解决了。

第七种方案

当您运行mount时,只安装了sda5(您的/),并且它是read-write(rw),因此您应该可以写入它。通常,大多数目录如/sys/bin只能由root编写(您首先需要sudo),但您的主文件夹应该可写入普通用户。

你可以在你的主文件夹中创建任何文件吗?也许你的gui文件管理器卡住认为他们是read-only,如果你在终端尝试它是否有效?例如,这些命令有用吗?:

cd ~
touch newfile001
echo stuff >> newfile001
cat newfile001

如果那些成功,那么你可以写你的HD(sda5)。


对于USB驱动器,在插入并安装后,查看mount以找到它(/dev/sdb1 ...线)并查看()中的安装选项是否为rw(read-write),那么您应该可以写入它。如果它是ro(read-only)试试这个,看它是否改变:

sudo mount -o remount,rw /dev/sdb1 /media/simon/LYDIA

如果文件系统(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

这包括fs如何被破坏的线索 – “没有正确卸载”,你应该在拔掉任何东西之前总是卸下。大多数文件管理器都有”eject”来帮助解决这个问题。

dmesg日志还说明了如何修复它:fsck可以尝试修复fs错误,它会尝试选择正确的检查程序,或者您可以在fsck.列出选项之后用fsck.vfatfsck.[other]明确选择一个TAB

  • 对于FAT系统(通常必须运行两次,并不总是第一次修复所有错误)

    • fsck.vfat -vaV [device]应自动工作(-a)&显示更多信息(-v)&做一个”verification”传球(-V),或者只是:

    • fsck.vfat -a [device]

注意:这不能保证文件系统将保持固定,它可能会再次损坏&可能无法确切知道原因。在移除USB驱动器之前,请务必卸载/”eject”。

请注意,如果fs安装为rw,则会看到错误&它会自动重新安装为ro,mount命令仍然可以报告它已安装的rw。使用less /proc/mounts查看此文件通常应显示更可靠的信息(请参阅man mount)。


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

sudo mount -o remount,rw,uid=[userid] /dev/sdb1 /media/simon/LYDIA
  • 注意:有时,您可能需要重新启动gui文件管理器才能将”notice”更改为允许您写入文件系统/驱动器的安装更改,但终端应该始终有效。

或者,如果以上操作无效,请尝试sudo su到”become” root,看看是否有任何东西可以写入USB上的文件(使用touchecho等)?

第八种方案

转到Disks

选择您的USB驱动器。

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

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1210.html,未经允许,请勿转载。