dd – Destroyer of Disks (2008)
noah.org
noah.org
He's right that a single overwrite of zero is probably good enough to make sure that data is gone, but it's probably not enough to persuade other people that it's gone. A few passes of pseudo random data is probably better if you need to persuade other people that the data has gone.
But if it's really important drive wiping is what you do to protect the drives until you get a change to grind them.
Also for SSDs, using the secure erase method is important because of overprovisioning and garbage collection. If that is not available, on most SSD algorithms, doing two full pass writes (with random sector data if drive supported compression) will get you close to wiping out all contents as possible.
https://github.com/Drive-Trust-Alliance/sedutil/blob/master/...
# openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt </dev/zero \ | pv -bartpes <DISK_SIZE> | dd bs=64K of=/dev/sd"X"
To randomize the drive/partition using a randomly-seeded AES cipher from OpenSSL (displaying the optional progress meter with pv): https://wiki.archlinux.org/index.php/Securely_wipe_disk/Tips...
Then I take out the drill press and make a bunch of holes.
I believe there is a long standing bounty for anyone who can retrieve useful data from a drive that had been zero'd once. No one has been able to thus far.
A lot of the disk wiping "culture" stems from a much earlier time when disk technology was less reliable, especially in regards to writes. Dan Gutmann himself says that the Gutmann method is long antiquated and only worked with MFM/RLL encoded disks from the 80s and early 90s.
Perhaps instead of humoring these people, we should be educating them. A zero'd out disk is a wiped disk until someone proves otherwise.
Extra caution would be shredding the drive or some other non-wipe method. At work for example, we zero out drives and then those drives get physically destroyed by a vendor.
This gets misunderstood as "you need to do 35 passes of these patterns". You don't, Gutmann recommends a couple of overwrites of random data, and a single overwrite of zeros is probably enough.
Not so much that the drive manufacturers are engaging in malfeasance (though that's certainly not off the table), but that it's not unheard of for certain agencies in certain governments to crock low level system components (intercepting them in shipping and so forth) so they work against the user.
..or just plain ignorance. A study indicates that back in 2011, half of the major drive vendors weren't doing the erase correctly. https://www.usenix.org/legacy/events/fast11/tech/full_papers...
But yeah, you're right. If you ever have reason to invoke the secure erase command, you're probably in a position where the next step is throwing the drive in a shredder.
You only need one.
https://en.wikipedia.org/wiki/Data_erasure#Number_of_overwri...
How difficult could it be to write a dd command from scratch that does include progress-reporting? I mean, dd is simply reading blocks of data from one file descriptor and writing them to another.
dd if=/dev/zero count=10 bs=1M | pv > file.bin
The other way to see progress on `dd` is to issue a signal 3 (USR1, iirc) to the dd process. kill -3 <dd pid>
Be careful with this on some distributions and compilations of DD. Purely anecdotal evidence, but in college I had a friend imaging a very large (5400RPM) drive and about 10 hours into the process he lamented that he wished he could see how far along it was.
I popped open a terminal, ps -A |grep dd, kill -USR1 $PID, and it just exited.
He was rather pissed that I lost him 10 hours.
$ pgrep dd
22230
$ kill -USR1 22230
- and `dd` prints its progress.Anyway, this "trick" is mentioned on the man page, which isn't that long. No additional tool required.
(This has caught me out before. Oh how I wish these things were standardised...)
dd if=/dev/zero of=/dev/null status=progress 4814691328 bytes (4,8 GB) copied, 4,000000 s, 1,2 GB
It's only the size copied and the speed but it's usually enough.
sudo cat ubuntu-14.04-desktop-amd64.dmg >> /dev/sda1
I believe this will attempt to write data after the of the the block device, which almost by defintion will fail.However, I often do the following, which works pretty well:
sudo cat ubuntu-14.04-desktop-amd64.dmg > /dev/sda1 fd = open("/dev/sda", O_WRONLY|O_CREAT|O_NOCTTY|O_APPEND, 0644);
pos = lseek(fd, 0, SEEK_CUR);
-> pos = 0
http://hastebin.com/abuhiwivoz.pl # tmp sudo ./open_sda
Current position after open: 0
Current position after seek to end: 128035676160 sudo sh -c 'blah blah blah >> file'
but I don't like it when I have to do that. blah blah blah | sudo tee -a file
This will do the appending as per your example. If you want to write to the file like people are doing with the Ubuntu image then just drop the append (-a) flag: cat ubuntu-14.04-desktop-amd64.dmg | sudo tee /dev/sda1
Though obviously the `dd` utility is still a better way of writing disk images than any of the above. cat ubuntu-14.04-desktop-amd64.dmg | sudo tee /dev/sda1 sudo tee /dev/sda < ubuntu-14.04-desktop-amd64.dmg pg_dump -U postgres db | ssh user@rsync.net "dd of=db_dump"
mysqldump -u mysql db | ssh user@rsync.net "dd of=db_dump"
... although these days, now that we support attic and borg[1], nobody does things like this anymore. mysqldump -u mysql db | ssh user@rsync.net "cat > db_dump"
Namely, the syntax is one character shorter. (But only because I used whitespace around >).With dd, you can control the transfer units (the size of the read and write system calls which are performed) whereas cat chooses its own buffering. However, this doesn't matter on regular files and block devices. The transfer sizes only matter on raw devices where the block size must be observed. E.g. traditional tape devices on Unix where if you do a short read, or oversized write, you get truncation.
dd if=/dev/zero of=/dev/sdXXX bs=1048576
Question: is there a disadvantage to using a higher blocksize? Is the read/write speed of the device the only real limit?Maybe, depending on the details. Imagine reading 4 GB from one disk then writing it all to another, all at 1 MB/sec. If your block size is 4 GB, It'll take 4000 seconds to read, then another 4000 seconds to write... and will also use 4 GB of memory.
If your block size is 1 MB instead, then the system has the opportunity to run things in parallel, so it'll take 4001 seconds, because every read beyond the first happens at the same time as a write.
And if your block size is 1 byte, then in theory the transfer would take almost exactly 4000 seconds... except that now the system is running in circles ferrying a single byte at a time, so your throughput drops to something much less than 1 MB/sec.
In practice, a 1 MB block size works fine on modern systems, and there's not much to be gained by fine-tuning.
It may well be that the only usable filesystem for it, is FAT32 (and possibly NTFS, not sure on that thou).
perl -e '$file = '/dev/sda';\
$s = -s $file;\
$i = $s/2;\
while(--$i > 0){\
$r = int rand($s);\
system("dd if=/dev/urandom of=$file skip=$r count=1");\
}'Since the worry seems to be speed, here's a tool I wrote to get random bytes about as fast as drives can accept (well, at least spinning disk drives, there might be some flash drives that are faster):
https://github.com/pflanze/fastrandom
I'm expecting you to figure out where this tool goes wrong and produces predictable bytes yourself. Also, please tell me if you do :)
Anyway, even if it isn't secure, it will be enough to foil compression algorithms.
"Give us the encryption keys" "It's not encrypted, I used /dev/urandom" vs "Yes, I wiped it"
And random data is very easy to see.
The people who propose using multiple overwrites are clear that they're talking about making it harder to recover bits. (They're wrong, but it's what they say.)