AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 450476
Accepted
TheMeaningfulEngineer
TheMeaningfulEngineer
Asked: 2018-06-19 09:21:25 +0800 CST2018-06-19 09:21:25 +0800 CST 2018-06-19 09:21:25 +0800 CST

通过内核跟踪定义故障 SD 卡的状态?

  • 772

我有一系列失败/有时失败的 SD 卡。它们要么提供以下dmesg输出之一:

完全死掉的(不在 列出/dev/mmcblk0):

[  +0,000010] mmc0: error -110 whilst initializing SD card 
[  +2,819983] mmc0: card never left busy state

失败的(偶尔仍然可以安装):

[Jun16 06:28] mmc0: new high speed SDHC card at address 0001
[  +0,000339] mmcblk0: mmc0:0001 00000 3.68 GiB 
[  +0,002835]  mmcblk0: p1 p2 p3 p4
[ +10,256689] mmcblk0: timed out sending r/w cmd command, card status 0x900
[ +11,264358] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000016] print_req_error: I/O error, dev mmcblk0, sector 7716736
[ +10,239972] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000018] print_req_error: I/O error, dev mmcblk0, sector 7716736
[  +0,000008] Buffer I/O error on dev mmcblk0, logical block 964592, async page read
[ +10,239931] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000009] print_req_error: I/O error, dev mmcblk0, sector 81792
[Jun16 06:29] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000020] print_req_error: I/O error, dev mmcblk0, sector 1066880
[ +10,240219] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000011] print_req_error: I/O error, dev mmcblk0, sector 2101120

我得到的最好的结果error -110是它是一种超时,但很少说明 SDCard 实际发生了什么。

这是如何形成的背景

SD卡最终在我正在处理的一些(看似随机的)嵌入式设备上处于这些状态,我试图了解这是否是坏SD卡的问题,或者控制器驱动程序是否有问题正在将牌推向腐败。

大约 5% 的牌已经完全失效,我正在尝试看看其他牌是否会出现这种情况。

我试图强制 SD 卡重现该问题,但被测试的那些(相同品牌、相同类型的设备和相同的软件)在连续写入数百 GB 数据后没有显示任何磨损痕迹作为测试的一部分。我为此使用了压力磁盘。

我不知道设备突然断电的频率,电源是一个常规的 2A AC-DC 适配器,可以满足设备的所有其他需求。

更新

似乎建议以helps me prevent failed SD cards in the future与using Linux to diagnose what is the current state of the SDcards.

让我试着改写一下:

在 Linux 上分析 SD 卡故障的最彻底方法是什么?

  • 是否可以为 MMC 子系统启用调试日志以获取更多信息?
  • 什么是card status 0x900?
  • 是否可以从用户空间嗅探 SD-bus 或 SD-bus 通信以获取卡开始出现故障的迹象?
linux-kernel debugging
  • 1 1 个回答
  • 4456 Views

