При клонировании диска 1 ТБ на диск 1,2 ТБ с помощью dd появилось сообщение «Нет свободного места на устройстве»

По умолчанию происходит сценарий 3. Однако вы можете предусмотреть блокировку SIGUSR2 при каждом запуске обработчика SIGUSR1, и, таким образом, у вас будет сценарий 1. Когда вы устанавливаете обработчик сигнала, вы можете указать, какие сигналы вы хотите заблокировать при запуске обработчика этого сигнала.

В качестве справки я бы рекомендовал вам прочитать справочные -страницы вашей операционной системы относительно сигналов. Например, в Linux вы можете начать с man 7 signal, а оттуда СМОТРИ ТАКЖЕ справочные страницы -.

Однако вы можете легко проверить поведение самостоятельно :просто создайте обработчик для SIGUSR1, который уходит в длительный сон (3)(в Linux лучше nanosleep (2 )потому что сон (3 )можно реализовать с помощью SIGALRM ), затем отправить сначала SIGUSR1, а затем SIGUSR2.

20
11.06.2020, 09:07
1 ответ

Для всего, что связано с судебной экспертизой, включая восстановление файлов, 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, чтобы сделать полный диск.

8
18.03.2021, 23:28

Теги

Похожие вопросы