我在哪里访问了不可见的 SD 卡缓存?

我在哪里访问了不可见的 SD 卡缓存?

我正在尝试清除通过 USB 加密狗连接的 SD 卡。

这就是我所做的:

# dd if=/dev/zero of=/dev/sdb bs=$((1024*4))
dd: error writing '/dev/sdb': No space left on device
1002267+0 records in
1002266+0 records out
4105281536 bytes (4.1 GB, 3.8 GiB) copied, 2.10549 s, 1.9 GB/s

我看到的奇怪的事情是:这是一张 SD HC I 卡,因此传输速度永远不会达到 1.9GB/s。该卡为 16GB,并在 中正确报告dmesg

好的,我们来检查一下它的写法:

# head -c 4105281536 /dev/zero | sha1sum 
a1750724bfbf0ada57d986f16b26e789a6c61a1d  -
(reverse-i-search)`': ^C
# head -c 4105281536 /dev/sdb | sha1sum
a1750724bfbf0ada57d986f16b26e789a6c61a1d  -

看起来还可以。但是当我拔出并再次插入时,它神奇地具有与以前相同的文件系统。当我安装它们并更改文件时,修改也会保留,即使sha1sum仍然显示为零。

该设备绝对是/dev/sdb

[ 9895.437518] scsi 4:0:0:0: Direct-Access     Mass     Storage Device        PQ: 0 ANSI: 0 CCS
[ 9895.439248] sd 4:0:0:0: [sdb] 30318592 512-byte logical blocks: (15.5 GB/14.5 GiB)
[ 9895.439398] sd 4:0:0:0: [sdb] Write Protect is off
[ 9895.439404] sd 4:0:0:0: [sdb] Mode Sense: 03 00 00 00
[ 9895.439557] sd 4:0:0:0: [sdb] No Caching mode page found
[ 9895.439564] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 9895.441922]  sdb: sdb1 sdb2
[ 9895.443517] sd 4:0:0:0: [sdb] Attached SCSI removable disk

这里发生了什么事?

在内核上运行4.20.3

答案1

我注意到,dd当驱动器为 14.5 GiB 时,它仅复制 3.8 GiB。所以你写入的内容很可能不是 SD 卡。拔掉SD卡然后检查ls -lh /dev/sdb

我怀疑您不小心在/dev名为 的上创建了一个常规文件/dev/sdb。既然/dev是 RAM 磁盘,这就解释了为什么你可以以 2GBps 的速度写入它

完成dd命令后,请记住sync以防万一。这将告诉内核刷新它拥有的所有缓存。

相关内容