1

Я оказался в ситуации, когда копирую целую файловую систему через два разных раздела HD (разных размеров и типов файловых систем). Пока что проблема в том, что и cp и rsync будут читать один файл в источнике и записывать его в месте назначения, делая это для каждого небольшого файла. Поэтому у меня есть только небольшая буферизация ОС и сам кеш HD, чтобы предотвратить перемещение головки HD вперед и назад для каждого маленького файла - но кажется, что это довольно близко к этому.

У машины много оперативки. Что я могу сделать, чтобы прочитать несколько мегабайт (или даже ГБ) данных в одном и том же разделе, прежде чем добавить их в другой раздел?

Если это имеет значение, я копирую из BTRFS в EXt4 - данные включают в себя несколько деревьев Git, исходные файлы и тому подобное (несколько больших видео и аудио файлов).

1 ответ1

2

Вы можете попробовать играть с cpio или tar трубами, например , с использованием cpio «сек --io-size

Тем не менее, я не верю, что вы получите лучшую производительность, чем сможете, если cp или rsync выполнят свою работу. На самом деле файловая система и соответствующая ОС работают с поведением драйвера жесткого диска и помогают ему решить, искать или нет.

Вы могли бы лучше понять это с помощью этого ТАКОГО вопроса. В частности:

РЕДАКТИРОВАТЬ: Ах, "родной Linux" может улучшить производительность, чередуя чтения и записи с асинхронным вводом-выводом. Скопление команд может помочь драйверу диска решить, когда лучше искать. Вы можете попробовать Boost Asio или pthreads для сравнения. Что касается "не может превзойти дескрипторы файлов POSIX"… ну, это правда, если вы что-то делаете с данными, а не просто слепо копируете.

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