その他
    ホーム 技術発信 DoRuby サーバのデータ完全消去をやってみた

    サーバのデータ完全消去をやってみた

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    もうすぐ2年目が終わってしまって、新人と言えなくなってきた中西です。

    少し前にサーバーの撤去を行う機会があり、その時にサーバーのデータ完全消去の方法を色々と調べて行ったので、まとめてみました。

    今回行ったデータ消去の方法は、インストールCDのレスキューモードをもちいた方法です。

    ちょうど、サーバー構築用のSentOS6のiosデータが入ったCDがあったため、それをもちいて行いました。

    事前準備物

    ・LinuxOSのCD(今回はCentOS6.6のisoイメージのインストール用CDを使用)

    ・データを完全消去するサーバー

    ・任意のディスプレイ

    ・任意のキーボード、マウス

     実行手順

    今回行った時の手順を説明します。

    前準備

    1. サーバー起動

    2. 任意のユーザーでログイン

    3. ディスク配置の確認

    $ df -kl
    Filesystem                   1K-blocks     Used Available Use% Mounted on
    /dev/mapper/VolGroup-lv_root  18102140 16079472   1103116  94% /
    tmpfs                           510172        0    510172   0% /dev/shm
    /dev/sda1                       495844    32670    437574   7% /boot
    

     例えば、上記のように表示されている場合、接続されているHDDはsdaとなる。

     消去対象になるため、間違えないようにメモしておく。

    4. CDをドライブにセット後、サーバー再起動

     $ reboot
    

    レスキューモードで起動(CentOS6.6の場合)

    ※OSによりレスキューモードの起動方法が異なる場合があるので要確認

    1. 青画面に「Welcome to CentOS 6.6!」と表示されるページで「ESC」キーを押す

     (中段にいくつか選択肢があり、下部に「Automatic boot in ○○ seconds…」とカウントダウンされているページ)

    2. ブートオプション画面(「boot:」と表示される画面)が開くので、「linux rescue」と入力する

    3. Choose a Language画面で、「Japanese」を選択する(Englishや他言語でも可)

    4. Language Unavailable画面で、「OK」を押す(言語によっては、表示されない。Japaneseは表示される)

    5. Keyboard Type画面で、「jp106」を選択する

    6. Setup Networking画面で、「No」を選択する

    7. Rescue画面で、「Skip」を選択する

    8. 「Shell」や「reboot」などの選択肢が表示される画面で、「Shell Start shell」を選択する

    9. 画面下部に「bash-4.1#」と表示される

    ディスクのパーティションを切りなおす

    1. fdiskコマンドを起動(fdisk -l)

    # fdisk /dev/sda 
    

    2. “p”コマンドでパーティションを確認する

    コマンド (m でヘルプ):p
    〜略〜
    デバイス Boot Start End Blocks Id System
    /dev/sda1 * 1 13 104391 83 Linux
    /dev/sda2 14 913 7229250 8e Linux LVM
    

     例えば上記の場合、パーティションは1、2の2つとなる。

    3. “d”コマンドでパーティションを削除する

     手順2の場合、下記の用に2から削除を行う。

    コマンド (m でヘルプ):d
    コマンド (m でヘルプ):2
    

    4. 手順3を「1」まで繰り返す

    5. “p”コマンドでパーティションがないことを確認する

    コマンド (m でヘルプ):p
    

    6. 作業結果を”w”コマンドでディスクに書き込む

    コマンド (m でヘルプ):w
    

    ディスクの初期化(0埋め)

    1. ディスク全域に”0″で埋めることで、情報を全て消去する

    # dd if=/dev/zero of=/dev/sda
    

     上記は1度だけ”0″で上書きするもの。

     現状の15GBytes以上のハードディスクに関しては、データの完全消去は1度の上書きで十分であると言われている。

     アメリカ国立標準技術研究所(NIST)が2006年に発表したSpecial Publication 800-88の7ページでは、次のように述べられている。『2001年以降の(15GBytes以上の)集積度の高いATAハードディスクにおいては、データの完全消去はディスク全域に1回のみ上書きすれば事足りる』。

     また、Center for Magnetic Recording Researchは、次のように述べている『データの完全消去はディスクに対する1回の上書きのことである。アメリカ国家安全保障局も推奨要綱にて、同相信号除去比(CMRR)試験をした結果、複数回の上書きは何ら安全性の向上に優位な差をもたらさず、1回の上書きで十分であることを認めている』。

    https://ja.wikipedia.org/wiki/

     より、安全になるか分からないが複数回の上書きを行いたい場合、shredコマンドをもちいると良い

    # shred -n 3 -z -v /dev/sda
    

     上記shredコマンドは、ランダムな値を3回上書きし、その後”0″で上書きを行っている。

     上記をddコマンドで行う場合、下記のようになる。

    # dd if=/dev/urandom of=/dev/sda
    # dd if=/dev/urandom of=/dev/sda
    # dd if=/dev/urandom of=/dev/sda
    # dd if=/dev/zero of=/dev/sda
    

    消去の確認

    1. 「exit」と入力することで「Shell」や「reboot」などの選択肢が表示される画面に戻る。

    2. 「reboot」を選択し、CDを取り出す

    3. OSが立ち上がらないことを確認する

     ddコマンドによるデータ全消去における注意点

    ddコマンドは下記コマンドでデータの全消去が行える。

    # dd if=/dev/zero of=/dev/sda
    

    この場合、全ての設定がデフォルト値となる。

    この中には、1度に読み込むまた、書き込みバイト数も設定されている。

    デフォルトの読み込み及び書き込みのバイト数は512byteであるため、大容量のディスクにたいしてコマンドを実行する場合、多大な時間がかかってしまう。

    1度の読み込み及び書き込みのバイト数を設定するには下記のようにすればよい。

    # dd if=/dev/zero of=/dev/sda bs=32M
    

    上記では、1度の読み込み及び書き込みのバイト数を32Mbyteに設定している。

    このバイト数は単純に大きくすれば早くなるという訳ではなく、スペック等により、大きくしすぎると逆に処理が遅くなる場合があることに注意してもらいたい。

    32Mから256Mほどがちょうど良い設定値だと言われている。

    また、読み込み及び書き込みのバイト数はそれぞれ個別に設定することもできる。

    下記に一覧を表示する。

    ・bs=[バイト数]:1度に読み込み及び書き込めるバイト数の設定

    ・ibs=[バイト数]:1度に読み込めるバイト数の設定 

    ・obs=[バイト数]:1度に書き込めるバイト数の設定

     ddコマンドによるデータ全消去にかかる時間

    300GBのハードディスクを消去した時

    # dd if=/dev/zero of=/dev/sda
    

    ・9836.86s

    ・30.4MB/s

    # dd if=/dev/zero of=/dev/sda bs=256M
    

    ・1736.51s

    ・172MB/s

    もう少しbsの値を抑えてもそれほど時間は変わらなかったかもしれません。

    環境により異なるため、あくまで1例としてご覧ください。