はじめに
個人で使用しているPCでは、色々とソフトをインストールして使用感を試してみることが多いこともあり、気づいたら大量の使わないソフトが溜まっていたりします。
そのため、不要なソフトが溜まってきたり、重くなってきたと感じたときにOSのクリーンインストールを行っているのですが、その際に実行するコマンドをよく忘れるのでまとめておこうと思います。
尚、今回実行するコマンドは全てroot権限で実施する必要があるので、sudo等でroot権限で実行するようにしてください。
準備するもの
操作PCが起動しているとフォーマットできないので、DVDやUSBから起動するLinux Live OSを準備します。
OSはお好きなもので良いですが、Ubuntu等であれば、インストーラー起動時にディスクにインストールするか、ディスクインストールせずに使用するかが選択できるため、Live OS用のイメージを探す手間が省けるかと思います。
お好きなLive OSをダウンロードしたら、DVDやUSBに書き込みます。
私はUSBに書き込んで使うことが多いので、以下のソフトを使用してUSBに書き込んで使用しています。
Live OS起動
先ほど作成したDVD、USBを接続してLive OSを起動します。
起動順によってはLive OSが起動してこないので、BIOS設定からDVD、USBからの起動を優先するように変更します。
デバイス名確認
Live OSが起動してきたら、ターミナルを起動して、フォーマットするディスクを確認します。
fdisk -l
/dev/sd[x]や/dev/nvme[x]n[x]のようなデバイスが表示されるため、フォーマットを行うデバイス名を控えておきます。
shredを使用したフォーマット
使用したLive OSにshredコマンドが存在するようであればこちらで実施したほうが良いかと思います。
shredコマンドはディスクの中身を完全削除するためのコマンドで、HDDにもSSDにも対応しています。
完全削除を目的としているため、デフォルトではランダムな値を3回書き込むことで復元できないようにしていますがオプションを付与することでゼロ書き込みを行うことができます。
shredコマンドのオプションは以下。
| オプション | 説明 |
|---|---|
| -v | 詳細情報の表示 |
| -n [回数] | ランダム書き込みの回数 |
| -z | ゼロ書き込みの実行 |
shred -v -n 0 -z /dev/sda
今回はディスクの廃棄ではなく、再利用を想定しているため、ランダム書き込みの回数を0にしてゼロ書き込みを実行することでゼロ書き込みだけ行うようにしています。
ddを使用したフォーマット
**Live OS**にshredコマンドが存在しない場合はdd`コマンドでゼロフォーマットします。
ddコマンドであればLinux系OSであれば入っていないことは無く汎用的に使うことができるので、フォーマット目的以外でも覚えておくと良いです。
| オプション | 説明 |
|---|---|
| if= | 入力ファイル |
| of= | 出力ファイル |
| bs= | ブロックサイズ |
| count= | 繰り返し回数 |
dd if=/dev/zero of=/dev/sda bs=32M
/dev/zeroは**null文字(0x00)**を読み出すことができるデバイスで、出力ファイルでフォーマット対象のディスクデバイスを指定することで、全て0で埋め尽くしたフォーマットが行えます。
尚、/dev/urandomを入力ファイルで指定することで、ランダムな値を書き込むこともできます。
ddコマンド実行時の進捗表示
ddコマンドを実行した場合、処理が終了するまで結果が表示されないため、長い処理を行う場合、どの程度まで処理が進んでいるかが分かりません。
但し、別のウィンドウからUSR1シグナルを送信することで進捗確認ができるので、どの程度フォーマットが進んでいるか確認するのに覚えておくと便利です。
pkill -USR1 dd
77+0 レコード入力
77+0 レコード出力
10334765056 bytes (10 GB, 9.6 GiB) copied, 29.3437 s, 352 MB/s
ddコマンド実行時の最適なブロックサイズ
ddコマンドを実行する際の最適なブロックサイズは、ディスクのキャッシュ容量に合わせると良いそうなので、ディスクのキャッシュ容量が分かれば、ブロックサイズにキャッシュ容量と同様の値を指定すれば良いかと思います。
もしディスクのキャッシュ容量が分からなければ、事前に以下の様なシェルで効率が良いブロックサイズを確認しておくと、ddコマンドでフォーマットする際に早く完了できます。
以下は上記サイトのシェルを基に少し手直しし、大きなサイズのブロックサイズでテストするようにしたシェルになります。
フォーマットしたい対象のディスクをマウントしているパスに合わせてTESTPATH変数のパスを変更してご使用ください。
# !/bin/bash
TESTPATH="/var/tmp"
echo "creating a file to work with"
dd if=/dev/zero of=${TESTPATH}/infile count=1175000
for bs in 1M 2M 4M 8M 16M 32M 64M 128M 256M 512M
do
echo "Testing block size = ${bs}"
dd if=${TESTPATH}/infile of=${TESTPATH}/outfile bs=${bs}
echo ""
done
rm ${TESTPATH}/infile ${TESTPATH}/outfile