Можно ли сохранить файл не последовательно на диске? Я имею в виду, что часть файла находится под физическим адресом X, а другая часть - под физическим адресом Y, который не близок к смещению X +).
Да; это известно как фрагментация файла и не редкость, особенно для больших файлов. Большинство файловых систем выделяют пространство по мере необходимости, более или менее последовательно, но они не могут угадать будущее поведение - поэтому, если вы записываете 200 МБ в файл, а затем добавляете дополнительные 100 МБ, существует ненулевая вероятность того, что оба набора данных будут храниться в разных областях диска (в основном, любая другая запись, требующая больше места на диске, происходящая после первой записи и перед второй, может оказаться между ними). Если файловая система близка к полному, ситуация обычно будет хуже: может не быть смежной области свободного пространства, достаточно большой для размещения нового файла, поэтому ее придется фрагментировать.
Можно ли как-то контролировать последовательность файлов? Я хочу выделить большой файл 10 ГБ. Я хочу, чтобы он был последовательным на диске и не разделялся между различными смещениями.
Вы можете сообщить файловой системе о целевом размере вашего файла при его создании; это поможет файловой системе оптимально хранить ее. Многие современные файловые системы используют метод, известный как отложенное размещение, при котором макет нового файла на диске рассчитывается как можно позже, чтобы максимизировать доступную информацию при выполнении вычисления. Вы можете помочь этому процессу, используя posix_fallocate(3)
функцию, чтобы сообщить файловой системе, сколько дискового пространства должно быть выделено в общей сложности. Современные файловые системы будут пытаться выполнить это распределение последовательно.
Это действует по-разному между различными типами?
Разные файловые системы ведут себя по-разному, да. Файловые системы на основе журналов, такие как NILFS2, не распределяют хранилище так же, как файловые системы на основе экстентов, такие как Ext4, и это только один из вариантов вариаций.