Как возобновить копирование большого файла в Linux? У меня есть огромный файл (несколько гигабайт), частично скопированный на сетевой диск, и это заняло много времени, и в основном это было сделано до остановки операции копирования из-за сетевой проблемы, которая теперь исправлена. Как возобновить копирование файла. Мне не нужен неэффективный скрипт, а ecp не работает (похоже, не работает для больших файлов).
я бы попробовал rsync -a /from/file /dest/file
.
Если вы знаете, что вам просто нужно добавить в локальный файл и не хотите использовать rsync (что потенциально может занять много времени для вычисления контрольных сумм), вы можете использовать curl. Например, если у вас есть большой файл на медленном съемном USB-накопителе, установленном в /media/CORSAIR/somefile.dat
и только половина его находится в текущем каталоге, чтобы продолжить:
curl -C - -O "file:///media/CORSAIR/somefile.dat"
Требуемая команда будет выглядеть примерно так:
rsync -v --append /path/to/afile /mnt/server/dest/afile
если вы не можете получить доступ к серверу через ssh и запустить rsync таким образом, в этом случае лучше всего использовать команду FlyingFish.
Да, rsync - это то, что вам нужно. Для меня мы передали более 100 ГБ данных по rsync + ssh. Если вы ищете настоящую резервную копию, убедитесь, что вы используете -a
(архив) возможность сохранения атрибутов файлов (время, владельцы, разрешения и т. д.)
host1> rsync -aP file user@host2:/path/to/new/dir/
Это также полезно для копирования больших файлов, которые могут измениться в процессе миграции. Ты можешь предварительная загрузка данные к месту назначения и, когда они будут готовы к окончательной копии, сделайте это снова, но только в течение небольшой части времени. Вы можете сэкономить на фактическом времени простоя, используя весь потенциал rsync.
P.S. С помощью v
(подробный) может замедлить передачу многих файлов.
rsync хорош, только если у вас есть rsync на конечном сервере. В таком случае это действительно лучшее решение.
Но не иначе. Поскольку целью rsync является копирование только измененных частей в большие файлы, предполагается, что эти измененные части могут находиться где угодно в файле. Это означает, что он будет проверять контрольную сумму всех блоков, которые уже были скопированы. Если у вас нет rsync на удаленном конце, ваш локальный rsync, таким образом, начнет с чтения всего, что уже было передано.
Если на вашем исходном компьютере есть веб-сервер или ftp-сервер, вы можете использовать wget с целевого сервера с параметром «--continue». (или скрутите с параметром «--continue-at [- | size]»).
Если на вашем конечном компьютере есть FTP-сервер, вы можете использовать curl на исходном компьютере с параметром --append.
В крайнем случае, вы можете использовать dd с аргументами «bs =» (размер блока), «skip =» и «seek =». Например:
Предположим, вы сможете использовать 2048-байтовые блоки. Если ваш целевой файл в настоящее время имеет размер 2'048'000'000 байтов (2 ГБ), это 1'000'000 блоков по 2048 байтов. Чтобы добавить оставшуюся часть исходного файла в место назначения, вы можете
dd if = source_file of = destination_file bs = 2048 skip = 1000000 seek = 1000000
Вы можете использовать больший размер блока для повышения скорости передачи. Просто не забудьте указать размер блока с помощью bs = и что значение, передаваемое для пропуска и поиска, находится в блоках, а не в байтах.