У меня есть стопка старых лент LTO-2, и моя задача - сохранить содержимое в виде больших двоичных файлов на диске для возможной консолидации на новых носителях. (Содержимое находится в настраиваемом формате, характерном для этого сайта, не относящемся к этому вопросу. Мне не нужно сохранять блокировку.)
Я хотел бы посоветовать, как читать содержимое как можно быстрее. Текущая производительность с использованием dd
составляет около 2 МБ / с, и я считаю, что это связано с небольшим и переменным размером блока файлов на ленте. Спецификации LTO-2 говорят, что я должен иметь 40 МБ / с.
Используя Solaris, я могу видеть tcopy
утилита, позволяющая хранить файлы с переменным размером блока:
# tcopy /dev/rmt/1cbn
file 1: record 1: size 40
file 1: record 2: size 1024
file 1: record 3: size 10240
file 1: record 4: size 7168
file 1: record 5: size 1024
file 1: records 6 to 7: size 10240
[...]
Тестовое чтение с ленты на /dev/null
:
# dd if=/dev/rmt/1cbn of=/dev/null bs=128k
(Обратите внимание, что указанный здесь размер блока 128 КБ является максимальным размером блока. Если фактический размер блока на ленте меньше этого, этот меньший объем данных будет возвращен для каждого ввода-вывода.)
iostat -Mzcnx 1
показывает:
r/s w/s Mr/s Mw/s wait actv wsvc_t asvc_t %w %b device
304.2 0.0 1.9 0.0 0.0 1.0 0.0 3.2 0 97 rmt/1
Это говорит мне, что он читает со скоростью 1,9 МБ / с, при среднем размере ввода-вывода около 6500 байт и в среднем ровно 1 ввод-вывод, ожидающих выполнения в любой момент времени.
Итак: учитывая, что я не могу вернуться во времени и изменить размер блока, который был записан на ленту, пожалуйста, дайте мне знать, есть ли способ быстрее прочитать существующие данные.
Посмотрите на команду буфера, в основном это скорость позволяет одновременное чтение / запись вместо обычного чтения, затем записи, затем чтения и т. Д.
В основном это происходит путем создания двух подпроцессов. Процессы взаимодействуют с помощью буфера общей памяти. Параметры командной строки аналогичны dd с добавлением параметров для размера буфера разделяемой памяти.
Эта команда иногда уже есть в некоторых дистрибутивах Linux, однако, если она не используется, используйте yum или apt-get (или любой другой механизм извлечения вашего пакета), чтобы получить буферный пакет.
Я лично использовал эту команду при создании многих пакетов резервного копирования / восстановления на магнитной ленте, и она увеличивает пропускную способность примерно на 10-20%.