slacknews.org Всичко за Slackware

6сеп/090

Как да правим всичко с dd ?

Синтаксиса на командата е :

dd if=<source> of=<target> bs=<byte size>(обикновено степен на 2, но не по-малко от 512 байта) skip= seek= conv=<conversion>.

Source са входните данни. Target е мястото, където се записва информацията. Ако направите грешка и им размените местата, може да затриете много информация.

Примери :

Копиране партишън от един хард диск на друг :

dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror

sda2, sdb2 са партишъните. В този случай копираме sda2 върху sdb2. Ако sdb2 не съществува, dd ще започне да пише от началото на диска и ще го създаде. Много е важна последователността на if и of. Може да запишете празен диск върху такъв с информация ако не внимавате.

Създаване на iso image на CD:

dd if=/dev/hdc of=/home/someone/mycd.iso bs=2048 conv=notrunc

CD секторите са дълги 2048 байта и тази команда копира сектор по сектор. Резултата е файл върху хард диска със съдържанието на CD. Може да монтирате копието с "mount -o loop /home/someone/mycd.iso /mnt/mycd". Файловата система ще вижда файловете и директориите в копието в директорията /mnt/mycd. Може да променяте съдържанието но копието, но няма да можете да го запишете понеже dd не може да пише по CD-та. Ще трябва да използвате друга програма за да записвате.

Копиране на дискета :

dd if=/dev/fd0 of=/home/sam/floppy.image bs=2x80x18b conv=notrunc

или

dd if=/dev/fd0 of=/home/someone/floppy.image conv=notrunc

18b указва 18 сектора по 512 байта, 2x умножава големината на сектора с броя на главите, а 80x указва цилиндрите - общо 1474560 байта. Тази команда чете наведнъж 1474560 байта от /dev/fd0 и после пише 1474560 байта в /home/someoune/floppy.image.

Изписване на "I loveBeer" вертикално.

echo -n "I love Beer" | dd cbs=1 conv=unblock 2> /dev/null

Клониране на хард диск:

dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror

В този пример копираме sda върху sdb. Важно не да объркате двата диска. noerror указва да се продължи копирането дори да има грешка. Обикновено dd спира при грешка.

За да видим виртуалната памет

dd if=/proc/kcore | hexdump -C | less

показва по един екран на терминала

За да видим какви файлови системи имаме

dd if=/proc/filesystems | hexdump -C | less

Заредени модули

dd if=/proc/kallsyms | hexdump -C | less

Таблицата с прекъсванията

dd if=/proc/interrupts | hexdump -C | less

Колко секунди е работила машината

dd if=/proc/uptime | hexdump -C | less

Партишъни и техните големини в kb

dd if=/proc/partitions | hexdump -C | less

Статистики за паметта

dd if=/proc/meminfo | hexdump -C | less

За да направим файл с 100 произволни байта

dd if=/dev/urandom of=/home/someone/myrandom bs=1 count=100

Записване на произволна информация върху файл преди да го изтрием

първо правил ls -l , за да видим колко е голям файла. В този случай е 3769

ls -l afile
-rw------- ... 3769 Nov 2 13:41 <filename>

dd if=/dev/urandom of=afile bs=3769 count=1 conv=notrunc

Това ще запише произволни символи върху файла.

Копиране на партишън във файл. Не копирайте партишън върху себе си.

dd if=/dev/sdb2 of=/home/someone/partition.image bs=4096 conv=notrunc,noerror

Възстановяване на партишън от файл:

dd if=/home/someone/partition.image of=/dev/sdb2 bs=4096 conv=notrunc,noerror

Конвертиране на символите във файл от малки в големи:

dd if=filename of=filename conv=ucase

Копиране на рам паметта във файл:

dd if=/dev/mem of=/home/someone/mem.bin bs=1024

/dev/mem представлява системната памет. Всъщност може да копирате каквото си искате от там с dd.

Ако искате да направите копие на партишън но на друга машина:

Използвайте ssh(secure shell), за да копиранте от отдалечената машина.

