0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ゼロフィルよりは安心でurandom系よりは早いディスク消去方法

Last updated at Posted at 2021-08-28

仕事で使っていたHDDの中のデータを復元できない形で消去する必要が生じたので方法を考えてみた。

削除対象は400TB程度のストレージ装置でNFSでLinux (CentOS)にマウントされている。

既存のソフトウエア、方法など

ググるとshredを使う方法、ddを使ってゼロフィルやurandomのデータを書き込む方法などがある。上書き回数については複数回上書きする方がいいという噂もあったが、Wikipediaによると、最近のHDDは1回上書きするだけで事足りるらしい。
それならばddでゼロフィルするだけでも事足りるのだろうが、やはり一律ゼロでは残留磁気が残ってしまうような気がして心もとない。かといってshredやurandomはランダム生成に時間がかかりすぎて消去期限に間に合わないことが分かった。

作成したスクリプトの動作

  1. はじめにurandomで1GB分のランダムデータを生成する。
  2. 生成した1GB分のデータをcatで繰り返しつなげて巨大な数個のファイルでディスク領域全体を上書きする。
  3. ディスク全体にデータを書き終わると空き容量がない旨のエラーが大量に発生して動作が終了する。
  4. 必要に応じてランダムデータのファイルを削除する。

1GB分もランダムデータをcatでつないでしまえば、次の1バイトにどんなデータが来るか予測するのは非常に困難なので残留磁気を読み取るのは事実上不可能と考えた。

スクリプト

10T分ランダムデータで埋める場合

randomfill.bash
# !/bin/bash
OUTDIR=OUT # 巨大ファイルの出力先ディレクトリ
mkdir -p $OUTDIR

function main(){
    make1G orig_1G # urandomデータを1GB分カレントディレクトリに保存
    copy1T orig_1G data_1T 10 # 上で作成したデータをcatで1TB分つなげたファイルを10個作成
}

function make1G(){# urandomデータを1GB分カレントディレクトリに保存
    file=$1
    echo "Making a 1GB file: $file"
    time head -c 1000m /dev/urandom > $file
    echo "Done"
}

function make1T(){# 上で作成したデータをcatで1TB分つなげたファイルを作成
    infile=$1
    outfile=$2
    echo "Making a 1TB file from $infile to $outfile"
    touch $outfile
    for ((i=0; i<1024; i++))
    do
        cat $infile >> $outfile
    done
    echo "Done"
}

function copy1T(){# 1TBのファイルを指定した数だけ作成
    file=$1
    outbase=$2
    num=$3
    for ((j=0; j<$num; j++))
    do
        outname=$OUTDIR/$outbase.$j
        if [ ! -r $outname ]
        then
            make1T $file $outname # TB級ストレージの場合
#           cat $file > $outname # 数百GB級ストレージの場合
#           dd if=$file of=$outname bs=64M # ddは遅かった
        fi
    done
}

main

このスクリプトの利点

  • 空き領域のみランダムデータで上書きするので残しておきたいデータがある場合にも使える。
  • bash on windows で試したところ、フルフォーマットと同程度の速度でデータ消去が完了した。
  • 同じプログラムを同時に走らせると別々のファイル名で書き込みを行うので、RAIDなどで複数スレッド同時書込みできる環境では増速も可能。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?