еще одно наблюдение, на выходе у меня всегда показывает на один блок больше чем на приеме
Необходимо одно уточнение: какой гипервизор использовали для экспериментов? (подозреваю что VirtualBox)
жду ответа на верхний вопрос.
Коротко:
- проблема N1: использование дискового кеширования в выбранной системе виртуализации
- проблема N2: использование dd | ssh dd без понимания работы пайпа
# dd if=/dev/src_hdd options | ssh
user@ip.add.re.ss dd of=/dev/targ_hdd options
- первая команда dd
- пайп на вход команды ss
- вторая команда dd
# dd if=/dev/src_hdd bs=128k status=progress | ssh
user@ip.add.re.ss 'dd of=/dev/targ_hdd bs=128k'
специально для Вас, последнюю команду взял в апострофы (это и правильно и понятно)
на выходе получим progress для dd которая производит READ!
Вы используете ДВЕ команды dd:
- первая
читает/READ с заданными опциями и результат выхода через pipe кидает в сеть: ssh
- вторая получает данные из сети через pipe и
пишет/WRITE с заданными опциями
опции, особенно bs желательно иметь одинаковые и в соответствии с man!
bs - устанваливает blocksize как для input так и для output буфера!
аналогично для опции conv и status
# dd if=/dev/ada0 bs=128k conv=noerror,sync | gzip --fast | ssh
user@ip.add.re.ss 'gunzip | dd of=/dev/ada0 bs=128k'
нужно читать man и _понимать_ как и какие опции использовать, как и с чем они работают.
bs - устанавливается как для input, так и для output, альтернатива ibs и obs
conv - смотреть как работают опции noerror и sync
Важна ПЕРВАЯ команда "dd if=/dev/source опции" и что она будет делать:
- с входным буфером
input
- и с выходным буфером
output
Что важно в первой "dd" - чтобы она не свалилась по прерыванию в случае ошибок:
- conv=noerror
и чтобы в случае ошибок, вместо "чепухи" писались нули conv=sync
conv=noerror,sync работает с входным буфером, поэтому данные опции
важны в
первой команде dd.
# dd if=/dev/ada0 bs=128k conv=noerror,sync
во второй оставляем только bs=128k
На все вопросы ответил?
Рабочий пример-статья будет позже.