检查并修复Android内部的SD卡错误?


42

有时我的SD卡“损坏”,这导致许多读取/写入错误。通常,将SD卡连接到Windows 7并选择“错误检查” (右键单击驱动器>“工具”>“错误检查”),即可找到损坏并进行修复。

是否有任何工具或应用程序可用于检查SD卡是否存在驱动器错误,并从android本身内部对其进行修复?

我还要提及的是,我在安装了busybox的情况下是扎根的。


您是否尝试过使用终端应用程序,执行su和运行/system/bin/fsck.exfat
伊齐

@Izzy给我No such file or directory
Irfan

检查不同的位置,也许在/system/xbin吗?尝试cd进入目录,并ls fsc*检查可用内容。必须在某处:)
Izzy

1
究竟。Busybox尝试变得更苗条。用“ man mount”尝试Google姑妈,效果很好:)并在下面查看我的答案。如果有不清楚的地方,请在那儿评论(或在聊天中见我-尽管接下来的几个小时我将不在那儿,但仍有其他认识的成员可以帮助您:)
Izzy

2
如果您的SD卡反复出现错误,则应使用H2testw(仅以德语链接,以德语和英语链接软件。尽管外观相反,我认为这是官方所在地),才能确保它确实具有指定的容量。损坏的SD卡将自动损坏。
代码Bling

Answers:


17

您可以借助root和终端仿真器(例如Android Terminal Emulator(或使用adb shell)来解决此问题。执行此工作的二进制文件称为fsck,通常位于/system/xbin或中/system/bin。有时您需要它的特殊变体,例如,可能被称为fsck.exfat之类的东西,所以首先让我们确保找到正确的二进制文件:

cd /system/xbin
ls fsc*

如果找不到,请重复/system/bin。我将假定它首先被找到,并且被简单地称为fsck(如果不是,则相应地调整以下内容)。

由于fsck来自于“Linux的核心”,我们可以参考它的手册页的语法。尽管可能有些选项无法在Android上使用,但最基本的选项应该可以。有关详细信息,请参见链接的手册页(或运行Linux VM并man fsck在该页面消失的情况下使用)-我将在此处坚持以下基本知识:

首先,我们需要找到您的SD卡绑定到的设备。如果已安装,该mount命令将为我们提供帮助:

mount

基本上就是这样:检查输出并查看SD卡的位置。通常,这是使用的东西vold,但是在设备之间是不同的。输出可能包括类似的内容/dev/block/vold/179:17 on /mnt/storage/sdcard-在这种情况下,我报价的第一部分是我们的设备。为了修复“驱动器”,您需要先卸下它。这可以通过设置菜单来完成,或者就像在终端一样,通过发出

umount /dev/block/vold/179:17

现在我们可以进行维修工作了。基本语法是:

fsck [options] [-t fstype] <filesystem> [fsoptions]

因此,我们首先尝试最简单的方法,并希望fsck自己弄清楚所有事情:

fsck -C -r /dev/block/vold/179:17

这基本上意味着:显示进度(-C),并始终要求用户修复(-r)上的任何错误/dev/block/vold/179:17。如果仍然无法解决,请查看链接的手册页以获取更多选项。


4
cd如果需要,您还可以通过使用ls /system/bin/fsc*ls /system/xbin/fsc*从当前工作目录中保存任何内容来保存步骤。您甚至可以使用将两者合并为一个命令ls /system/xbin/fsc* /system/bin/fsc*
eldarerathis

1
不,我不会混淆,我不知道的是这个问题实际上与SD卡有关。是的,我确实确实使某些事情混淆了。严格来讲,您也可以将SD卡格式化为ext,因此这可能适用于这样做的人。
Lie Ryan

1
点了。尽管“普通用户”(或一个“有疑问的人”)可能更好地坚持使用FAT,至少出于互操作性考虑。至少直到ExtFS支撑在大多数操作系统的轻松默认情况下不要求额外的驱动程序(猜的Windows是,将留在这里一个陷阱,像往常一样)。
伊齐

1
感谢您的回答,我认为这是我所需要的。我在上遇到错误umount,您必须是root用户吗?
有机大理石

1
@OrganicMarble是的,当然–对于上述所有命令,或者您无法以这种方式访问设备(所有以开头的设备/dev)。
伊齐

3

谢谢你,这节省了我的时间:)

root@android:/ # mount | grep -i sdcard
/dev/block/nandk /mnt/sdcard vfat rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0

root@android:/ # /system/bin/fsck_msdos -y /dev/block/nandk

感谢您发布此答案,它对我有很大帮助。从接受的答案中,我不知道如何修复vfat文件系统。已投票。
有机大理石

2

如果您的SD卡反复出现错误,则应使用H2testw(仅以德语链接,以德语和英语链接软件。尽管外观相反,我认为这是官方所在地),才能确保它确实具有指定的容量。损坏的SD卡将自动损坏。


感谢您对这个久已忘记的答案的支持。应该是一个评论,但当时我可能没有这个声誉。我现在将其保留在此处,直到评论被发表并可见为止。
代码Bling

我赞成你的评论。
unforgettableid

@unforgettableid谢谢,只是想确保每个人都知道这种风险。丢失数据真的很糟糕。
代码Bling

好的,既然评论已被批准,您可以删除此答案。:)
unforgettableid

@unforgettableid将同时离开,以提高可见性
代码Bling


0

如果我没有记错的话,您可以根据自己的rom进行以下操作,以强制android在重新启动时对内部和外部存储设备进行fsck操作。

运行终端应用程序并输入

su
touch /forcefsck

然后重启。

如果您的手机未扎根,则肯定会失败。

来源:http : //forum.xda-developers.com/showpost.php?p=57027579&postcount=20


“取决于ROM”是什么意思?
unforgettableid

该技巧可能不适用于所有手机。不同的手机可能无能为力。此外,您的手机也需要扎根。
Trekeyus

重新启动后,如何知道是否fsck实际运行?
unforgettableid 2015年

1
-1。我对你的帖子不满意。原因如下:我花了更多时间调查此事。您建议的技术可能是100%错误的。它可能欺骗读者以为它会有所帮助,但该技术实际上无能为力。
unforgettableid

2
touch /forcefsck仅在具有用于检查/forcefsck文件是否存在的初始化脚本的设备上工作。我不知道有一个具有此类初始化脚本的Android设备。因此,尽管您的技术可能会在Debian,Ubuntu和Mint设备上运行,但我高度怀疑它是否可以在任何Android设备上运行。如果有人找到带有初始化脚本(可检查)的单个Android设备/forcefsck,请告诉我!只需回复此评论。
unforgettableid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.