缘由:硬盘在arm派上用badblocks一跑就卡usb reset然后不停报错.. 只有电脑上DG能跑一跑
于是...手动添加坏块表到ext4然后默默当一块缓存盘吧
工具:
一个你喜欢的能检测坏块的软件(DiskGenius
一个正常点的文本编辑器
脑子
查有关文档和mkfs.ext4 -h可知:mkfs -c可以直接调用badblocks检查错误(但是显然咱不想要)mkfs -L可以导入坏块表(但是文档说不建议然后理所当然没给方法).......
于是找到了mkfs的源码(其实拿fsck用了..都一样啦
并没有管badblocks..因为根据之前失败的尝试猜测就是简单的读取-地址转区块-写出文件
在e2fsprogs-1.43.4/e2fsck/badblocks.c[68-86]处可以看到(代码贴出来贼那啥算了:
一种是 -c然后调用
sprintf(buf, "badblocks -b %d -X %s%s%s %llu", fs->blocksize,
(ctx->options & E2F_OPT_PREEN) ? "" : "-s ",
(ctx->options & E2F_OPT_WRITECHECK) ? "-n " : "",
fs->device_name, ext2fs_blocks_count(fs->super)-1);
f = popen(buf, "r");
另一种是 -L然后直接
f = fopen(bad_blocks_file, "r");
那么就探究那一坨popen之后得到的结果就行了....
(漫长的构建参数...
badblocks -b ext4区块大小 -s[显示进度] -n[不执行写入] 文件系统所在设备块(/dev/sda1) 文件系统大小(懒得填自动去吧啊哈哈哈哈)
最后得到的是这种东西:
106613623
106614327
106614495
(配合演出中间略N(因为一个坏块badblocks重复搞就开始usb reset无响应所以全是连续坨坏块
此时找到原来的DG处理出的LBA坏块表,做相应处理
然后把最右一侧写到sda1_badblocks里再mkfs.ext4 -L sda1_badblocks就好啦
(Tip:DG检查的时候有可能瞎报...酌情处理..
(Tip2:LBA -> 块工具稍后写