Я просто попробовал эту точную вещь, и она работала на меня.
Примечание: Я должен также включать это до выполнения команд ниже, я выполнил эту команду, которая настраивает учетную запись пользователя на удаленном хосте к использованию с ssh учетными данными учетной записи моего локального пользователя.
ssh-copy-id root@skinner
Моя установка следующие:
$HOME/.ssh/config
:Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
IdentityFile ~/.ssh/id_dsa
Host skinner mulder byers
User root
$HOME/.ssh/
:$ ls -dl ~/.ssh
drwx------ 2 saml saml 4096 May 23 03:18 /home/saml/.ssh
$ ls -l ~/.ssh
total 16
-rw------- 1 saml saml 204 May 23 03:17 config
-rw------- 1 saml saml 736 Jan 10 2011 id_dsa
-rw-r--r-- 1 saml saml 612 Jan 10 2011 id_dsa.pub
-rw-r--r-- 1 saml saml 401 May 23 03:17 known_hosts
$HOME/.ssh/
:$ ls -l ~/.ssh
total 16
-rw------- 1 saml saml 204 May 23 03:17 config
-rw------- 1 saml saml 736 Jan 10 2011 id_dsa
-rw-r--r-- 1 saml saml 612 Jan 10 2011 id_dsa.pub
-rw-r--r-- 1 saml saml 401 May 23 03:17 known_hosts
srw------- 1 saml saml 0 May 23 03:25 master-root@skinner:22
somefile.txt
к удаленному хосту:$ rsync -arv -e ssh somefile.txt skinner:~
sending incremental file list
somefile.txt
sent 106 bytes received 31 bytes 91.33 bytes/sec
total size is 13 speedup is 0.09
somefile.txt
от удаленного хоста:$ rsync -arv -e ssh skinner:~/somefile.txt somefile-remote.txt
receiving incremental file list
somefile.txt
sent 30 bytes received 100 bytes 260.00 bytes/sec
total size is 13 speedup is 0.10
$ ls -l
total 8
-rw-rw-r-- 1 saml saml 13 May 23 03:19 somefile-remote.txt
-rw-rw-r-- 1 saml saml 13 May 23 03:19 somefile.txt
somefile.txt
к удаленному хосту (-v):$ rsync -arv -e 'ssh -v' somefile.txt skinner:~
OpenSSH_5.5p1, OpenSSL 1.0.0e-fips 6 Sep 2011
debug1: Reading configuration data /home/saml/.ssh/config
debug1: Applying options for *
debug1: Applying options for skinner
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug1: mux_client_request_session: master session id: 5
sending incremental file list
somefile.txt
debug1: mux_client_request_session: master session id: 5
sent 106 bytes received 31 bytes 274.00 bytes/sec
total size is 13 speedup is 0.09
somefile.txt
к удаленному хосту (-vv):$ rsync -arv -e 'ssh -vv' somefile.txt skinner:~
OpenSSH_5.5p1, OpenSSL 1.0.0e-fips 6 Sep 2011
debug1: Reading configuration data /home/saml/.ssh/config
debug1: Applying options for *
debug1: Applying options for skinner
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug2: fd 3 setting O_NONBLOCK
debug2: mux_client_hello_exchange: master version 4
debug1: mux_client_request_session: master session id: 5
sending incremental file list
somefile.txt
debug1: mux_client_request_session: master session id: 5
debug2: Received exit status from master 0
sent 106 bytes received 31 bytes 274.00 bytes/sec
total size is 13 speedup is 0.09
Вы можете использовать $ time rsync * /temp Когда вы хотите узнать приблизительное время, вы должны проверить общий размер файлов перед выполнением rsync. Быстрота или медленность rsync зависит от вашей сети, когда вы выполняете rsync по сети. Вы можете использовать $ ls -ltr, чтобы проверить, в какие каталоги была сделана резервная копия.
Вы можете заставить rsync
печатать одну строку для каждого файла, используя -i
, а затем использовать pv -l
, чтобы сообщать о прогрессе на основе количества строк (фактически файл считать).
Вам понадобится pv
(просмотрщик каналов): http://www.ivarch.com/programs/pv.shtml
rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile
Используйте следующую команду, чтобы получить количество файлов:
find sourcedir | wc -l
Примечание: эта команда покажет информацию о ходе выполнения в зависимости от количества скопированных файлов. Это лучше всего работает, если имеется много небольших файлов. Если есть только несколько файлов, которые огромны, вы не получите особого удовольствия.
Чтобы увидеть прогресс при обновлении (или сравнении) существующей копии:
(дополнительная информация: Сравнить каталоги, но не содержимое файлов )
rsync -aii --delete sourcedir/ targetdir/ | pv -l -s filecount > logfile
Второй -i
заставляет rsync печатать одну строку для каждого файла, даже если они равны.
Добавьте -n
для сравнения (фактически ничего не копируйте и не удаляйте).
Оставить - при необходимости удалить
.
Эта команда выводит на экран в реальном времени файлы, которые отличаются друг от друга:
rsync -aii --delete sourcedir/ targetdir/ | pv -l -s filecount |
tee logfile | grep -v "^\."
Приведенные выше команды работают лучше всего, когда имеется много небольших файлов. Если у вас мало огромных файлов, то некоторые из встроенных отчетов rsync могут оказаться более полезными. См. Справочную страницу rsync для -P
или - progress
или - info = progress2
. Но будьте осторожны: эти параметры не будут работать с pv
. Или, по крайней мере, я не понял, как это сделать.
Вот грубый обходной путь, чтобы увидеть прогресс в зависимости от размера:
df -h
. du -sh
. watch df -h
и наблюдайте за увеличением размера. Очевидно, это работает только при копировании, а не при обновлении или сравнении.
rsync -arv /source desc --info=progress2
дает расчетное время до завершения работы rsync
2,863,290,944 64% 5.71MB/s 0:04:12
0 :04 :12 — оставшееся время
Протестировано на CentOS 7/8
Итак, я знаю, что это устарело, но я использую способ, который (для меня )намного лучше, чем контроль количества файлов. Ниже приведен скрипт, который отслеживает размер файла.
На целевом сервере вы запускаете его как:
# rsync-monitor.sh <folder> <expected final size of folder> <seconds between measuring start/stop size>
rsync-monitor /folder 516835 300
Это отслеживало бы /folder
, ожидая, что он достигнет 516835 МБ, и каждые 300 секунд выводило бы что-то вроде:
[Sun 21 Mar 2021 03:53:25 PM UTC] Starting | Sleeping 300s...
[Sun 21 Mar 2021 03:58:25 PM UTC] 11900MB of 516835MB | ~13MB/s | 10h 15m 0s remaining | Sleeping 300s...
[Sun 21 Mar 2021 04:03:27 PM UTC] 16497MB of 516835MB | ~15MB/s | 9h 0m 0s remaining | Sleeping 300s...
[Sun 21 Mar 2021 04:08:29 PM UTC] 20974MB of 516835MB | ~14MB/s | 9h 10m 0s remaining | Sleeping 300s...
[Sun 21 Mar 2021 04:13:31 PM UTC] 25600MB of 516835MB | ~15MB/s | 8h 50m 0s remaining | Sleeping 300s...
Вот скрипт:
#!/usr/bin/env bash
# The folder
FOLDER=$1
# The expected size of folder
MEGS=$2
# How many seconds to refresh
SLEEP=$3
SECONDSLEFT=1
START=$(du -sm $FOLDER |awk '{print $1}')
echo -e "[$(date)] Starting\t\t| Sleeping ${SLEEP}s..."
while (( $SECONDSLEFT > 0 )); do
sleep $SLEEP
END=$(du -sm $FOLDER |awk '{print $1}')
DOWNLOADED=$(( $END-$START ))
MEGSPERSECOND=$(( $DOWNLOADED/$SLEEP ))
SECONDSLEFT=$(( ($MEGS-$END)/$DOWNLOADED*$SLEEP ))
HOURS=$(( $SECONDSLEFT/60/60 ))
MINUTES=$(( ($SECONDSLEFT-$HOURS*60*60)/60 ))
SECONDS=$(( $SECONDSLEFT-$HOURS*60*60-$MINUTES*60 ))
echo -e "[$(date)] ${END}MB of ${MEGS}MB\t| ~${MEGSPERSECOND}MB/s\t| ${HOURS}h ${MINUTES}m ${SECONDS}s remaining\t| Sleeping ${SLEEP}s..."
START=$END
done
echo -e "[$(date)] Finished"