CD/DVDを丸ごとisoファイルに保存したいと考えており、ImgBurnなどのフリーウェアを追加したくなかったため、今あるもので実現できないか考えていました。
Windowsの標準機能ではないものの、ほぼ全員がインストールしているであろうGit(Git Bash)のみで実現できます。
Windowsでddを使用したい
LinuxやmacOSではdd(coreutils)というコマンドを使用すると、簡単にデバイスファイルからisoを作成できます。
dd if=/dev/scd0 of=out.iso status=progress
status=progress
オプションを付与すると、ddコマンドは進捗を表示します。デフォルトでは何も表示されないため、これを付けておいたほうが動いている感があり心が落ち着きます。
WSL上でddを利用することを考えましたが、デバイスの扱いがわからず、実現できませんでした。光学ドライブは\\.\PHYSICALDRIVE*
形式では表されないため、WSLにマウントする方法がわかりません。
/mnt
以下にマウントしてmkisofsを使用する(失敗)
先に思い付いた方法は、光学ドライブもC:\、D:\ほかと同様にWSLの/mnt
以下にマウントして、mkisofsコマンドでisoファイルを作成することでした。
しかし、この方法は正しくありませんでした(コマンドも割愛します)。ディスクの容量よりも小さいisoファイルが完成したので、およそフォルダ内を走査して、ファイル内容のみを固めたファイルを作成したのでしょう。
今回は物理メディアの完全なバックアップが目的だったので、これでは不十分でした。
Git Bashのddを使う
Windows上でLinux系のツールを使い、デバイスもLinux上のように扱いたいなら、WSLよりCygwin系列の互換レイヤーを利用したほうがよいようです。
Gitをインストールする際に付いてくるGit Bashには、ddが搭載されており、光学ドライブも/dev/scd*
および/dev/sr*
にマッピングされています。
つまり、再掲ですが、Git Bash上ではこちらのコマンドで光学ドライブからisoを作成することができます。
dd if=/dev/scd0 of=out.iso status=progress
実際に試せばわかることですが、たとえば/dev/scd0
と/dev/sr0
はまったく同じデバイスを指しています。どちらを指定してもよいですが、光学ドライブだとわかりやすいのでscd
が気に入りました。
余談
- isoからディスクに焼くのは、Windowsの標準機能で可能
- ついでに、USBメモリのバックアップにはDisk2vhdを使用して、仮想ディスクファイルに固めることにした