dd
[
Пред. ] [ Содержание ] [
След. ]
dd
Created Понедельник 28 Август 2017
Параметры bs - указывает сколько байт читать и записывать за один раз;
cbs - сколько байт нужно записывать за один раз;
count - скопировать указанное количество блоков, размер одного блока указывается в параметре
bs;
conv - применить фильтры к потоку данных;
ibs - читать указанное количество байт за раз;
obs - записывать указанное количество байт за раз;
seek - пропустить указанное количество блоков в начале устройства для чтения;(seek=512 пропустить MBR)
skip - пропустить указанное количество блоков в начале устройства вывода;
status - указывает насколько подробным нужно сделать вывод;
iflag, oflag - позволяет задать дополнительные флаги работы для устройства ввода и вывода,
основные из них:
nocache, nofollow.
status=progress dd if=kali-linux-2017.1-amd64.iso of=/dev/sdb bs=512k hexdump -C /dev/sdb1 | head -100
sudo fsck -y /dev/sdb6
sudo fsck.ext3 -p -b 98304 -B 4096 /dev/sdb6
mke2fs -n /dev/sdb6
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
sudo dd bs=4M if=Armbian_5.14_Orangepi_Ubuntu_xenial_3.4.112.raw of=/dev/sdc ---- EXAMPLE ----
To copy blocks 200-299 from the device /dev/hda1 to /home/recover/file1:
dd if=/dev/hda1 of=/home/recover/file1 bs=1024 count=100 skip=200 if input file or device
of output file or device
bs blocksize (will be 1024 for most linux fs's)
count number of blocks to copy(
количество блоков для копирования)
skip number of blocks to skip from the start of the device(
количество блоков для пропуска с начала устройства)
Команда dd и все, что с ней связано https://habr.com/ru/post/117050/ В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
основные параметры команды:
#
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 status=progress Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:
# 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 Проверить можно тем же dd, но преобразовав данные в hex:
#
dd if=/dev/DEVICE | hexdump -C Должны посыпаться нули.
Операции с MBR 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 Теперь шифрованный образ готов.
sudo dd if=Armbian_5.83_Bananapi_Debian_stretch_next_4.19.38.img of=/dev/sdc bs=512k status=progress
Содержание