我有一张 Lubuntu 安装的 SD 卡/media/$USERNAME/COREELEC/
我需要将文件从一个目录复制到另一个目录并重命名。但是,如果我在它之后检查md5sum
(or sha512sum
)unmount
并再次安装它,那就不同了。
- 为什么再次挂载SD卡后校验和不一样?
- 我能做些什么让它再次相同吗?
重现它的步骤(假设操作系统已经安装了 SD 卡)
复制文件并检查md5sum
原始文件和复制文件:
$ # copy the file from the original directory to the desired directory
$ cp /media/$USERNAME/COREELEC/device_trees/gxm_q201_3g.dtb /media/$USERNAME/COREELEC/dtb.img
$ # checksum of the original file
$ md5sum /media/$USERNAME/COREELEC/device_trees/gxm_q201_3g.dtb
fd97f3d36cbb53cbdd59b53603f45913 /media/$USERNAME/COREELEC/device_trees/gxm_q201_3g.dtb
$ # checksum of the file I copied
$ md5sum /media/$USERNAME/COREELEC/dtb.img
fd97f3d36cbb53cbdd59b53603f45913 /media/$USERNAME/COREELEC/dtb.img
卸载 SD 卡
$ # check which drive to unmount
$ df -aTh | grep COREELEC
/dev/mmcblk0p1 vfat 512M 170M 343M 34% /media/$USERNAME/COREELEC
$ # unmount the SD card
$ umount /dev/mmcblk0p1
手动拔掉 SD 卡,然后手动重新插入,等待操作系统自动挂载。
然后检查md5sum
(现在看到校验和不同):
$ # checksum of the copied file (NOW DIFFERENT!)
$ md5sum /media/$USERNAME/COREELEC/dtb.img
c8e06c372926719c0a0dac2d5b0f6ab5 /media/$USERNAME/COREELEC/dtb.img
$ # checksum of the original file (STILL THE SAME!)
$ md5sum /media/$USERNAME/COREELEC/device_trees/gxm_q201_3g.dtb
fd97f3d36cbb53cbdd59b53603f45913 /media/$USERNAME/COREELEC/device_trees/gxm_q201_3g.dtb
只有内容不同,两个文件的 md5 校验和才会不同。
cmp
您可以通过将它们与或diff
命令进行比较来确认这一点。它们可能是复制操作无法正常工作的几个原因:
在刷新磁盘缓存之前拔下 sdcard。您可以尝试使用udiskctl。
文件系统损坏。您可以尝试重新格式化该卡。
硬件故障。
在要卸载介质之前,系统不会写入所有数据。这是可移动(通常是慢速和闪存)媒体的常见行为,因为系统会尝试限制写入。
在视觉上,您会注意到文件管理器(如果我记得很清楚的话,PCManFM...)会警告您等待卸载过程(如果您有用于 SD 卡读卡器的 LED,它会像地狱一样闪烁)
EDIT1:
sync
您可以使用刷新文件系统缓存的命令来检查/证明我的理论