Копирование последовательности файлов, которые должны быть физически размещены последовательно на жестком диске

386
Abraham

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

1
Требуется ли вашему программному обеспечению отдельные файлы или он может работать с одним «архивным» файлом (например, tar или несжатый zip-файл)? grawity 5 лет назад 0
он должен скопировать каждый файл в новое место, как они были изначально. Мне нужно заказать файлы на диске, нет, чтобы сжать их. Abraham 5 лет назад 0
Используйте SSD / флэш-карту памяти, чтобы обойти проблему. Кроме того, файловые системы AFAIK Linux делают хорошую попытку сохранить ** один файл ** непрерывным, чтобы вы могли поместить все свои изображения в архивный файл и затем смонтировать архив с помощью [утилита archivemount] (https: //www.linux. ком / новости / монтаж-архивы-предохранители-и-archivemount). xenoid 5 лет назад 0
Не выбор. Я не могу изменить ни свое оборудование, ни мою файловую систему. Нужен только правильный инструмент для изменения порядка расположения файлов на жестком диске. Abraham 5 лет назад 0
Linux: используйте дополнительный HD с одним разделом, напрямую записывайте данные в раздел. Я не уверен, что вы подразумеваете под "последовательностью файлов изображений"; если вы имеете в виду уже существующие файлы где-то еще, используйте tar и записываете вывод непосредственно в раздел. Как только вы закончите и больше не будете зависеть от производительности, прочитайте письменный вывод и поместите его в соответствующую файловую систему. Все это ужасно потерпит неудачу, если вы попытаетесь записать больше данных, чем размер раздела. Вам также нужно два шага. dirkt 5 лет назад 0
@dirkt Я имел в виду несколько файлов изображений, таких как TIFF, DPX, TGA. Все они являются частью фильма и становятся последовательностью, поэтому их лучше размещать друг за другом на жестком диске, чтобы не было времени поиска, которое приводит к задержкам и снижению производительности. Abraham 5 лет назад 1
Является ли проблема «мне не хватает производительности при записи данных, поэтому я теряю некоторые кадры» или проблема «у меня много файлов, и они загружаются недостаточно быстро, поэтому воспроизведение видео заикается»? В Linux есть несколько низкоуровневых инструментов FS, поэтому, в принципе, вы * могли бы * расположить все в смежные блоки, но, скорее всего, ваша проблема была бы лучше решена с помощью предварительной загрузки. dirkt 5 лет назад 0

2 ответа на вопрос

2
K7AAY

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

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

Утилита contig от sysinternals не для этой цели. Это только дефрагментация отдельных файлов. Он не сортирует последовательность файлов последовательно на жестком диске. Кстати, я думаю, что я дал понять, не SSD. Как я уже писал, это жесткий диск (не твердотельный накопитель), и я сказал, что рука постоянно движется головой. У SSD нет ни рук, ни головы. И, пожалуйста, не пытайтесь редактировать мой пост, пока он потерял первоначальный смысл, и мне нужно было откатиться назад. Abraham 5 лет назад 0
0
Xen2050

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

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

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


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

while read filename cp filename destination sync done 

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

dd if=filename of=destination/filename oflags=direct,sync 
Теперь, когда есть коммерческие решения, которые делают это, вы можете проверить Data Mover от Brisght Technologies. Я думаю, что системы резервируют место на диске ранее, чтобы записать всю информацию. Я не прошу решения для всех ОС, но по одному для каждой. Я знаю, что это зависит от файловых систем и ОС. Это звонит в звонок, что rsync мог сделать что-то подобное, но я не уверен. Abraham 5 лет назад 0
Перемещение данных не похоже на непосредственное монтирование томов и выполнение собственных записей секторов, поэтому необходимо выбрать, какие файлы записывать первыми, и позволить ОС выполнять обычную запись. Некоторые функции поддерживают следующее: * "распознает последовательности и позволяет вам управлять последовательностями на основе файлов, как если бы они были одним файлом. Таким образом, DataMover активно предотвращает фрагментированный, рандомизированный и чередующийся макет файла в начале" * и просто пытается записать один файл за один раз * "Отрегулируйте количество потоков копирования и буферов копирования по своему желанию. Управление последовательностями обеспечивает оптимальное выравнивание всех файлов" * Xen2050 5 лет назад 0
Я думаю, что вы не поняли. Это программное обеспечение предназначено для предотвращения фрагментации последовательности файлов (и, конечно, фрагментации файлов). Abraham 5 лет назад 0
Но операционная система выполняет запись в файл, программа не может сказать операционной системе, где именно записывать файлы, а какой файл записывать дальше. Яркие Технологии могли бы сделать немного творческого письма в их маркетинге ;-) Xen2050 5 лет назад 0
Проверьте концепции прямого ввода-вывода, чувак. Вы будете удивлены: «Прямой ввод-вывод - это функция файловой системы, благодаря которой операции чтения и записи файлов передаются непосредственно из приложений на устройство хранения, минуя кэши чтения и записи операционной системы. Прямой ввод-вывод используется только приложениями. (например, базы данных), которые управляют своими собственными кешами ". Abraham 5 лет назад 0
Я знаю о прямом вводе / выводе, `dd` может сделать это с` oflag = direct`, если вы ищете ответ, я мог бы отредактировать его? Но она по-прежнему использует саму ОС для монтирования и записи файлов там, где этого хочет ОС, она просто пропускает обычные кэши дискового буфера, одно мнение таково: * "В целом, это замедляет ввод-вывод и не позволяет Linux выполнять различные оптимизации, которые обычно это делает * Xen2050 5 лет назад 0
Эта петля, которую вы говорите, не решает мой вопрос. Вы не можете контролировать место, где вы пишете на жестком диске, даже если вы не избегаете фрагментации файлов. Abraham 5 лет назад 0
AFAIK также не использует Data Mover от Brightsoft Technologies ... он все еще использует ОС для записи файлов. И, как уже упоминалось, даже если программа действительно записывала файлы именно в тех секторах, которые ей нужны, вы все равно сталкиваетесь с проблемой физического расположения жесткого диска - файл может легко соединить две разные пластины, вызывая движение кронштейна / головки диска, о котором вы упоминали. Если вы действительно * действительно * хотели, `dd` может записывать в определенные сектора диска, но вы наверняка повредите файловую систему без обновления FAT / inode-эквивалента файловой системы, и также не будет работать для смонтированных файловых систем. Xen2050 5 лет назад 0

Похожие вопросы