저는 기부/재활용을 위해 오래된 노트북을 많이 닦아왔습니다. 이를 위해 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
머리말: 프로토타입으로 사용하고 토론을 촉진하기 위한 예시로 사용하십시오.
하나 수정했어요펄 스크립트나는 그것을 사용하여 대용량 파일(>TB)에 대해 더 빠른 md5sum을 만들고 (매우 조잡한) bash 스크립트를 만들어 일부 작업을 수행한 다음 호출했습니다. 이것의 기본 아이디어는 다음과 같습니다.
- 디스크 파티션 테이블 지우기
- 모든 디스크에 걸쳐 있는 단일 파티션을 생성하고 포맷합니다.
- 파티션을 마운트하고 즉시 단일 파일로 채웁니다(잘못된 할당).
- 여기서 중요한 부분은 파일을 처리하고 이를 고정된 수의 청크로 나누고 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]