Назад | Перейти на главную страницу

возобновить копирование файла Linux

Как возобновить копирование большого файла в 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 = и что значение, передаваемое для пропуска и поиска, находится в блоках, а не в байтах.