Как проверить прогресс рабочего CP?

Существуют только 3 (что я могу с готовностью думать), способы запретить корневого доступа к файлу (в нормальных файловых системах).

  1. Файловая система смонтирована в только для чтения.
  2. Файл неизменен (chattr +i). Корень может изменить атрибуты и удалить неизменный флаг, но это - ручной процесс, поскольку приложения автоматически не делают этого. Это является наиболее часто используемым для предотвращения случайно записи в файлы.
  3. Файл является рабочим исполняемым файлом. Ядро предотвращает модификацию любого исполняемого файла, который в настоящее время работает. Можно удалить связь (rm) файл, но Вы не можете изменить его содержание.

Теперь существует много других способов отклонить доступ для записи к файлу при использовании корня. Сетевые файловые системы как NFS и CIFS могут запретить корневого доступа, если настроено, чтобы сделать так на сервере. Некоторые другие специальные файловые системы, как mvfs от IBM Рациональный ClearCase, могут сделать это также.

Однако со всем этим сказал, нет никаких стандартных файлов, в которые корень не может записать. Распределение может установить файлы с неизменным уверенным флагом, но не стандартный.

56
04.03.2013, 19:17
11 ответов

Да, рабочей статистикой на конечном файле и локальном файле, и получают размер файла,

т.е. stat -c "%s" /bin/ls

И Вы добираетесь, процент данных, скопированных путем сравнения этих двух, оценивают, вот именно

В очень простой реализации, которая будет похожа на это:

function cpstat()
{
  local pid="${1:-$(pgrep -xn cp)}" src dst
  [[ "$pid" ]] || return
  while [[ -f "/proc/$pid/fd/3" ]]; do
    read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
    (( src )) || break
    printf 'cp %d%%\r' $((dst*100/src))
    sleep 1
  done
  echo
}
32
27.01.2020, 19:33
  • 1
    не намеревался отправить дубликат Вашего предложения, таким образом, я добавил код здесь. Надеюсь, что Вы не возражаете. –  manatwork 04.03.2013, 13:13
  • 2
    @manatwork ах благодарит, я просто был ленив в предоставлении полного примера :-) –  daisy 04.03.2013, 14:03
  • 3
    Превосходный, это входит в мою панель инструментов на всех серверах!Спасибо! –  ACK_stoverflow 04.06.2013, 01:55
  • 4
    ответов на linux 4, cp'ing от одной быстрой карты памяти до дешевого микро sd на старом картридере файл 500 МБ: CP и синхронизация зависают в течение нескольких дюжин минут. но если я статистика источник и целевой файл я получаю то же самое число на обоих 10-х после запущенного CP. –  gcb 22.02.2017, 03:42

Когда Вы копируете много файлов, du -s /path/to/destination или find /path/to/destination | wc -l дает Вам общее представление о том, сколько было уже сделано.

Можно узнать, с которым копируется файл lsof -p1234 где 1234 является идентификатором процесса cp. Под многими системами, pgrep -x cp сообщают идентификаторы процесса всех рабочих названных процессов cp. Это не может быть очень полезно как порядок, в котором копируются файлы в данном каталоге, чрезвычайно непредсказуемо (в большом каталоге в соответствии с Linux, ls --sort=none скажет Вам; с деревом каталогов попробовать find).

lsof -p1234 также говорит Вам сколько байтов cp уже читал и записал для текущего файла, в OFFSET столбец.

В соответствии с Linux, существуют статистические данные использования IO в /proc/$pid/io (снова, используйте PID cp процесс для $pidf). rchar значение является общим количеством байтов, которые процесс считал, и wchar число байтов, которые записал процесс. Это включает не только данные в файлах, но также и метаданные в каталогах. Можно сравнить то число с приблизительным числом, полученным с du /path/to/source (который только считает данные файла). read_bytes и write_bytes только включайте то, что было считано или записано из устройства хранения данных, т.е. оно уже исключает терминальную диагностику и данные в кэше или все еще в буферах.

