廃棄の為、HDD消去
をしようと思ったんです。面倒くさいのでいつも複数の HDD を mdadm で RAID 化してからランダムデータと Zero を書き込むのですが、今回はなぜかうまく行きませんでした。
情報を見てみる
とりあえず、手近にあった CentOS7 の LiveCD で起動してみました。lsblk で確認するとこんな感じでした。(関係無いものは除外しています)
[[email protected] ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 7.4G 0 disk
└─sdb1 8:17 1 7.4G 0 part /run/initramfs/live
sdc 8:32 0 137G 0 disk
└─ddf1_RAID1 253:3 0 136.4G 0 dmraid
├─ddf1_RAID1p1 253:4 0 4M 0 part
├─ddf1_RAID1p2 253:5 0 4G 0 part
├─ddf1_RAID1p3 253:6 0 129G 0 part
├─ddf1_RAID1p5 253:7 0 250M 0 part
├─ddf1_RAID1p6 253:8 0 250M 0 part
├─ddf1_RAID1p7 253:9 0 110M 0 part
├─ddf1_RAID1p8 253:10 0 286M 0 part
└─ddf1_RAID1p9 253:11 0 2.5G 0 part
sdd 8:48 0 137G 0 disk
└─ddf1_RAID1 253:3 0 136.4G 0 dmraid
├─ddf1_RAID1p1 253:4 0 4M 0 part
├─ddf1_RAID1p2 253:5 0 4G 0 part
├─ddf1_RAID1p3 253:6 0 129G 0 part
├─ddf1_RAID1p5 253:7 0 250M 0 part
├─ddf1_RAID1p6 253:8 0 250M 0 part
├─ddf1_RAID1p7 253:9 0 110M 0 part
├─ddf1_RAID1p8 253:10 0 286M 0 part
└─ddf1_RAID1p9 253:11 0 2.5G 0 part
今回の HDD は sdc と sdd になりますが、ddf1_RAID1 なるものがどうやっても消せません。dd if=/dev/zero で片っ端から書いてもダメ。
自分のサイトの情報のコレ、sg3_format --format --size=512 -v /dev/sdc
でも消えず。色々と検索してみた所、海外のフォーラムで見つけました。
決め手は dmsetup
dmsetup は滅多に使った事がなかったんですが、これで消えるようです。
[[email protected] ~]# dmsetup remove ddf1_RAID1p1
[[email protected] ~]# dmsetup remove ddf1_RAID1p2
[[email protected] ~]# dmsetup remove ddf1_RAID1p3
・
・
・
[[email protected] ~]# dmsetup remove ddf1_RAID1
[[email protected] ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 7.4G 0 disk
└─sdb1 8:17 1 7.4G 0 part /run/initramfs/live
sdc 8:32 0 137G 0 disk
sdd 8:48 0 137G 0 disk
消えました。これでRAID化して削除できる!という訳で、ついでに自分の削除方法も案内しておきます。まさに自分用です。
RAID1化 -> ランダムデータ書き込み -> RAID停止 -> zero-superblock
[[email protected] ~]# rm -rf /mirror
[[email protected] ~]# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdc /dev/sdd
[[email protected] ~]# mke2fs -q -j /dev/md0
今回は sdc と sdd という対象にやってみます。雑にコマンドだけ載せますね!
まず、/mirror に マウントさせたいので、そのフォルダの残骸を消しておきます。そしたら mdadm で RAID1 を作成します。どうせなら同時に書き込みした方が時間短縮で楽だからです。そうしたら、mke2fs でファイルシステムを作成します。
[[email protected] ~]# mkdir /mirror
[[email protected] ~]# mount /dev/md0 /mirror/
[[email protected] ~]# openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /mirror/randomfile.bin
/mirror に /dev/md0 をマウントします。そしたらランダムデータをバンバン書いていきます。openssl を利用すると、
dd if=/dev/urandom of=/mirror/randomfile.bin bs=1G count=150 とかやるよりも遥かに高速なランダムデータを書き込む事ができます。
[[email protected] ~]# dd if=/dev/zero of=/mirror/randomfile2.bin bs=1G count=128
0 で埋め尽くしたい場合には、こんな感じでどうぞ(笑)
[[email protected] ~]# umount /mirror
[[email protected] ~]# mdadm --misc --stop /dev/md0
[[email protected] ~]# cat /proc/mdstat
[[email protected] ~]# mdadm --misc --zero-superblock /dev/sdc
[[email protected] ~]# mdadm --misc --zero-superblock /dev/sdd
書き込みが終わったら、/mirror をマウントから外します。
次に、mdadm で /dev/md0 を停止させて、cat /proc/mdstat で RAID の情報が残っていないか確認します。
最後に、–zero-superblock オプションでそれぞれの HDD のスーパーブロックにゼロを書き込んで情報を消します。これは全てのディスクに対して実行します。
これで作業は完了しました。
色々雑ですが、mdadm で busy と言われたり、マウントが拒否された場合には dmsetup は使えるよ!という情報でした。ただ当然ながら対象を間違えると綺麗に消えますのでご注意を。