По умолчанию происходит сценарий 3. Однако вы можете предусмотреть блокировку SIGUSR2 при каждом запуске обработчика SIGUSR1, и, таким образом, у вас будет сценарий 1. Когда вы устанавливаете обработчик сигнала, вы можете указать, какие сигналы вы хотите заблокировать при запуске обработчика этого сигнала.
В качестве справки я бы рекомендовал вам прочитать справочные -страницы вашей операционной системы относительно сигналов. Например, в Linux вы можете начать с man 7 signal
, а оттуда СМОТРИ ТАКЖЕ справочные страницы -.
Однако вы можете легко проверить поведение самостоятельно :просто создайте обработчик для SIGUSR1, который уходит в длительный сон (3)(в Linux лучше nanosleep (2 )потому что сон (3 )можно реализовать с помощью SIGALRM ), затем отправить сначала SIGUSR1, а затем SIGUSR2.
Для всего, что связано с судебной экспертизой, включая восстановление файлов, dd
является ПРАВИЛЬНЫМ инструментом (по крайней мере для чтения ).
Проблема, как указывали другие, заключается в том, что в конце канала ssh вы не читаете его заблокированным. Таким образом, вам нужно либо iflag=fullblock на втором dd, либо просто пропустить второй dd.
flag=noerror
, вероятно, неверно. Вы хотите знать, если это не удалось.
flag=sync
часто является ошибкой. Он говорит dd переопределить буферизацию ОС. Вам это не нужно. В лучшем случае запустите sync
после этого. А для чтения это бессмысленно.
Две разные status=progress
записи — это ошибка. Оба будут сообщать о перезаписи друг друга. Вы действительно просто хотите знать, как это закончилось. Опустить статус=...
bs=16M
выглядит неплохо, но в идеале bs должен соответствовать размеру аппаратного блока. Для классических дисков это было 512 байт.Более современные используют 4k. Я бы рекомендовал 4k, 16k или 64k.
Для незаполненных дисков также подходит сжатие. Решение ssh -C
, вероятно, самое простое.
Так что можно было написать:
ssh -C root@source_ip "dd if=/dev/vda2 bs=64k" | sudo dd iflag=fullblock of=/dev/nvme1n1 bs=64k
или
sudo sh -c 'ssh -C root@source_ip "dd if=/dev/vda2 bs=64k" >/dev/nvme1n1'
(у этого могут быть проблемы с ssh)
или
sudo chown `id -u` /dev/nvme1n1
ssh -C root@source_ip "dd if=/dev/vda2 bs=64k" >/dev/nvme1n1
sudo chown root /dev/nvme1n1
или используйте довольно умное решение, включающее использование tee
.
Если вы хотите использовать двойную форму dd, возможно, будет полезно проверить, есть ли у вас правильные параметры, прежде чем выполнять полный перенос. Добавьте count=100
к первому dd
, чтобы он занимал немного места на диске. Вы должны увидеть обе строки состояния через несколько секунд, и они должны показывать одинаковую сумму перевода. Если это работает, повторите с удаленным count=100
, чтобы сделать полный диск.