- Peter Leung, «Командная строка: маленькие хитрости от Linux Commando»
- Как узнать о ходе процесса копирования командой dd?
- Как посмотреть прогресс копирования в Linux
- Прогресс команды Linux с помощью progress
- Установка progress
- Смотрим прогресс команды с помощью progress
- Способ второй — создание туннеля
- Выводы
- dd, прогресс
- VS Web School
- 23 мая 2015 г.
- Команда «dd» как швейцарский нож
- Команда dd и все, что с ней связано
Peter Leung, «Командная строка: маленькие хитрости от Linux Commando»
Как узнать о ходе процесса копирования командой dd?
Популярная, многофункциональная команда dd часто служит для копирования файлов с одного места в другое. Применяется для копирования целых разделов и даже дисков.
Как и многие другие команды, она молча работает, если не случится ничего непредвиденного. Отсутствие видимого отклика очень удобно для использования команды в скриптах. Однако, когда копируются большие файлы, хочется иметь представление о ходе процесса.
Для примера: можно заставить dd копировать случайно генерируемые числа в «черную дыру» ≈ действие абсолютно бесполезное, зато наглядное.
Выполнение этой команды займет несколько минут, пока команда скопирует (и немедленно сбросит) 100 блоков по 1Кб каждый.
Чтобы получить от работающей программы отчет о ходе процесса, нужно открыть второй терминал и послать специальный USR1 сигнал процессу dd.
Для начала нужно узнать ID этого процесса. Во втором терминале набираем:
- Примечание переводчика: Данное в одинарных кавычках регулярное выражение означает «выражение начинается с dd и заканчивается dd», другими словами, искать только dd безо всяких других букв спереди или сзади. Почему это так, вы поймете, запустив альтернативную команду:
Вот сколько процессов имеют в своем названии «dd»!
Осталось послать процессу 8789 сигнал USR1:
Как только вы пошлете сигнал, команда dd, продолжающая копирование в первом терминале, отреагирует, выдав текущую статистику на STDERR (Стандартный поток сообщений об ошибках).
Выдав это сообщение, программа dd возобновит копирование. Можете повторять команду kill столько раз, сколько вам нужно. А можете применить команду watch, которая будет запускать команду kill с указанными вами интервалами:
Источник
Как посмотреть прогресс копирования в Linux
Однако команда dd, как известно, при копировании файла не отображает прогресс бар для пользователя, поэтому непонятно сколько процентов файлов уже скопировано.
В этой статье мы рассмотрим как посмотреть прогресс dd в linux, этот метод подходит не только для dd, но и для всех подобных ей утилит.
Но есть очень простое решение, и даже два. Первое, это утилита Coreutils Viewer или progress (раньше известная как cv). Программа написана на С и ищет выполняемые в данный момент в системе программы такие как: mv, cp, dd, tar, unzip и т д и отображает процент скопированных данных. Второе, более интересное. Мы можем направить данные через туннель pv, который будет считать с какой скоростью они передаются и сколько еще осталось. Рассмотрим сначала первый способ.
Содержание статьи:
Прогресс команды Linux с помощью progress
Установка progress
Эта утилита не поставляется с системой по умолчанию. Но установить ее очень просто, программа есть в официальных репозиториях большинства дистрибутивов. Например, в Ubuntu:
В других дистрибутивах она может быть более старой версии и назваться cv. Также вы можете собрать программу из исходников. Единственная зависимость — библиотека ncurces. В Ubuntu 16.04 ее можно установить такой командой:
В прежних версиях Ubuntu:
В Fedora и CentOS:
Когда удовлетворите зависимости утилиты, выполните следующую команду для загрузки исходников с GitHub:
Затем распакуйте полученный архив:
Измените текущий каталог с помощью cd:
Запустите сборку и установку:
Программа готова к работе.
Смотрим прогресс команды с помощью progress
После завершения установки запустите progress следующей командой:
В результате получится что-то вроде:
Теперь давайте запустим копирование видео из папки на рабочий стол и посмотрим что произойдет:
Команда progress покажет прогресс копирования cp:
Выполним progress еще раз:
Как видите, утилита показывает информацию о прогрессе копирования файла, процент скопированных данных, количество скопированных данных и общий размер файла. Это очень полезно при копировании больших файлов, например, при копировании фильмов или образов дисков. То же самое будет если запустить dd, mv, tar, zip или другую подобную утилиту.
В утилиты есть много полезных опций. Опция -w заставляет программу показывать время, оставшееся до окончания операции:
Если вы хотите видеть упрощенный вывод без дополнительных сообщений используйте опцию -q. И наоборот для показа всех предупреждений и ошибок воспользуйтесь -d. Например, лучше использовать cv со следующими опциями:
Вы можете отслеживать состояние процесса пока он запущен:
Если вы хотите постоянно наблюдать за прогрессом всех команд используйте опцию -М:
Или ее эквивалент:
Очень популярный вот такой вариант:
Также можно посмотреть прогресс linux только нужной программы, например, прогресс загрузки файла в firefox:
Или проверить активность web-сервера:
Способ второй — создание туннеля
То, что мы рассмотрели выше — не единственный способ посмотреть прогресс команды linux. Еще есть утилита pv. Она намного проще и выполняет только одну задачу — считает все данные проходящие через нее. Может читать поток из файла или стандартного ввода.
Поэтому ее можно использовать чтобы посмотреть прогресс выполнения команды в Linux. Например, создадим такой туннель для dd:
Здесь мы выдаем содержимое нужного нам файла на стандартный вывод, передаем утилите pv, а затем она отдает его другой утилите, которая уже выполняет запись в файл. Для cp такое сделать не получиться, но мы можем поступить немного по-другому:
Готово, здесь мы тоже получим прогресс команды копирования.
Выводы
Чтобы использовать всю мощь Linux пользователям часто приходится работать в командной строке. Чаще всего мы смотрим содержимое, копируем файлы, распаковываем архивы. В этой инструкции мы рассмотрели утилиту process, которую можно использовать для просмотра прогресса dd и других системных команд.
Мне всегда было интересно посмотреть прогресс копирования cp для больших файлов. Честно говоря, я часто имею дело с большими файлами при просмотре фильмов на своем ноутбуке.
Источник
dd, прогресс
Когда ддшником снимается образ, нет варианта видеть, сколько уже снято/сколько осталось? А то запускаешь снять, например, 80Гб диск и думаешь — 10 лет это займет или 20 минут.
// Грусть и пичаль обуревают меня. Новое поколение совсем обленилось.
man dd, там написано
pkill -x -USR1 dd
Бесполезно. У них в bashrc прописан
sudo killall -USR1 dd
Можешь ещё посмотреть в сторону pv.
killall -USR1 dd
как будет выглядеть команда?
pv|dd if=. of=. так?
Нет, как-то так: dd if=/dev/zero of=/dev/sda | pv
dd_rescue используй его
А смотреть размер результирующего файла не комильфо?
Можно ему kill’ом какой-то хитрый знак подать, он напечатает прогресс в stderr.
Но я пользуюсь pv. Пайпинг — отличная вещь, используешь pv вместо cat, а dd будет брать данные из stdin.
Я бы сделал так:
есть три решения:
1. использовать dcfldd — это более современная модификация утилиты dd, показывает прогресс операции поблочного копирования в реальном времени.
2. запустить в другом терминале команду watch -n 1 killall -USR1 dd , а затем снова переключиться на терминал с запущенным dd.
3. использование утилиты pv (пример: dd if=/dev/sda2 | pv > /home/z/sda2.img ).
* скорость копирования данных также зависит от параметра bs (размер блока данных) который вы передаете dd, задавайте bs равным кэшу диска (пример:dd if=/dev/sda of=/dev/sdb conv=noerror,sync bs=32M)
Источник
VS Web School
23 мая 2015 г.
Команда «dd» как швейцарский нож
Как следить за ходом работы команды dd?
Вариант 1
Использование команды pv
Установить pv и поместить его между входом/выходом команды dd
Из описания пакета:
pv — Pipe Viewer — это инструмент терминала на основе мониторинга прогресса данных через трубопровод.
pv может быть вставлен в любой трубопровод между двумя процессами, чтобы дать визуальную индикацию о том, как долго длится процесс и как близко к завершению.
sudo dd if=/home/vlad/Desktop/images/ubuntu.img | pv | sudo dd of=/dev/sdb |
Результат:
45,12MB 0:00:15 [ 450kB/s] [ ] |
Вариант 2
Использование команды kill
Также, вы можете следить за ходом dd, используя команду kill
Чтобы увидеть прогресс работы dd, откройте другой терминал и введите:
kill -USR1 $(pgrep ^dd) |
Если бы вы хотели получать регулярные обновления о прогрессе dd, то введите:
watch -n5 ‘sudo kill -USR1 $(pgrep ^dd)’ |
watch будет исследовать процесс dd каждые -n секунд (-n5 = 5 секунд) и выводить отчет без остановки.
Обратите внимание на правильные одиночные кавычки в команде выше.
Команда создания файла подкачки
Введите следующую команду, чтобы создать файл подкачки на 2GB Ubuntu:
sudo dd if=/dev/zero of=/swapfile bs=1G count=2 |
Команда cat вместо dd
cat ubuntu.iso > /dev/usb |
Иногда нужно быстро что-то проверить (например, создать большой файл). Вы можете сделать это так:
Источник
Команда dd и все, что с ней связано
В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.
Начну с небольшого примера, наглядно иллюстрирующего основные параметры команды:
# dd if=/dev/urandom of=/dev/null bs=100M count=5
Параметры:
- if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
- of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
- bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
- count: как раз то число, которое указывает: сколько кусочков будет скопировано.
Таким образом, описанная команда читает 5*100 мегабайт из устройства /dev/urandom в устройство /dev/null. Придавая этой команде смысловую нагрузку получается, что система сгенерирует 500 мегабайт случайных значений и запишет их в null устройство. Конечно, единственное, что сделает эта команда: нагрузит процессор на несколько секунд. Рассмотрим примеры из практики:
Создание образа диска:
# dd if=/dev/cdrom of=image.iso
Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:
# dd if=/dev/cdrom of=image.iso conv=noerror
Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем «-o loop»:
# mount -o loop image.iso /mnt/image
Если что-то не получается, процесс разбивается на 2 уровня:
# losetup -e /dev/loop0 image.iso
# mount /dev/loop0 /mnt/image
Если и так не работает, значит файловая система образа полетела.
Работа с носителями информации
Очень простое, хоть и не оптимальное решение клонирования жесткого диска:
# dd if=/dev/sda of=/dev/sdb bs=4096
Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).
Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:
# dd if=/dev/DEVICE | ssh user@host «dd of=/home/user/DEVICE.img».
Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:
# dd if=/dev/zero of=/dev/DEVICE
Думаю, понятно на что нужно заменить DEVICE. После проведения лекций по Linux, я очень тщательно стал следить за тем, что пишу.
Проверить можно тем же dd, но преобразовав данные в hex:
# dd if=/dev/sda | hexdump -C
Должны посыпаться нули.
MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так:
# dd if=/dev/sda of=mbr.img bs=512 count=1
Восстановить можно проще:
# dd if=mbr.img of=/dev/sda
Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.
При помощи dd можно генерировать файлы, а затем использовать их как контейнеры других файловых систем даже в зашифрованном виде. Технология следующая:
При помощи dd создается файл, забитый нулями (случайными числами забивать не рационально: долго и бессмысленно):
# dd if=/dev/zero of=image.crypted bs=1M count=1000
Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:
# modprobe cryptoloop
# modprobe blowfish
Ассоциация образа с блочным устройством со включенным шифрованием:
# losetup -e blowfish /dev/loop0 image.crypted
Команда запросит ввести пароль, который и будет ключем к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:
# mkfs.ext2 /dev/loop0
# mount /dev/loop0 /mnt/image
Образ готов к записи данных. После завершения работы с ним, нужно не забыть его отмонтировать и отключить от блочного loop устройства:
# umount /dev/loop0
# losetup -d /dev/loop0
Теперь шифрованный образ готов.
Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT’шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.
Источник