相关疑难解决方法(0)

使用 Linux 对 SD 卡进行压力测试

昨天我与某人就我在这里回答的逻辑和/或真实性进行了一场小辩论,vis.,在一个像样的 (GB+) 大小的 SD 卡上记录和维护 fs 元数据永远不会足够重要到佩戴该卡在合理的时间内(年和年)。反驳的要点似乎是我一定是错的,因为网上有很多关于人们磨损 SD 卡的故事。

由于我确实有带有 SD 卡的设备,其中包含 24/7 保留的 rw 根文件系统,因此我之前已经测试过这个前提,令我自己满意。我稍微调整了这个测试,重复了它(实际上是使用同一张卡)并在这里展示它。我的两个核心问题是:

  1. 是我曾经试图破坏该卡可行的,记住它的目的是不断重现的影响,重新编写方法数据量?
  2. 我用来验证卡的方法仍然可行吗?

我把问题放在这里而不是 SO 或 SuperUser 因为对第一部分的反对可能不得不断言我的测试并没有像我确定的那样真正写入卡,并且断言这需要一些linux 的特殊知识。

[也可能是 SD 卡使用某种智能缓冲或缓存,这样对同一位置的重复写入将被缓冲/缓存在不易磨损的地方。我在任何地方都没有发现任何迹象,但我在 SU 上询问了这一点]

测试背后的想法是向卡上的同一个小块写入数百万次。这远远超出了此类设备可以承受多少写入周期的任何说法,但假设磨损均衡是有效的,如果卡的大小合适,那么数百万次此类写入仍然无关紧要,因为“同一个块”会不是字面上的相同物理块。为此,我需要确保每次写入都真正刷新到硬件,并刷新到相同的明显位置。

为了刷新到硬件,我依赖于 POSIX 库调用fdatasync()

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

// Compile std=gnu99

#define BLOCK 1 << 16

int main (void) {
    int in = open ("/dev/urandom", O_RDONLY);
    if (in < 0) { …
Run Code Online (Sandbox Code Playgroud)

linux hardware sd-card

19
推荐指数
4
解决办法
1万
查看次数

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

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

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

[  +0,000010] mmc0: error -110 whilst initializing SD card 
[  +2,819983] mmc0: card never left busy state
Run Code Online (Sandbox Code Playgroud)

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

[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 …
Run Code Online (Sandbox Code Playgroud)

debugging linux-kernel sd-card

6
推荐指数
1
解决办法
3989
查看次数

无法格式化 MicroSD 卡

我有一张 SanDisk Ultra Plus 64gb MicroSd XC 卡,我用它在树莓派 PI 上运行 ubuntu 服务器。

现在我必须格式化这张卡,但我无法成功。我尝试过很多事情,包括:

  • 通过窗口上的资源管理器进行格式化:意外错误。
  • 使用窗口分区管理器删除分区:意外错误。
  • Diskpart cmd:意外错误
  • 尝试通过 Raspbery Imager 刷新另一个 ubuntu 映像:意外错误。
  • 通过 Rufus 格式化:意外错误。
  • 删除分区并通过 gparted 创建新分区:告诉我有关重叠卷的信息并返回到初始状态。
  • 通过 fdisk 列出:显示没有重叠。sdb1 结束于 526335,sdb2 开始于 526336。 在此输入图像描述
  • 通过 gparted 删除分区而不创建新分区:保存后显示成功,但磁盘重新加载,分区又回来了。

到目前为止我可以看出,该卡不处于只读模式+我不使用带有开关的适配器。

fdisk corruption sd-card gparted

5
推荐指数
2
解决办法
4226
查看次数