22
27.01.2020, 19:33
  • 1
    в течение реального времени: watch lsof -p1234 –  mchid 31.10.2014, 16:09
  • 2
    Или все в одном пойдите: watch lsof -p`pgrep -x cp` –  Mike 10.11.2014, 23:11

Существует несколько вещей, которые можно сделать. Вы могли присоединить strace к нему для наблюдения то, что это делает (вывод может быть обильным!):

strace -p [pid of cp]

или Вы могли добраться lsof для сообщения Вы, который регистрирует его в настоящее время, имеете открытый:

lsof -p [pid of cp]

Если Вы выполняете большое рекурсивное cp, Вы могли использовать pwdx для получения текущего рабочего каталога, который может дать Вам некоторое представление о том, как он делает:

pwdx [pid of cp]
7
27.01.2020, 19:33

То, что можно сделать, проверить файлы в месте назначения.

Если Ваше CP управляет, что-то как cp -a <my_source> <my_dest_folder> Я проверил бы, в котором уже копируются файлы <my_dest_folder> и каждый размер файла, таким образом, я вижу прогресс. Если <my_source> немного сложно (несколько слоев каталогов) затем, маленький сценарий смог бы проверить состояние. Хотя такой сценарий мог использовать немного ввода-вывода, который не будет затем использоваться cp процесс.

1
27.01.2020, 19:33

Один из моих любимых приемов для этого (в соответствии с Linux) должен узнать PID cp процесс (использование ps | grep cp или подобный), и затем заглянуть /proc/$PID/fd/ и /proc/$PID/fdinfo/.

$ cp -r y z
^Z
$ ls -l /proc/8614/fd
lrwx------ 1 jander jander 64 Aug  2 15:21 0 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:21 1 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:20 2 -> /dev/pts/4
lr-x------ 1 jander jander 64 Aug  2 15:21 3 -> /home/jander/y/foo.tgz
l-wx------ 1 jander jander 64 Aug  2 15:21 4 -> /home/jander/z/foo.tgz

Это покажет Вам, какие файлы процесс имеет открытый. Если Вы хотите видеть, как далеко в файл процесс...

$ cat /proc/8614/fdinfo/3
pos:    105381888
flags:  0500000

pos параметр является положением чтения (или запись) указатель в байтах.

14
27.01.2020, 19:33

На последних версиях Mac OS X можно просто поразить CTRL+T для наблюдения прогресса. Из страницы справочника OSX 10.6 для CP (1):

 "If cp receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output file and the percentage complete will be
 written to the standard output."

Удар CTRL+T эквивалентен передаче сигналов о текущем процессе с SIGINFO на машинах BSD-выхода, включая OSX.

Это работает на dd (1) также.

Я не думаю, что Linux имеет этот механизм SIGINFO, и ничего не смотрите в странице справочника GNU для CP (1) о сигналах, которые могут использоваться для создания отчетов о прогрессе.

41
27.01.2020, 19:33
  • 1
    Ничего себе! Это не дает мне много информации, но этого достаточно для знания моего mv живо.Спасибо! –  Dan Rosenstark 29.09.2016, 17:13

Вы можете послать сигнал в процесс:

kill -SIGUSR1 pid

Еще более полезно создать скрипт, который будет опрашивать до тех пор, пока вы не нажмете Ctrl-C или процесс не завершится:

while [ : ] ; do kill -SIGUSR1 $1 && sleep 1m || exit ; done

Работает для dd. Не работает для cp. Может быть, вам нужно использовать другой сигнал. Я как-то пробовал SIGINFO, но, похоже, на платформе Intel его больше нет.

-1
27.01.2020, 19:33
xprop -root 2>/dev/null | sed -n '/^_NET_ACTIVE_WINDOW/ s/.* // p'
-121--21919-

Использование отчасти вместо этого, возможно, связана с командой изменений вашей файловой системы.

Расставленные - это двигатель под GPARTED GUI. Вы можете использовать его в режиме интерактивного команда или непосредственно из командной строки.

