1

У меня есть последовательность файлов изображений, которую нужно читать как можно быстрее, если это действительно видео, разделенное на кадры. Поэтому, когда последовательность изображений не записывается на жесткий диск последовательно, производительность низкая, потому что рычаг диска непрерывно перемещает головку в поисках каждого файла. Мне нужно знать, как заставить файлы записывать в правильном порядке физически на жесткий диск при копировании. Требуются процедуры для OSX, Linux и Windows. Благодарю.

2 ответа2

2

Утилита contig от Sysinternals специально разработана для того, чтобы делать это по одному файлу за раз в системах Windows с жестким диском. Не найдено эквивалента contig для MacOS или Linux.

Однако, если вы используете твердотельный накопитель, имейте в виду, что данные хранятся в ячейках твердотельного накопителя везде, где их встроенное программное обеспечение решает их разместить, поэтому любая выгода от непрерывной записи файла согласно NTFS может быть сведена на нет.

0

Я не думаю, что вы действительно можете ответить на этот вопрос, особенно для Linux, Windows и Mac одновременно. Так как:

  • Каждая отдельная файловая система может помещать файлы в разные места на диске. Попробуйте создать ext3/4 файловую систему и посмотреть на то, где легко идентифицировать файл (который содержит, например , все a iS) заканчивается - это, вероятно , пишутся в „полоску“ через устройство.
  • Каждый отдельный жесткий диск может иметь неизвестное количество пластин и головок, а также неизвестный способ их сопоставления с секторами.
  • Операционная система или сам жесткий диск могут спокойно переназначать сектора в другое место на диске.

В общем, это звучит так, как будто вы просто хотите избежать фрагментации файлов, и вы можете сделать это, оставив файловую систему пустой (или почти пустой) при записи файлов.


Если вы просто хотите записать один конкретный файл за другим в любом порядке, который вы предпочитаете (но ОС все равно в конечном итоге решит, где разместить их на диске), вы можете использовать цикл, похожий на (например, в Linux)

while read filename
cp filename destination
sync
done

Или сделайте так, чтобы dd пропустил буферный кеш и тоже сделал некоторую синхронизацию:

dd if=filename of=destination/filename oflags=direct,sync

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .