При использовании флеш-накопителя с постоянной операционной системой может случиться так, что постоянный раздел 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
копирования в место назначения только тех файлов, которые были изменены или являются новыми.