コンテンツにスキップ

サーバーのデータ消去用のDebian 13 Live USBを作ってみた

サーバーを廃棄・返却する際には、搭載されているストレージのデータを確実に消去しておく必要があります。

実際の現場では、単にディスクを消去するだけでなく、作業前後にサーバーの構成を確認したり、ストレージの認識状況を見たり、BMC / IPMI まわりを確認したりすることもあります。用途ごとに個別のツールを持ち込むより、必要な道具をまとめた Live USB を 1 本用意しておくほうが扱いやすいです。

そこで今回は、サーバーのデータ消去作業で使うことを前提に、Debian 13 ベースの Live USB を作ってみました。


Debian 13 を選んだ理由

データ消去専用で考えると、もっとコンパクトで軽量な Linux ディストリビューションもあります。それでも今回は Debian 13 を選びました。

理由は、用途をデータ消去だけに限定しなかったためです。サーバーを処分する前後には、CPU やメモリ、ストレージ構成の確認、ネットワークの簡易確認、BMC / IPMI の情報取得などが必要になることがあります。Debian であればパッケージの選択肢が広く、必要なツールを素直に組み込みやすいため、少し汎用寄りのメンテナンス用 USB としてまとめやすいです。

この記事では、そうした用途を想定した Debian 13 Live USB の作成手順を整理します。実際のデータ消去コマンドは媒体の種類や運用ルールによって変わるため、本記事では「作業に入るための起動環境を作る」ところまでに絞ります。

Live USB の作成

Debian の Live イメージは、Debian Live Project が提供する live-build で作成できます。設定をファイルとして残せるため、一度作って終わりではなく、必要なツールを追加しながら再生成しやすいのが利点です。

live-build のインストール

まずは live-build をインストールします。

1
sudo apt install live-build

作業ディレクトリの作成

ビルド用のディレクトリを作成します。

1
2
mkdir my-usb-util
cd my-usb-util

ビルド設定の初期化

続いて、lb config で Live イメージの基本設定を作成します。実行するとカレントディレクトリに config/ が作られ、以降の lb build はその内容を参照してイメージを生成します。

1
2
3
4
5
6
7
8
lb config \
  --mode debian \
  --distribution trixie \
  --architecture amd64 \
  --binary-image iso-hybrid \
  --debian-installer none \
  --archive-areas "main non-free-firmware" \
  --bootappend-live "boot=live components locales=en_US.UTF-8 keyboard-layouts=jp keyboard-model=jp106 drm_kms_helper.poll=0 loglevel=5"

今回指定した主なオプションは次のとおりです。

オプション 意味
--mode debian 全体モード。設定可能な値は、現在は実質debianのみ
--distribution trixie コードネームでdistroを指定する。trixieはDebian 13
--architecture amd64 アーキテクチャを指定
--binary-image iso-hybrid iso-hybrid はsyslinuxを使用した、CD/DVDとUSB両方をサポートするイメージ
--debian-installer none 収録するインストーラーの種類を指定。cdromnetinstなどから選択可能。インストーラー不要の場合、noneを指定
--archive-areas "main non-free-firmware" アーカイブ領域を指定。必要に応じてファームウェアを扱えるよう non-free-firmware を含める
--bootappend-live "..." Live 起動時に渡すブートパラメータをまとめて指定

Live 起動時のブートパラメータ

--bootappend-live で渡しているパラメータも、用途が分かるように分解しておきます。

ブートパラメータ 意味
boot=live Debian Live として起動
components live-config の設定処理を有効にし、用意されている構成要素をすべて実行
locales=en_US.UTF-8 ロケールを en_US.UTF-8 に設定(画面表示が英語になる。CLIなので日本語表示だと逆に文字化けする)
keyboard-layouts=jp キーボード配列を日本語配列に設定
keyboard-model=jp106 キーボードの物理モデルを日本語 106 キーとして扱う指定
drm_kms_helper.poll=0 ディスプレイ接続状態を定期監視するポーリングを無効化。一部の古いモニタに必要
loglevel=5 カーネルメッセージの画面表示を絞る。レベル 5 (notice)以下を非表示

パッケージリストの作成

次に、Live USB に入れておくパッケージを定義します。

live-build では、config/package-lists/<任意のファイル名>.list.chroot にパッケージ名を並べることで、Live 環境へインストールするパッケージを追加できます。

今回は server-tools.list.chroot を作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
cat > config/package-lists/server-tools.list.chroot <<'EOF'
# Keyboard / console
console-setup
keyboard-configuration