Перед рассталось 3.0 3.0, следующая команда делает то, что вы, вероятно, ожидаете, узнав о GPARTED:

$ sudo parted /dev/sdb resize 1 1 200M

, которые будут изменять размер первого раздела на втором жестком диске до 200 миб, и убедитесь, что это Начинается 1 миб на диск, чтобы избежать проблем выравнивания с продвинутыми приводами .

Эта функциональность была удалена в V3.0 , регрессия оправдана сравнением для удаления гангренозного пальца. Частичная функциональность была , восстановлена ​​в V3.1 , покрывая только жир и HFS +.

v3.2 - это то, где все действительно интересны, от перспективы файловой системы Unix / Linux. Это заменяет изменение изменений с Resizepart . Новое имя связано с тем, что он может изменить только размер раздела; Это даже не пытается переставить его содержимое в первую очередь.

В случае выращивания существующей файловой системы это операция с низким уровнем риска, если вы используете файловую систему, которая может быть выращена на лету, как Ext4 или XFS. Например, если мы начнем с раздела 200 MIB Ext4 на / dev / sdb1 , мы можем удвоить его размер:

$ sudo parted /dev/sdb resizepart 1 400M
$ sudo resize2fs /dev/sdb1 400M

ту же командная пара также работает для сокращения Ext [234] файловые системы, за исключением того, что вы их даете в обратном направлении : сокращают фактическую файловую систему, затем нарезать пустое пространство с конца раздела.

Некоторые файловые системы (например, XF) могут быть выращены только; Они не могут быть сжаты. Вот почему эквивалент XFS в Resize2FS XFS_GROWFS .

RAID и LVM-системы усложняют все это. У них есть собственные ограничения и возможности.

Общая ситуация состоит в том, чтобы иметь файловую систему XFS в верхней части мультиприводов LVM-управляемого дискового массива, к которому вы добавляете несколько дисков, затем разверните LVM и, наконец, расширяйте файловую систему XFS в новое пространство.

-121--28269-

Относительно новый инструмент, который имеет ровно прогресс (ранее CV [COREUTILS Viewer]).

Что это?

Этот инструмент может быть описан как крошечный, грязный, Linux-osx-OSX-OSX-OSX-OSX-COMP COMP, которая ищет базовые команды CORETILS (CP, MV, DD, TAR, GZIP / GUNZIP, CAT И т. Д.) В настоящее время работает в вашей системе и отображает процент скопированных данных.

Как это работает?

Это просто сканирует / proc для интересных команд, а затем рассматривает каталоги FD и FDINFO , чтобы найти открытые файлы и искать позиции и отчеты о статусе для крупнейшего файла.

16
27.01.2020, 19:33

Этот инструмент - это команда утилиты Linux, которая ищет COREUTILS Basic Commands (CP, MV, DD, TAR, GZIP / GUNZIP, CAT и т. Д.) В данный момент работает в вашей системе и отображает процент скопированных данных:

https://github.com/xfennec/cv

1
27.01.2020, 19:33

Хотя OP специально упомянул возможность видеть, как команда "cp" прогрессирует, надо сказать, что другие утилиты лучше подходят для этой конкретной проблемы.

Например:

rsync -avP FROM TO

покажет прогресс копирования ОТ файла / папки в К файлу / ПАПКУ.


# rsync -avP Video.mp4  /run/media/user1/3.8G/

sending incremental file list
Video.mp4
    565,170,046 100%   51.23MB/s    0:00:10 (xfr#1, to-chk=0/1)

sent 565,308,115 bytes  received 134 bytes  5,210,214.28 bytes/sec
total size is 565,170,046  speedup is 1.00

И rsync сообщит вам, сколько копируется (и скорость передачи) по пути. Он работает для отдельных файлов или папок как на одном компьютере, так и в сети.

5
27.01.2020, 19:33

Вы также можете использовать pipeviewer

for f in *; do
  pv $f > destination/$f
done
0
27.01.2020, 19:33

Теги

Похожие вопросы