简体   繁体   中英

Use DD to write specific file recursively

I have a hard drive that I want to overwrite, not with null bytes, but with a message.

48 69 64 64 65 6e 20 = "Hidden "

Here's my command thus far:

echo "Hidden " > /myfile
dd if=/myfile of=/dev/sdb bs=1M

Note: I have also tried an assorment of parameters such as count and conv to no avail

Now, this is fine. When I run:

dd if=/dev/sdb | hexdump -C | less

I can see the first few bytes written over, however, the rest is unchanged. I'd like to recursively write "Hidden " to the drive.

I don't have a spare disk to try this out on, but you can use the yes command to continuously push your string into the pipe :

yes "Hidden" | dd of=/dev/sdb

I assume once dd has written the whole disk, then it will close the pipe and this command will finish.

The above will newline-delimit the "Hidden" string. If you want it space-delimited, as in the question you can do:

yes "Hidden" | paste -d' ' -s - | dd of=/dev/sdb

Or if you want it null-delimited:

yes "Hidden" | tr '\n' '\0' | dd of=/dev/sdb

If you don't specify if parameter, input is read from stdin. This allows you to do something like this:

dd of=/dev/sdb < for((i=0;i<100000;i++)); do echo 'Hidden '; done;

The value of 100000 obviously needs to be at least diskSizeInBytes / strlen('Hidden ') .

Given the consequences I didn't test this for you but it ought to work ;)

dcfldd , a fork of dd, has some additional features that you may find useful. For example, your problem would be solved by:

dcfldd textpattern="Hidden " of=/dev/sdb bs=1M

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM