markdown
はじめに (対象読者・この記事でわかること)
本記事は、PC のハードウェア情報を管理したり、ドライブの互換性を確認したいシステム管理者・開発者・IT 愛好家を対象としています。光学ドライブ(CD/DVD/BD)の正確なタイプ(メーカー、モデル番号、対応規格、ファームウェアバージョン)を OS ごとに取得する方法を、実際に動かすコマンド例とともに解説します。この記事を読むことで、Linux の udevadm や hdparm、Windows の PowerShell/WMIC などを使い、手軽に詳細情報を取得できるようになります。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- 基本的なシェル操作(bash、PowerShell)
- 管理者権限(sudo / Run as administrator)の取得方法
- デバイスファイルやドライブ文字の概念(例:/dev/sr0、D: ドライブ)
光学ドライブ情報取得の概要と背景
光学ドライブは、USB メモリや SSD と比べて情報取得手段が少なく、メーカーが提供する専用ユーティリティに頼りがちです。しかし、OS が提供している標準ツールでも充分に詳細情報を取得できます。正確なタイプ情報が必要になるケースは次のようなものです。
- 互換性確認:新しいディスクイメージを焼く際、ドライブが Blu‑ray 対応かどうかを確認したい。
- トラブルシューティング:読み込みエラーが起きたとき、ファームウェアバージョンや規格不一致が原因か判別したい。
- 資産管理:社内の PC 群にどの光学ドライブが導入されているか把握し、保守・更新計画を立てる。
これらの課題を解決するには、OS が提供するデバイス情報取得コマンドを組み合わせ、必要な属性だけを抽出するスクリプトを作成するのが効率的です。以下では、Linux と Windows の二大プラットフォーム別に、代表的な取得手法と取得結果の解釈例を示します。
光学ドライブ情報取得の具体的な手順と実装方法
Linux での取得手順
ステップ1:デバイスパスの特定
まず、接続されている光学ドライブのデバイスファイルを確認します。lsblk や lsscsi が便利です。
Bash$ lsblk -o NAME,TYPE,MODEL,SIZE,ROTA NAME TYPE MODEL SIZE ROTA sr0 rom TSSTcorpDVD-ROM 0B 0
sr0 が光学ドライブのデバイス名です。複数台ある場合は sr1, sr2 … が続きます。
ステップ2:基本情報の取得(udevadm)
udevadm info でデバイス属性を列挙すると、ベンダー名・モデル・シリアル番号が得られます。
Bash$ sudo udevadm info --query=all --name=/dev/sr0 | grep -E 'ID_VENDOR|ID_MODEL|ID_SERIAL' E: ID_VENDOR=TSSTcorp E: ID_MODEL=DVD-ROM E: ID_SERIAL=TSSTcorp_DVD-ROM_1.0
ステップ3:詳細規格情報の取得(hdparm -I)
hdparm -I は SCSI デバイスのインクルード情報を表示します。光学ドライブの規格(CD‑R, DVD‑R, BD‑RE など)やファームウェアバージョンが確認できます。
Bash$ sudo hdparm -I /dev/sr0 ATA device, with non-removable media ... Model Number: TSSTcorp DVD-ROM Firmware Revision: 1.0 ... Supported: CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+RW
ステップ4:スクリプト化例(bash)
以下のスクリプトは、システムに接続された全光学ドライブの情報を表形式で出力します。
Bash#!/usr/bin/env bash set -euo pipefail printf "%-6s %-20s %-10s %-30s %-15s\n" "DEV" "VENDOR" "MODEL" "FIRMWARE" "SUPPORTED" for dev in /dev/sr*; do [[ -e "$dev" ]] || continue vendor=$(sudo udevadm info --query=property --name="$dev" | grep '^ID_VENDOR=' | cut -d= -f2) model=$(sudo udevadm info --query=property --name="$dev" | grep '^ID_MODEL=' | cut -d= -f2) firmware=$(sudo hdparm -I "$dev" 2>/dev/null | awk -F: '/Firmware Revision/ {gsub(/ /,"",$2); print $2}') supported=$(sudo hdparm -I "$dev" 2>/dev/null | awk '/Supported:/ {print $0}' | sed 's/Supported://') printf "%-6s %-20s %-10s %-30s %-15s\n" "$(basename "$dev")" "$vendor" "$model" "$firmware" "$supported" done
実行例:
DEV VENDOR MODEL FIRMWARE SUPPORTED
sr0 TSSTcorp DVD-ROM 1.0 CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+RW
ハマった点やエラー解決
- 権限エラー:
udevadmやhdparmはデバイスに直接アクセスするため、sudoが必要です。スクリプト実行時にsudoが足りないと「Permission denied」になるので、実行ユーザーをsudoersに追加するか、スクリプト自体をsudoで呼び出すようにします。 hdparmが対応していないデバイス:古い光学ドライブはhdparm -Iが失敗することがあります。その場合はsg_inq(sg3_utilsパッケージ)を代替で使用します。
Bash$ sudo sg_inq -p 0x80 /dev/sr0
Windows での取得手順
ステップ1:PowerShell でデバイス情報を取得
PowerShell の Get-WmiObject または Get-CimInstance を使用すると、光学ドライブの詳細属性が取得できます。
PowershellPS> Get-CimInstance -ClassName Win32_LogicalDisk | Where-Object {$_.DriveType -eq 5} | Select-Object DeviceID, VolumeName, MediaType
DriveType 5 は光学ドライブを表します。さらに Win32_DiskDrive クラスでベンダー・モデル・ファームウェアを取得します。
PowershellPS> Get-CimInstance -ClassName Win32_DiskDrive | Where-Object {$_.InterfaceType -eq "IDE" -or $_.InterfaceType -eq "SCSI"} | Where-Object {$_.Capabilities -contains 5} | Select-Object DeviceID, Model, Manufacturer, FirmwareRevision, MediaType
ステップ2:wmic コマンド(CLI)
コマンドプロンプトからも取得可能です。
CmdC:\> wmic logicaldisk where "DriveType=5" get DeviceID, VolumeName, Description DeviceID VolumeName Description D: MyDVD CD-ROM Disc
ステップ3:PowerShell スクリプト例
以下は、システム内の全光学ドライブ情報を JSON 形式で出力するスクリプトです。
Powershell# Get-OpticalDriveInfo.ps1 $drives = Get-CimInstance -ClassName Win32_DiskDrive | Where-Object { $_.MediaType -like "*Optical*" } $info = foreach ($d in $drives) { [pscustomobject]@{ DeviceID = $d.DeviceID Model = $d.Model Manufacturer = $d.Manufacturer FirmwareRevision = $d.FirmwareRevision MediaType = $d.MediaType } } $info | ConvertTo-Json -Depth 3
実行結果(例):
Json[ { "DeviceID": "\\\\.\\PHYSICALDRIVE1", "Model": "HL‑DTS‑R03", "Manufacturer": "HL-DT", "FirmwareRevision": "14.4", "MediaType": "CD-ROM" } ]
ハマった点やエラー解決
Get-CimInstanceが空になる:一部の古い Windows Vista/7 環境ではWin32_DiskDriveが光学ドライブを正しく列挙しません。その際はWin32_CDROMDriveクラスを代替で使用してください。
powershell
Get-CimInstance -ClassName Win32_CDROMDrive | Select-Object *
- 64 ビット vs 32 ビットの PowerShell:
Get-WmiObjectは 32 ビット PowerShell から呼び出すと一部属性が欠落します。必ず 64 ビット版で実行するか、-Namespace root\cimv2を明示的に指定してください。
クロスプラットフォームでの統一取得(Python 例)
Python の psutil と subprocess を組み合わせると、Linux と Windows 両方で同一スクリプトが書けます。
Pythonimport platform, subprocess, json def get_linux_optical(): result = subprocess.run(['lsblk', '-J', '-o', 'NAME,TYPE,MODEL'], capture_output=True, text=True) devices = json.loads(result.stdout)['blockdevices'] optical = [d for d in devices if d['type'] == 'rom'] info = [] for dev in optical: dev_path = f"/dev/{dev['name']}" vendor = subprocess.check_output(['udevadm', 'info', '--query=property', '--name', dev_path]) vendor = [line for line in vendor.decode().splitlines() if line.startswith('ID_VENDOR=')] model = dev.get('model', '') info.append({'device': dev_path, 'vendor': vendor, 'model': model}) return info def get_windows_optical(): ps = subprocess.run(['powershell', '-Command', "Get-CimInstance -ClassName Win32_CDROMDrive | ConvertTo-Json"], capture_output=True, text=True) return json.loads(ps.stdout) if __name__ == "__main__": if platform.system() == "Linux": data = get_linux_optical() elif platform.system() == "Windows": data = get_windows_optical() else: data = [] print(json.dumps(data, indent=2, ensure_ascii=False))
このスクリプトは、実行環境に合わせて適切な取得ロジックを自動的に選択し、JSON で結果を出力します。
まとめ
本記事では、Linux と Windows の標準ツールを用いて光学ドライブのベンダー・モデル・ファームウェア・対応規格情報を取得する方法 を解説しました。
- Linux では
udevadm、hdparm、sg_inqを組み合わせたシェルスクリプトで詳細情報を取得。 - Windows では PowerShell の
Get-CimInstance/wmicを利用し、JSON 出力まで自動化可能。 - 共通 に Python でクロスプラットフォーム取得スクリプトを作成し、資産管理や自動テストに活用できる。
これらの手順を通じて、光学ドライブの正確なタイプ情報を取得し、トラブルシューティングやシステム構築に役立てることができます。次回は、取得した情報を元に ファームウェアアップデートを自動化する 方法について解説する予定です。
参考資料
- Linux
udevadmマニュアル - hdparm 公式ドキュメント
- sg3_utils パッケージ – SCSI ユーティリティ
- Microsoft Docs – Win32_DiskDrive クラス
- PowerShell Documentation – Get-CimInstance
