硬盘工作原理
Harddisk working principle
我有10个字节的数据要写到一个文件中,我的程序把9个字节7位的数据写入硬盘后,如果停电了,来电后我能从这个文件中读出多少字节? 9 个字节还是 10 个字节?
你什么也不能说。这里有太多的抽象层。您的程序经常缓冲,OS 缓冲,芯片组缓冲,驱动器本身缓冲,并且在某些时候将写入数据。
当您通过 fsync
之类的方式要求对数据进行硬同步时,您得到的只是确认 至少 您的数据已写入,不保证没有别的。
此数据流过所有这些层并物理地最终出现在您的磁盘、SSD 或其他设备上需要非零时间。如果在此过程中的某个时刻断电并且您没有收到写入确认,则可以安全地假设您不知道写入了多少。您必须检查之前写入的任何文件并查看存在哪些数据。
当您的系统重新启动时,它可能无论如何都必须从日志中恢复,并且任何未提交的更改都将回滚。在您的示例中,实际写入的字节数是 zero.
我有10个字节的数据要写到一个文件中,我的程序把9个字节7位的数据写入硬盘后,如果停电了,来电后我能从这个文件中读出多少字节? 9 个字节还是 10 个字节?
你什么也不能说。这里有太多的抽象层。您的程序经常缓冲,OS 缓冲,芯片组缓冲,驱动器本身缓冲,并且在某些时候将写入数据。
当您通过 fsync
之类的方式要求对数据进行硬同步时,您得到的只是确认 至少 您的数据已写入,不保证没有别的。
此数据流过所有这些层并物理地最终出现在您的磁盘、SSD 或其他设备上需要非零时间。如果在此过程中的某个时刻断电并且您没有收到写入确认,则可以安全地假设您不知道写入了多少。您必须检查之前写入的任何文件并查看存在哪些数据。
当您的系统重新启动时,它可能无论如何都必须从日志中恢复,并且任何未提交的更改都将回滚。在您的示例中,实际写入的字节数是 zero.