在 HDD 占主导地位的时代,使用命令dd
迁移系统磁盘是很常见的。但这会给 SSD 带来一个问题:源磁盘中未使用的空间也会被写入一次,要么是零,要么是垃圾。SSD 不喜欢这样;它们需要知道哪些扇区包含真正有用的数据。
是的,我知道我可以fstrim
在迁移后执行或优化磁盘,但这种方法并不完美:分区间隙、保留分区(如 MSR)以及分配但从未实际写入的空间(NTFS MFT/btrfs 元数据/GlobalReserve/ext4 inode 空间?)无法修剪。作为一名爱好者,我想找到一种方法,不要在我的新闪亮 SSD 上错误分配一个 MiB。
然后我遇到了命令conv=sparse
的选项dd
。似乎通过执行dd if=/dev/sda of=/dev/sdb bs=4K conv=sparse
,可以在将数据从旧 SSD 移动到新 SSD 时跳过所有未使用的扇区,假设两者都具有 TRIM 后的确定性读取零功能。但这会产生新问题吗?例如,一些数据库重做日志文件本质上充满了 0,那么如果在操作系统中分配了一个 0 扇区但在底层闪存中没有分配,它会产生错误吗?
欢迎任何见解。