Можно сделать это использование
rsync -av --delete --update --include-from=LISTFILE -f 'hide,! */' src/ dst
где LISTFILE
файл, который содержит все файлы, которые должны синхронизироваться с целевым каталогом. Если Ваши файлы не изменяются, можно использовать --ignore-existing
вместо --update
. Прочитайте rsync страницу руководства для деталей.
dd
был полезен в старые времена, когда люди использовали ленты (когда имели значение размеры блоков) и когда более простые инструменты, такие как cat
, могли быть небезопасными для двоичного кода.
В настоящее время dd if = / dev / sdb of = / dev / sdc
- это просто сложный, подверженный ошибкам, медленный способ записи cat / dev / sdb> / dev / sdc
. Хотя dd
по-прежнему полезен для некоторых относительно редких задач , он намного менее полезен, чем количество учебных пособий, в которых он упоминается, позволяет вам поверить. В dd
нет магии, вся магия находится в / dev / sdb
.
Ваша новая команда sudo dd if = / dev / sdb bs = 128K | pv -s 3000G | sudo dd of = / dev / sdc bs = 128K
снова излишне медленный и сложный. Данные читаются по 128 КБ за раз (что лучше, чем значение по умолчанию dd
, равное 512 Б, но не так хорошо, как даже большие значения). Затем он проходит по двум каналам перед записью.
Используйте более простую и быструю команду cat
. (В некоторых тестах , которые я сделал пару лет назад под Linux, cat
был быстрее, чем cp
для копирования между разными дисками, и cp
был быстрее, чем dd
с любым размером блока; dd
с большим размером блока был немного быстрее при копировании на тот же диск.)
cat /dev/sdb >/dev/sdc
Если вы хотите запустить эту команду в sudo
вам нужно сделать перенаправление как root:
sudo sh -c 'cat /dev/sdb >/dev/sdc'
Если вам нужен отчет о ходе работы, поскольку вы используете Linux, вы можете легко получить его, указав PID cat
(скажем, 1234) и смотрит на позицию его входного (или выходного) файлового дескриптора.
# cat /proc/1234/fdinfo/0
pos: 64155648
flags: 0100000
Если вам нужен отчет о проделанной работе, а ваш вариант unix не обеспечивает простой способ добраться до позиций файлового дескриптора, вы можете установить и использовать pv
вместо cat
.
С помощью команды kill
с соответствующим сигналом можно сделать вывод статистики dd
со стандартной ошибкой.
Из GNU dd man page:
Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid
18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
Убедитесь, что вы сначала проверили свою man-страницу на правильность сигнала, так как он может отличаться в разных реализациях dd: (BSD dd использует SIGINFO).
bs=
. Взгляните на этот поток на суперпользователе и попробуйте некоторые значения сами. dd
и соедините их трубой (dd if=/dev/sda bs=1M | dd из=/dev/sdb bs=1M
).
. DD
использует очень маленькие блокировки по умолчанию (512 байт). Это приводит к большому количеству накладных расходов (один прочитанный ()
и () ()
SYSCALL для каждых 512 байтов).
Это идет намного быстрее, когда вы используете больший блок. Оптимальные скорости начинаются с bs = 64k
или около того. Большинство людей используют еще больше bs = 1 м
, поэтому он становится читаемым человеком (когда DD
говорит о его копировании 1234 блоков
, вы знаете, это 1234 MIB
без каких-либо математики). Использование еще более крупных блок блоков вряд ли приведет к улучшению скорости, просто более высокое потребление памяти.
Итак, команда должна быть:
dd bs=1M if=/dev/sdb of=/dev/sdc
, если у вас уже есть медленный DD
, вы можете прерывать его и возобновить с помощью экземпляра DD
. Для этого важно знать, как далеко не продвинулась копия. DD
Обычно печатает прогресс, когда вы отмените его, или вы можете отправить его SUSR1
сигнал, когда он работает, чтобы заставить его распечатать свой прогресс.
kill -USR1 $(pidof dd)
Например, если он скопировал более 1234MIB
, вы можете возобновить в положении 1234MIB
, используя:
dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc
, если он скопирован менее чем 1234MIB
, ваша копия будет неполным. Если он скопировал более чем 1234MIB
, он будет переоценить некоторые уже скопированные детали, которые обычно не наносят никакого вреда. Так что если под сомнением, вы должны выбрать значение, немного меньше, чем то, что вы считаете уже скопированы.
Вы пробовали «gparted»? Вы можете буквально скопировать и вставить раздел с одного диска на другой и изменить его размер по мере необходимости. Вы получаете скорость передачи и оставшееся время. Он использует «e2image» для разделов Linux.