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

9

Как мне возобновить копию большого файла в Linux? У меня есть огромный файл (несколько гигабайт), частично скопированный на сетевой диск, и это заняло много времени, и в основном это было сделано до того, как операция копирования была остановлена ​​из-за проблемы с сетью, которая теперь исправлена. Как мне возобновить копирование файла. Мне не нужен неэффективный скрипт, и ecp не работает (кажется, он не работает для больших файлов).


источник

Ответы:

4

Я бы попробовал rsync -a /from/file /dest/file.

Гонсало
источник
1
и пока мы говорим о rsync, обратите внимание, что вы можете скопировать напрямую на любой удаленный компьютер [поддерживающий SSH], используя rsync -az -e ssh / from / file user@dest.ation: / full / dest / path
Mikeage
2
Ух ты. запуск Rrsync без каких-либо опций приведет к удалению / dest / file и повторной передаче всего. Как за это проголосовали?
Джастин
1
Как помогает сохранение атрибутов файла (-a)? Должно ли это быть --append?
Malvineous
3

Если вы знаете, что вам просто нужно добавить локальный файл и не хотите использовать rsync (который может потребовать много времени для вычисления контрольных сумм), вы можете использовать curl. Например, если у вас есть большой файл на медленном съемном USB-накопителе, /media/CORSAIR/somefile.datи только половина его находится в текущем каталоге, возобновите:

curl -C - -O "file:///media/CORSAIR/somefile.dat"

user48985
источник
Спасибо за совет, я должен был использовать этот совет, потому что я копировал с сервера Windows SMB (поэтому без rsync), когда медленное соединение было потеряно, и я не хотел загружать 500 МБ с самого начала.
MiKy
2

Да, rsync - это путь. Для меня мы передали более 100 ГБ данных через rsync + ssh. Если вы ищете истинную резервную копию, убедитесь, что вы используете -aопцию (архив), чтобы сохранить атрибуты файла (время, владельцы, разрешения и т. Д.)

host1> rsync -aP file user@host2:/path/to/new/dir/

Это также полезно для копирования больших файлов, которые могут измениться в процессе миграции. Вы можете предварительно загрузить данные в место назначения и, как только будете готовы к окончательному копированию, сделать это снова, но только на долю времени. Вы можете сэкономить на фактическом времени простоя, используя rsync для его полного потенциала.

PS Использование v(многословно) может замедлить передачу многих файлов.

Летучая рыба
источник
2

Команда, которую вы хотите, будет что-то вроде

rsync -v --append /path/to/afile /mnt/server/dest/afile

если вы не можете получить доступ к серверу через ssh и запустить rsync таким образом, в этом случае команда FlyingFish лучше всего подойдет.

Джастин
источник
0

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

дд если = исходный_файл = конечный_файл bs = 2048 пропуск = 1000000 поиск = 1000000

Вы можете использовать больший размер блока для улучшения скорости передачи. Просто не забудьте указать размер блока с помощью bs =, и значение, пропускаемое и ищущее, указывается в блоках, а не в байтах.


источник
То, что вы сказали о rsync, неверно. man rsync, прочитайте, что делает опция --append.
Джастин