ミニPC (CPU: Intel n100) を購入しました。Windows でも Ubuntu でも使えるようにして、「Intel N100 ミニ PC で構築する開発環境(2日目) | hiro345」で紹介した環境を用意していくつもりです。
今回は、1日目にバックアップしたディスクイメージファイルの確認をしてみました。
ディスクイメージファイル
今回は、ストレージのバックアップを取るにあたり、`dd` コマンドでディスクイメージファイルを作成しました。この方法は使っていないディスク領域も含めてバックアップを取るので無駄が多いのですが、データ自体はストレージ内のデータを単純にコピーしているので応用がしやすいのと、復旧するときは `if` と `of` の指定を逆にすればいいだけなので、間違いがおきにくいです。
問題は、Windows のディスクフォーマットは NTFS と呼ばれるもので、Ubuntu でよく使われているものとは違うので、取り扱いに注意が必要だという点です。このフォーマットを扱うには、Ubuntu では `ntfs-3g`、`fuse3` といったパッケージが必要です。今回使用した Ubuntu 試用版では標準で使えるようになっていました。
この後、`losetup`、`kpartx` といったパッケージに含まれるコマンドを使っています。どちらも今回使用した Ubuntu 試用版では標準で使えるようになっていました。
losetup
最初に試したのは `losetup` コマンドです。これを使うとディスクイメージファイルをストレージデバイスのように扱えるようになり、対応するループバックデバイスが用意されます。ループバックデバイスが用意されるというのは、具体的にはディスクイメージファイルと対応するデバイスファイルが使えるようになるということになります。ループバックデバイスのデバイスファイルに対しては、`mount` コマンドを使ってファイルシステムをマウントすることができます。
ということで使ってみたのですが、結果としてはうまくいきませんでした。今回、ディスクイメージファイルには4つのパーティションが含まれていたのですが、`losetup` を使っても4つのパーティションが認識されなくて `/dev/loop9` というひとつのループバックデバイス用のデバイスファイルしか使えるようになりませんでした。そのため、`mount` コマンドを使ってファイルシステムをマウントすることができませんでした。
パーティションが正しく認識されると、`/dev/loop9p1`、`/dev/loop9p2` といったループバックデバイス用のデバイスファイルが使えるようになるはずなのですが、それらは使えるようになりませんでした。
kpartx
次に試したのが `kpartx` コマンドです。こちらはディスクイメージファイル内のパーティションについて、パーティションを認識したら、対応するループバックデバイス用のデバイスファイルを `/dev/mapper/` に用意してくれます。
こちらを使ったところ、無事に4つのパーティションが認識されて、そこからファイルを取り出すこともできました。
gdisk + mount
実は、最も基本的な方法となるのが、`gdisk` コマンドと `mount` コマンドを使う方法です。こちらの方法でもディスクイメージファイルの中身を確認できました。GPT のディスクは `gdisk` を使うのが確実ですが、最近だと `fdisk` でも GPT のディスクを扱えるかもしれません。以前は MBR のディスクは `fdsik`、GPT のディスクは `gdisk` を使うのが普通だったと記憶してます。
こちらの方法では、`mount` するときに、使用するパーティションのスタート位置を指定します。パーティションのスタート位置は調べないといけないので、そのときに `gdisk` コマンドを使っています。なお、この方法はループバックデバイス経由にはならないので、利用後にループバックデバイスの利用停止をする必要がありません。また、読み込み専用のオプションを指定しないと警告が表示されます。
EFI のバックアップ
Windows 用ストレージの最初のパーティションには、パソコンの起動時に使われるシステムパーティションがあります。ここにある EFI フォルダは Ubuntu をインストールするときに書き換えられたりするので、バックアップをしておきました。
Windows 用ストレージから直接バックアップするのが確実ですが、ディスクイメージファイルのバックアップがきちんとできているなら、そこから取り出すこともできます。
ここでは、USB HDD へ tgz 形式、zip 形式のアーカイブファイルにして保存しておきました。
その他
今回はいくつか考えていた対応方法のうち `kpartx` コマンドがうまく動作したのと、`gdisk + mount` コマンドでも大丈夫だったので作業は終了しました。他に考えていたのは、`partclone` コマンドを使ってパーティション単位でバックアップを作成する方法でした。また、`qemu-img` コマンドや `VBoxManage` コマンドを使ってディスクイメージを仮想ディスクへ変換して、仮想マシンから参照してみる方法でも良いと考えていました。
ですから、これらについても試してみたかったのですが、今回のディスクイメージファイルは 512 GB と大きかったので、時間もかかりそうですし、大容量のストレージも必要になりそうなので、実際に使ってみるのはやめておきました。ただ、VirtualBox で小さめの仮想マシンと大きめの仮想ディスクを用意してこういったコマンドについて調べてみるのなら、それほど大変ではない気もしています。時間が取れたらやってみたいところです。
ということで、本日はここまで。