ドライブを消去するためにddにurandomを供給し、作業速度を上げるために他のすべてのブロックをスキップできますか?

ドライブを消去するためにddにurandomを供給し、作業速度を上げるために他のすべてのブロックをスキップできますか?

私は寄付/リサイクルのために古いラップトップをたくさん拭きました。これを行うには、USBまたはCDからLinuxライブCLIから起動し、それを使用してdd if=/dev/urandom of=/dev/sda status=progressそのデータを上書きします。私の問題は、すべてのラップトップでこれに長い時間がかかるということです。特に、一部のラップトップは非常に古く、遅いです。 ddに他のすべてのブロックを上書きするように指示できますか?それでは、処理にかかる時間を効果的に半分に短縮できますか?これを行うのに最適なコマンドは何ですか?

私たちの会社には実際のデータセキュリティポリシーはありません。しかし、これを行うと、ドライブから情報を簡単に回復できますか?

答え1

ddドライブにブロックを書き込んでハードドライブ(特にSSD)を「削除」することはお勧めできません。代わりにATA Secure Eraseコマンドを使用してください(ドライブがサポートしている場合)。バラよりKernel.org Wiki - ATAセキュリティの削除もっと学ぶ。

答え2

はじめに:プロトタイプとして使用し、議論を促進するための例として使用してください。

一つ修正しました。Perlスクリプト私はそれを使って大容量ファイル(> TB)のためのより速いmd5sumを作成し(非常に粗雑な)bashスクリプトを作成し、いくつかのタスクを実行して呼び出しました。これの基本的なアイデアは次のとおりです。

  1. ディスクパーティションテーブルの消去
  2. すべてのディスクにまたがる単一のパーティションを作成してフォーマットします。
  3. パーティションをマウントし、すぐに単一のファイルでいっぱいにします(誤った割り当て)。
  4. ここで重要なのは、ファイルを処理し、それを固定数のチャンクに分割し、4kBを任意のデータ(この場合は数字のみ)で上書きすることです。

ここでは、処理するブロックとバイト数を具体化し、ブロックをランダムに移動し、乱数を生成するために暗号化されたセキュリティライブラリを使用し、防御スクリプトを使用するなど、もっと多くのことが必要です。

プロトタイプに対する雑談は十分です。

これはperlwipe.plです:

#!/usr/bin/perl

use strict;
use Time::HiRes qw[ time ];

sub round_potenza {
    my $rounded = 0;
    my ($x,$p) = (@_,2);
    my $log = log($x)/log($p);
    $log = int($log+1) if $log != int($log);
    if ( abs($x-($p**$log))> abs($x-($p**int($log-1))) ) {
    $rounded = $p**($log-1);
    } else {
    $rounded = $p**$log;
    }
    return $rounded;
}

sub quickWipe {
    my $fh = shift;
    my $charset = shift;
    my $pos = 0;
    my $size = -s $ARGV[0];
    my $chunkraw = int($size/50000);
    my $chunk = round_potenza($chunkraw);
    printf $chunk;
    until( eof $fh ) {
        seek $fh, $pos, 0;
        my $garbage = rand(10);
        read( $fh, my $block, 4096 ) or last;
        print $fh $garbage;
        $pos += $chunk;
    }
}

open FH, '+<', $ARGV[0] or die $!;
printf "Processing $ARGV[0] : %u bytes\n", -s FH;

my $start = time;
my $wipe = quickWipe( *FH );
printf "Fast Wipe took %.6f seconds\n", time() - $start;

以下は非常に説明が必要なBashスクリプトwipskipping.shです。

#!/bin/bash
#HANDLE WITH CARE!
if [ $# -eq 0 ]; then
        echo "You like to live dangerously."
        exit 0
else
        DEVICE="/dev/$1"
        PARTITION="1"
        PARTEDCMD="/tmp/partedcmd"
        MOUNTPOINT="/tmp/mountpoint"
        /sbin/wipefs -a -f $DEVICE
        echo mklabel gpt> $PARTEDCMD
        echo mkpart primary 0% 100%>> $PARTEDCMD
        echo quit>> $PARTEDCMD
        /sbin/parted $DEVICE <$PARTEDCMD
        /sbin/mkfs.ext4 -F $DEVICE$PARTITION
        mkdir $MOUNTPOINT
        mount $DEVICE$PARTITION $MOUNTPOINT
        /usr/bin/fallocate -l 5000G $MOUNTPOINT/sparsefile
        /usr/bin/perl perlwipe.pl $MOUNTPOINT/sparsefile
fi

現在、すべての制限と問題にもかかわらず、これは私の研究室のランダムソースのddより約10倍速いです。

使用法:./wipeskipping.sh sd[X]

関連情報