我想知道当我们尝试将文件保存到硬盘时,操作系统如何将文件保存到硬盘。两台具有相同配置和相同内部状态的计算机是否会将文件保存在硬盘上的相同位置,还是它们的地址是随机的?
答案1
它是大多确定性——文件系统使用各种算法来确定新数据的最佳位置。但不可能 100% 复制所有内部状态,因此您必须考虑:
不同的文件系统(ext4、btrfs、NTFS...)使用不同的分配算法,
这也可能受到执行写入的程序的影响(例如,缓慢增长到 100 MB 的文件有时会与通过 fallocate() 一次创建 100 MB 的文件分配不同),
也其他程序同时写入磁盘,因为文件 B 的分配将取决于文件 A 是否已被写入(当您拥有多核或多 CPU 系统时,这里的所有确定性都会消失);
现有文件的大小和位置;
大小和位置删除文件(例如,在日志结构文件系统上,数据只能向前移动)
不同的磁盘类型(文件系统在写入固态磁盘时可能不太关心碎片,而写入磁盘时则不然);
物理损坏(如果一个扇区损坏,文件系统可能会选择将整个文件放在其他地方,而不是仅仅跳过那个扇区);
最后,即使两台示例计算机都有 1:1 的原始磁盘内容副本,
- 一些文件系统可能随机选择如果这写入算法中。从快速 grep 来看,似乎至少 Ext4 在所有选择均相等时使用随机选择作为后备。
答案2
这取决于文件系统、实现和外部因素。
内部状态包括计算机的所有内容,即处理器状态、RAM 中的数据、磁盘上的当前数据及其布局方式,计算机内部的所有内容。但也有外部因素,例如不依赖于计算机状态的磁盘故障 - 您必须将这些因素考虑在内。
“随机布局”可能也是确定性的。计算机是确定性的。计算机科学中使用的“随机”数字在大多数情况下伪随机(通常这完全没问题,只有极少数例外)。因此,即使文件系统施加了一些随机性,它很可能仍然是确定性的。