1 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2018-06-24T13:01:46+08:002018-06-24T13:01:46+08:00

    这似乎更像是一个硬件/用例问题而不是其他问题。我敢打赌,在这里,常识可能比 Linux 技能更重要。您是否在卡片中进行繁重的 I/O,MySQL/Apache/编译的东西...系统日志/频繁的系统更新?——Rui F Ribeiro 评论

    我可以在上面展开。但我同意第一点,我同意这是第一个要问的问题。


    • 我应该为 MMC 子系统启用一些调试日志吗?
    • 是否有可以嗅探正在发生的事情的用户空间工具?
    • 如何使错误代码更有意义?

    我对故障归因的唯一信心更多来自“历史”和我得到的一般结果,而不是来自低级命令的特定错误。无论如何,这可能会因实现而异。

    即使使用来自合理品牌的 SSD,我相信我已经返回了错误的数据来代替 I/O 错误。这无疑是许多 SSD 中已知的故障模式之一。[ 2013 年][ 2017 年]。(对于熟悉当代文件系统和数据库实现的人来说可能会感到惊讶,他们通常希望有一组更易于管理的故障模式)。请注意,我在此处链接的论文侧重于返回的数据;除了您已经测量过的死驱动器/坏扇区区别之外,他们在报告的错误中没有任何区别。

    我的 SSD 故障出在“卖家翻新”的笔记本电脑上,该笔记本电脑已经“修复”过一次,并且开始再次出现故障 - 就像链接的文件中一样,可能导致驱动器断电。它也可能无法提供稳定的电压电平。

    我试图了解这是否是 SD 卡损坏的问题,或者控制器驱动程序是否有问题导致卡损坏。

    具有良好主电源的良好硬件不会破坏良好的 SD 卡 -除非您对其施加过多负载。工作量是一个非常重要的变量,你[最初]没有提到. 这些存储卡相对较小,通常是廉价硬件,设计用于存储媒体文件的要求相对不高的用途(因此 MMC,“MultiMediaCard”)。特别便宜的不一定非常擅长“磨损均衡”(将热点逻辑块的负载重新分配到大量物理块上)。

    我已经通过快速 hack 测量了工作量,安排了一个每日 cron 作业来运行tunefs -l /dev/mmcblk0p4 | grep writes >> /var/log/writes.log。

    但是,如果我们将工作量放在一边,从您目前提供的信息中考虑可能的控制器端问题是正确的。由于来自袖珍设备的写入,我在 SD 卡上重复出现了坏扇区,可能是当它的电池电量不足时。这是一张来自同名品牌的卡片。这些扇区是可恢复的,我仍在使用同一张卡。我在这张卡上也遇到过某种短暂的初始化失败,我认为它也与坏扇区有关(一旦我克服了初始化失败),但我可能记错了。

    我有一系列失败/有时失败的 SD 卡。

    我从您的 [原始] 问题中得到的印象是,这是一项小规模操作,并且使用不同的卡、控制器和工作负载运行严格的测试矩阵将是矫枉过正。

    在工作量之后,您控制的第一个变量是卡。

    写在 2018 年,有一个全球知名品牌可以被认为是 sd 卡的“规范”——

    查看结果:https ://www.amazon.com/s/field-keywords=sd+card

    - 并且您希望有许多可以考虑的零售渠道......至少足够可靠以进行比较。(请记住,各种流行的在线零售商充当“市场”以及销售自己的商品)。

    官方 Raspbery PI 硬件也可能是可接受的。即 SD 卡,正式出售用于在小型板计算机上运行 Linux,据报道它运行良好。(比媒体文件要求更高的工作量)。

    作为一个广泛的刷子,如果你得到一张比你严格需要的更快的卡,我也认为这可能是一个更高的耐力等级。(鉴于速度等级往往比耐力更容易获得)。

    如果您控制/测量这两个变量,那么您可以将判断重点放在其余相关硬件上。


    失败的(偶尔仍然可以安装)

    请注意,在最一般的情况下,如果您认为设备写入错误,您可以尝试清除此故障:

    1. 如果需要,可以恢复哪些数据
    2. 然后停止尝试读取坏块。只需重新创建整个格式(分区表+文件系统)。
    3. 但是,如果您不确定并认为该设备可能仍在死亡,您可能还想对其进行测试。

    如果你有像你一样好的原生 MMC 硬件,你可以使用 Linux 命令blkdiscard作为一种更有效的方法来测试擦除设备的所有块,然后再“重新格式化”它。但是与用零覆盖整个驱动器时测试错误相比,效率是唯一的优势,即dd bs=1M if=/dev/zero of=/dev/mmcblk0. (除了避免任何需要写入已擦除的块外,blkdiscard理论上还可以在之后提供更“如新”的性能,并通过给予设备更多的自由度来增加耐用性)。

    (如果这是一个 SATA 驱动器 - 有一个专用的“安全擦除”命令来丢弃整个逻辑驱动器内容(请参阅 参考资料man hdparm)。但是我不知道有任何等效的 MMC 命令。某些 SSD 供应商利用这个命令来重置他们的块映射表,作为它们无法以等效blkdiscard序列恢复“新”性能的解决方法。注意此命令不一定测试全驱动器擦除。在某些情况下,它只会擦除内部加密密钥)。

    既然你问我的错误是什么样的

    我的 SanDisk micro-SD 卡最近又开始播放了。下面的具体错误似乎是由于片状连接造成的。在迷信地吹过所有金属垫之后,通过将 micro-SD 移除并重新插入 micro-SD 到 SD 适配器来解决此问题。

    在我的戴尔 Latitude E5450 笔记本电脑(sdhci-pci内核驱动程序,Fedora Linux 内核版本大约 v4.17)上的读卡器中,它无法初始化卡。在我的 SheevaPlug 上(与此问题相同的硬件和软件详细信息),这张卡似乎已经能够初始化,但它显示 IO 错误。也许在戴尔上,错误处理超时设置不正确。

    戴尔:

    [    2.436566] mmc0: Unknown controller version (3). You may experience problems.
    [    2.449019] mmc0: SDHCI controller on PCI [0000:01:00.0] using ADMA
    ...
    [509227.374012] mmc0: error -84 whilst initialising SD card
    [509227.621510] mmc0: error -84 whilst initialising SD card
    [509227.865472] mmc0: error -84 whilst initialising SD card
    [509228.142120] mmc0: error -84 whilst initialising SD card
    

    Sheevaplug:

    [6076613.118617] mmcblk0: mmc0:aaaa SC16G 14.8 GiB 
    [6076613.295811] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
    [6076613.545740] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
    [6076613.555301] mmcblk0: retrying using single block read
    [6076613.728413] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
    [6076613.737965] blk_update_request: I/O error, dev mmcblk0, sector 0
    [6076613.912043] mmcblk0: error -110 transferring data, sector 1, nr 7, cmd response 0x900, card status 0x0
    [6076613.921599] blk_update_request: I/O error, dev mmcblk0, sector 1
    ...
    
    • 6

相关问题

  • 阻止挂载系统调用

  • 为什么无线工具版本 30 成为永久测试版?

  • 如何提高linux调试能力,熟练使用linux[关闭]

  • 程序堆栈大小

  • 哪些 802.11ac(或更高版本)WiFi 加密狗适用于 Linux 4.13 内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve