年始のSSD消去作業



# 0. はじめに

年末年始で片付けをしようと思い、不要になった256GB程度のSATAのSSDを消去して廃棄したいと思います。

SSDの消去は、HDDとは違ってTrimコマンドで削除できます(まあ、賛否あるみたいなのですが)。なので、ちょっとやってみたという話になります。

# 1. どのコマンドがいいのか？

ネットで検索すると幾つかのコマンドが紹介されています。

- fstrim
- blkdiscard
- hdparm

しかし、前の2つはあまり推奨されません。Secure Erase（hdparmを使用）が最も推奨される方法です。これが利用できない場合は、データ消去ソフトウェア（shred など）を使用してデータを複数回上書きするのが推奨です。fstrim と blkdiscard は、日々の運用におけるSSDの性能維持には有効ですが、廃棄前のデータ消去には不十分です。

# **`fstrim`、`blkdiscard`、`hdparm` の比較**

| コマンド     | メリット                               | デメリット                                                  |
| ----------- | ------------------------------------- | -------------------------------------------------------- |
| `fstrim`    | ファイルシステムレベルでTRIMを実行、定期的なメンテナンスに有効 | 削除されたファイル領域のみに有効、完全なデータ消去ではない |
| `blkdiscard` | ブロックデバイス全体にTRIMを実行          | ファイルシステムに依存しないため、ファイルシステムによっては効果がない場合がある、完全なデータ消去ではない |
| `hdparm`    | Secure Eraseを実行可能 (対応している場合) | Secure Eraseが利用できない場合がある、コマンド操作が必要   |


# 2. **`hdparm` を用いた Secure Erase の実行方法（Ubuntu 24.04）**

`hdparm` を使用して Secure Erase を実行する手順は以下の通りです。

1. **SSDのデバイス名を確認:** `lsblk` コマンドなどでSSDのデバイス名（例: /dev/sda）を確認します。

2. **SSDをアンマウント:** SSDがマウントされている場合はアンマウントします。

```bash
sudo umount /dev/sda1 # パーティションがマウントされている場合
sudo umount /dev/sda  # デバイス全体がマウントされている場合
```

3. **hdparmでSecurity Feature Setがサポートされているか確認:**

```bash
sudo hdparm -I /dev/sda | grep -A 8 "Security:"
```

以下のように表示されれば、Secure Erase が利用可能です。

```yaml
Security:
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
                supported: enhanced erase
        2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
```

# 3. パスワードが必要かどうか確認

以下のようにコマンドを実行して、`missing PASSWD`と出るようなら、パスワードが必要です。4. でパスワードを設定してください。

```bash
sudo hdparm --security-erase-enhanced /dev/sda
missing PASSWD
```

# 4. パスワードを設定 (必要な場合)

```bash
sudo hdparm --user-master u --security-set-pass mypassword /dev/sda
```

`mypassword` は任意のパスワードに変更してください。

パスワードを設定すると以下のようになります。

```yaml
$ sudo hdparm -I /dev/sda | grep -A 8 "Security:"
Security:
        Master password revision code = 65534
                supported
                enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        Security level high
```

::: note 
supportedの下の行が`not enabled`から
`enabled` になっています
:::

# 5. Secure Eraseを実行

```bash
sudo hdparm --user-master u --security-erase-enhanced mypassword /dev/sda
```

# 6. 確認する

以下のようになっていれば消去終了です。

```yaml
$ sudo hdparm -I /dev/sda | grep -A 8 "Security:"
Security:
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        2min for SECURITY ERASE UNIT.
```

もし、以下のようになっている場合は、セキュリティーパスワードが残っているのでパスワードを解除します。

```yaml
$ sudo hdparm -I /dev/sda | grep -A 8 "Security:"
Security:
        Master password revision code = 65534
                supported
                enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        Security level high
```

::: note
`supported`の次の行が
`enabled`のままです。
:::

以下のコマンドでパスワードを解除します。

```bash
sudo hdparm --user-master u --security-disable mypassword /dev/sda
```

解除されたか確認します。

```yaml
$ sudo hdparm -I /dev/sda | grep -A 8 "Security:"
Security:
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        2min for SECURITY ERASE UNIT.
```

# 7. 注意点

*   Secure Eraseを実行すると、SSDのデータは完全に消去され、復元は不可能になります。実行前に必要なデータがないことを十分に確認してください。
*   `hdparm` の使用には注意が必要です。誤った操作はシステムに深刻な影響を与える可能性があります。コマンドの意味をよく理解してから実行してください。

# 8. 実行時間

hdparmで消去する時間も計ってみました。
20秒ぐらいですね。

```bash
$ time sudo hdparm --user-master u --security-erase-enhanced mypassword /dev/sda
security_password: "mypassword"

/dev/sdc:
 Issuing SECURITY_ERASE command, password="mypassword", user=user
SG_IO: bad/missing sense data, sb[]:  70 00 01 00 00 00 00 0a 00 00 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

real    0m19.384s
user    0m0.006s
sys     0m0.004s
```