# Minimal shell operation
sudo
less
tmux
vim
curl
openssh-client

# One-command server hardware inventory + detailed confirmation
inxi
dmidecode
lshw
pciutils
usbutils
lsscsi

# Storage health / identification / secure erase across SATA, SAS/SCSI, NVMe
smartmontools
nvme-cli
hdparm
sg3-utils
mdadm

# BMC / IPMI inspection and configuration cleanup
linux-image-amd64
ipmitool
freeipmi-tools

# Basic hardware diagnostics / burn-in
fio
stress-ng
sysstat
iproute2
ethtool
iperf3
EOF

ここでは、大きく分けて次の用途を意識しています。

まず、sudolesstmuxvimcurlopenssh-client は、作業中の基本操作をしやすくするためのものです。Live 環境とはいえ、少し調べ物をしたり、ログを保存したり、別ホストへ接続したりする場面はあります。

次に、inxidmidecodelshwpciutilsusbutilslsscsi は、サーバーの構成確認用です。筐体ごとに確認したい情報が少しずつ違うため、単一のコマンドだけでなく複数の観点から見られるようにしています。

ストレージまわりでは、smartmontoolsnvme-clihdparmsg3-utilsmdadm を入れています。SATA、SAS / SCSI、NVMe といった媒体の種類ごとに必要な確認手段が異なるため、消去前の認識確認や状態把握をしやすくするためです。

また、サーバーでは BMC / IPMI の確認が必要になる場面もあるため、ipmitoolfreeipmi-tools も含めています。さらに、fiostress-ngsysstatiproute2ethtooliperf3 を入れておくと、軽い動作確認やネットワーク確認にも流用できます。

ビルド中の APT 設定

イメージをビルドする際、APT はパッケージ本体だけでなく、パッケージ説明文の翻訳インデックスも取得しようとします。今回の用途では不要なので、取得対象から外しておきます。

1
2
3
cat > config/apt/apt.conf <<'EOF'
Acquire::Languages "none";
EOF

これにより、APT は Translation-* を使わない設定になります。劇的に変わるわけではありませんが、取得量を少し減らし、ビルド時の処理もわずかに軽くできます。

ビルドの実行

設定がそろったら、イメージを生成します。

1
sudo lb build

ビルドが完了すると、カレントディレクトリに ISO イメージが生成されます。今回の構成では、たとえば次のようなファイルができます。

1
2
$ file live-image-amd64.hybrid.iso
live-image-amd64.hybrid.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'Debian trixie 20260511-15:52' (bootable)

iso-hybrid で作成しているため、この ISO はそのまま USB メモリへ書き込んで利用できます。

USB メモリへの書き込み

書き込み先のデバイスは必ず確認します。ここを間違えると、意図しないディスクを上書きしてしまいます。

今回は /dev/disk/by-id で対象 USB を確認しています。

1
2
3
4
$ ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root  9 May 11 16:11 usb-KIOXIA_TransMemory_0022CFF6B8A6CA206A2ECFE5-0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 May 11 16:11 usb-KIOXIA_TransMemory_0022CFF6B8A6CA206A2ECFE5-0:0-part1 -> ../../sdf1

この例では、USB メモリ本体は /dev/sdf です。パーティションである /dev/sdf1 ではなく、デバイス全体へ書き込みます。

1
2
sudo cp live-image-amd64.hybrid.iso /dev/sdf
sync

sync まで終われば、OS の書き込みキャッシュもフラッシュされます。あとは対象サーバーのブートメニューから USB 起動すれば利用できます。

作り直す場合

パッケージを追加したり、起動オプションを変更したりしたあとに再ビルドする場合は、いったん生成物を掃除してから作り直します。

1
2
sudo lb clean --purge
sudo lb build

--purge を付けても config/ は残るため、設定ファイルを保ったままビルド成果物とキャッシュを整理できます。

動作確認

サーバーでUSBから起動して動作確認します。

まとめ

サーバー返却や廃棄に伴うデータ消去では、作業環境の準備そのものが意外と面倒です。必要なツールを含んだ Debian 13 Live USB を作っておけば、現地で対象サーバーを起動し、構成確認から消去前チェックまでを同じ環境で進めやすくなります。

今回は、live-build を使ってサーバーメンテナンス用途の Live USB を構成するところまでを整理しました。作業対象に合わせてパッケージリストを少しずつ育てていくと、再利用しやすい現場用ツールとして定着しそうです。