ssh 192.168.xx.yy "dd if=/dev/sda ibs=4096 conv=notrunc,noerror" | dd of=/dev/sda obs=4096

Използвайте ssh, за да копирате на отдалечената машина.

dd if=/dev/sda ibs=4096 conv=notrunc,noerror | (ssh 192.168.xx.yy dd of=/dev/sda obs=4096)

Операнди

Тези операнди се поддържат:

if=file

Указва входните данни. Ако не е указано взима стандартния вход stdin.

of=file

Указва изходящите данни. Ако не е указано взима стандартния изход stdout. Ако не е указано conv=notrunc, съдържанието на изходящия файл ще бъде изтрито преди да започне операцията.

ibs=n

Указва големината в на блокът на входните данни в байтове. Ако не е указано е 512.

obs=n

Указва големината в на блокът на изходните данни в байтове. Ако не е указано е 512.

bs=n

Указва едновременно големината на блокът на входните и изходните данни да е n байта.

cbs=n

Определя големината на блока за преобразуване в байтове. По подразбиране е 0. Ако cbs= е опропуснато или има стойност 0, използването на block или unblock има незнаен ефект.

files=n

Копира и съединява n входни файла преди да приключи. Има смисъл само като се записва върху магнитна лента или подобни устройства.

skip=n

Пропуска n блока от началото на входния файл преди да започне копирането.

iseek=n

Пропуска n блока от началото на входния файл преди да започне копирането. Използва се, когато горната опция е много бавна.

oseek=n

Пропуска n блока от началото на изходния файл преди да започне копирането.

seek=n

Пропуска n блока от началото на изходния файл преди да започне копирането.

count=n

Копира само n блока.

conv=value[,value. . . ]

Където value са разделени със запетая символи от този лист:

ascii

Конвертира EBCDIC в ASCII.

asciib

Конвертира EBCDIC в ASCII, като използваBSD-съвместими символи.

ebcdic

Конвертира ASCII в EBCDIC. Ако конвертирате ASCII със еднаква дължина без нови редове добавете pipeline с dd conv=unblock преди това.

ebcdicb

Конвертира ASCII в EBCDIC, като използваBSD-съвместими символи. Ако конвертирате ASCII със еднаква дължина без нови редове добавете pipeline с dd conv=unblock преди това.

block

Взима входа като записи, завършващи с нов ред или край на файл (EOF), без значение колко е голям входния блок. Всеки запис се конвертира в запис с определена дължина. Премахват се символите за нов ред. Добавят се SPACE символи към редовете, които са по-къси от големината на блока. Тези редове които имат повече символи отколкото е големината на блока се отрязват, като се разпечатва номера на отрязаните редове.

unblock

Конвертира записите с еднаква дължина в записи с променлива дължина.

lcase

Променя символите за големи букви, определени от LC_CTYPE в малки букви.

ucase

Променя символите за малки букви, определени от LC_CTYPE в големи букви.

swab

Разменя всяка двойка входни байтове. Ако входните байтове са нечетен брой, се пропуска последния ред.

noerror

Не спира при грешка. Когато има грешка при копирането, се изкарва съобщените за грешка, последвано от настоящия брои на блоковете на входния и на изходния файл. Ако е указано sync липсващите данни се заменят с нулеви байтове, иначе входния блок ще се пропусне при записаването.

notrunc

Не изтрива съдържанието на изходния файл преди да започне да копира. Запазва съдържанието на данните, които са не са записани от dd процеса, който извършва операцията. (See also the preceding of=file operand.)

sync

Прави всеки входен блок с големината на ibs= buffer, като при нужда добавя нулеви байтове.
Ако са използвани пове4е от един conv= операнд, се използва последната двойка operand=value.
За bs=, cbs=, ibs=, и obs= операндите, приложението трябва да предостави големината в байтове от вида:

положителен десетичен символ
положителен десетичен символ последван от k, указващ умножение с 1024
положителен десетичен символ последван отM,указващ умножение с 1024*1024
положителен десетичен символ последван отb,указващ умножение с 512
два или повече положителни десетични символа (с или без k или b) разделени от x, указваще произведението на символите.

Possibly Related Posts: