Способ ускорить cp -a (использование cp -a на флешке очень медленное)

Способ ускорить cp -a (использование cp -a на флешке очень медленное)

При использовании флеш-накопителя с постоянной операционной системой может случиться так, что постоянный раздел casper-rwбудет поврежден, если извлечь флеш-накопитель слишком рано после завершения работы операционной системы.

К сожалению, с ubuntustudio-20.04.2 у меня были периоды до одной минуты после нажатия кнопки выключения, когда экран был черным, но в casper-rwраздел велись тяжелые операции записи. Так что его можно очень легко испортить, вытащив флешку слишком рано.

Чтобы восстановиться после такой неудачи, я создаю резервный раздел casper-rwи использую команды (после того, как стану суперпользователем) после правильной настройки переменных QUELLE и ZIEL:

time cp -a "${QUELLE}/upper" "${ZIEL}"

time cp -a "${QUELLE}/work" "${ZIEL}"

time cp -a "${QUELLE}/lost+found" "${ZIEL}"

Когда мой скрипт запускается, я вижу

  • очень низкая активность ЦП
  • очень малое использование оперативной памяти
  • htopпоказывает мне, что cp -aпроцесс занимает очень много времени в состоянии D.

Если я правильно понял (поправьте меня, пожалуйста), это означает, что компьютеру приходится очень часто ждать, поскольку контроллер USB-накопителя не может эффективно обрабатывать такое количество операций чтения и записи (хотя это устройство USB3 в разъеме USB3!).

Есть ли способ позволить cp -a использовать буферы большего размера для ускорения процесса, в идеале последовательно записывая целые файлы?

решение1

Похоже, можно значительно ускорить копирование, скопировав сначала каталоги upper, workи lost+found(если он есть) раздел в casper-rwкакой-то каталог на SSD. Этот шаг занимает чуть больше 2 минут. cp -aДля этой цели можно использовать.

Если вы хотите сделать резервную копию на той же флешке в отдельном разделе, копирование ее с SSD на USB-флешку cp -aзаняло около 31 минуты (для 4,1 ГиБ данных в 66500 файлах, флешка USB3 в разъеме USB3). Предыдущее содержимое раздела было стерто rm -rf "${ZIEL}/upper"; rm -rf "${ZIEL}/work"; rm -rf "${ZIEL}/lost+foundдо того, как какое-либо новое содержимое было скопировано на резервный раздел).

Кто-нибудь знает, есть ли разница, если раздел был стерт таким образом перед повторным использованием или если отформатировать его перед тем, как поместить туда сетевое содержимое, это ускорит работу еще больше? В случае сбоя casper-rwнужно отформатировать его перед восстановлением содержимого из резервной копии.

Конечно, можно было бы еще улучшить это, сделав резервную копию как backup.tar.gz. Это уменьшает объем данных для записи, и особенно второй шаг выиграл бы от этого.

решение2

Используйте syncдля принудительной немедленной записи в место назначения

Когда вы cpсоздаете файл и он появляется в целевой файловой системе, это не гарантирует, что файл действительно находится на носителе данных.

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

Вы всегда можете попытаться принудительно выполнить немедленную запись из буферов на целевое устройство хранения, используя syncпосле копирования, например:cp ${QUELLE} ${ZIEL} && sync

Также рассмотрите возможность rsyncкопирования в место назначения только тех файлов, которые были изменены или являются новыми.

Связанный контент