自制一个适合mkfs和fsck的坏块表

缘由:硬盘在arm派上用badblocks一跑就卡usb reset然后不停报错.. 只有电脑上DG能跑一跑

于是...手动添加坏块表到ext4然后默默当一块缓存盘吧


工具:

一个你喜欢的能检测坏块的软件(DiskGenius

一个正常点的文本编辑器

脑子

自制一个适合mkfs和fsck的坏块表_第1张图片
工具请找这种能看扇区号/错误地址/LBA的(图为DG

查有关文档和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坏块表,做相应处理

自制一个适合mkfs和fsck的坏块表_第2张图片
「相应处理」

然后把最右一侧写到sda1_badblocks里再mkfs.ext4 -L sda1_badblocks就好啦

(Tip:DG检查的时候有可能瞎报...酌情处理..

(Tip2:LBA -> 块工具稍后写

你可能感兴趣的:(自制一个适合mkfs和fsck的坏块表)