我有一张由 Lubuntu 安装的 SD 卡,位于/media/$USERNAME/COREELEC/
我需要将文件从一个目录复制到另一个目录并重命名。但是,如果我在它之后检查md5sum
(或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
答案1
仅当两个文件的内容不同时,其 md5 校验和才不同。您可以通过将它们与cmp
或diff
命令进行比较来确认这一点。
复制操作无法正常工作的原因可能有以下几个:
在刷新磁盘缓存之前拔出 SD 卡。您可以尝试使用乌迪斯克特尔。
文件系统损坏。您可以尝试重新格式化该卡。
硬件故障。
答案2
在卸载介质之前,系统不会写入所有数据。这是可移动(通常是慢速闪存)介质的常见行为,因为系统尝试限制写入。
视觉上,你可以注意到文件管理器(PCManFM,如果我还记得的话……)警告你等待卸载过程(如果你有一个用于 SD 卡读卡器的 LED,它会像地狱一样闪烁)
编辑1:您可以使用sync
刷新文件系统缓存的命令来检查/证明我的理论