Sap IT notes

Как проверить прогресс копирования запущенный командой ‘dd’?


Команда dd достаточно удобный инструмент копирования данных, но она не показывает текущего прогресса.
Но есть способы узнать сколько данных скопировано.
Метод не самый удобный, но вполне рабочий.

Запустим копирование:
[root@fedora23 ~]# dd if=/dev/urandom of=/root/test.img bs=1M count=1000 oflag=direct &
[1] 35101

флаг oflag=direct для записи сразу на диск, в обход кэша в оперативной памяти.

Мы получили ID процесса – 35101. Натравим на него lsof:
[root@fedora23 ~]# lsof -p 35101
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dd 35101 root cwd DIR 253,0 4096 33575009 /root
dd 35101 root rtd DIR 253,0 244 96 /
dd 35101 root txt REG 253,0 74096 16951651 /usr/bin/dd
dd 35101 root mem REG 253,0 111950656 36802544 /usr/lib/locale/locale-archive
dd 35101 root mem REG 253,0 2103656 33631736 /usr/lib64/libc-2.22.so
dd 35101 root mem REG 253,0 160624 33631727 /usr/lib64/ld-2.22.so
dd 35101 root 0r CHR 1,9 0t0 1033 /dev/urandom
dd 35101 root 1w REG 253,0 102760448 34900243 /root/test.img
dd 35101 root 2u CHR 136,0 0t0 3 /dev/pts/0

Нам интересна вот эта строчка: dd 35101 root 1w REG 253,0 102760448 34900243 /root/test.img, где 1w – это файловый дескриптор,
w указывает на то, что файл /root/test.img открыт для записи.

Теперь переместимся в /proc/35101/fdinfo/ и посмотрим, что там:
[root@fedora23 fdinfo]# ls -l
total 0
-r--------. 1 root root 0 Nov 25 16:19 0
-r--------. 1 root root 0 Nov 25 16:19 1
-r--------. 1 root root 0 Nov 25 16:19 2

нам нужен файл 1, как файловый дескриптор.

Посмотрим содержимое файла:
[root@fedora23 fdinfo]# cat 1
pos: 787480576
flags: 0140001
mnt_id: 62

pos указывает на то, сколько данных в байтах было отдано приемнику, pos: 787480576/1024/1024 = 751 MB.

Для постоянного отслеживания прогресса можно использовать вот такой bash скрипт:
while [ 1 ]; do grep pos /proc/35101/fdinfo/1 | awk '{print $2/1024/1024}';sleep 1; clear;done

Аналогичным методом мы можем посмотреть на указатель источника и он даст понимание того сколько данных прочитано. В нашем примере источник /dev/urandom и для него команда lsof показала:
dd 35101 root 0r CHR 1,9 0t0 1033 /dev/urandom

Здесь файловый дескриптор 0r, аналогичным методом смотрим содержимое файла 0 и видим сколько данных прочитано из файла.

Достаточно удобно бывает отслеживать таким образом прогресс больших файлов, которые еще и по сети копируются с использованием dd.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

© 2015