バックアップしたHDDイメージをマウントしてみた

この前バックアップしたHDDイメージをマウントして中身を見てみた。

Windowsでマウント

OSFMountをインストールして実行。

Mount newからddイメージを指定して、マウントするパーティションを指定してマウント。

XP機(FMV)に入ってたGAMEPACとかは遊べた(音がメチャクチャだけど)けど、Document and Settingsの中は権限の問題で見れなかった。

WSL2でマウント

wsl2 + Ubuntuでマウントする場合、そのままmountコマンドを打っても論理パーティションが分かれているので、そのままではマウントできない。

調べたところ、fdisk -lでパーティションの開始位置を確認して、mount -o offsetで指定すればいいらしいので、面倒なので選択したパーティションをマウントするスクリプトを書いた。

#!/bin/bash

function main () {
  local IMG_FILE=$1
  local MOUNT_POINT=$2
  local FDISK=$(fdisk -l ${IMG_FILE})

  if ! echo "${FDISK}" | sed -e 's/\*//g' | awk '{print $7}' | grep "NTFS" > /dev/null ; then
    # NTFSパーティションがない
    exit 0
  fi

  # マウントしたいパーティションの選択
  local PARTITION_LIST=$(echo "${FDISK}" | grep "${IMG_FILE}" | grep -v "Disk ${IMG_FILE}" )
  local PARTITION_LABEL=$(echo "${PARTITION_LIST}" | sed -e 's/\*//g' | awk '{printf("%s ", $1); for(i=7;i<NF;i++){printf("%s%s",$i,OFS=" ")}print $NF}' | peco | awk '{print $1}')
  local PARTITION_DATA=$(echo "${FDISK}" | grep "${PARTITION_LABEL}")
  local PARTITION_START=$(echo "${PARTITION_DATA}" | sed -e 's/\*//g' | awk '{print $2}')
  # オフセット計算
  local PARTITION_OFFSET=$(expr ${PARTITION_START} "*" 512)
  echo ${PARTITION_START}
  echo ${PARTITION_OFFSET}
  # オフセット設定してマウント
  mount -o loop,offset=${PARTITION_OFFSET} ${IMG_FILE} ${MOUNT_POINT}
  exit 0
}

if [ $# -ne 2 ]; then
  echo "usage mount_partition <dd image file> <mount point>"
  exit 1
fi

main $@
Disk winxp_machine.img: 55.89 GiB, 60011642880 bytes, 117210240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x52c91bfa

Device             Boot    Start       End  Sectors  Size Id Type
winxp_machine.img1 *          63  96229349 96229287 45.9G  7 HPFS/NTFS/exFAT
winxp_machine.img2      96229350 117210239 20980890   10G  7 HPFS/NTFS/exFAT

fdisk -lの結果がこれなので、必要なのはデバイス名とStartの値。なのでまずはgrepでNTFSパーティションを探し、なければそこで終了。

次にDevice以下の行をawkでデバイス名とTypeを並べたリストを作り、pecoコマンドで選択。選択結果からデバイス名を抜き出し、今度はデバイス名でfdiskの結果をgrepし、awkで開始位置を取得。

最後にセクターサイズが512バイトなので、Startの値に512をかけた値をoffsetにして、mountコマンドでマウント。

WSL2には、Windowsのエクスプローラーからネットワークドライブとして見えるので、あとはそのままマウントポイントにアクセスすればイメージの中身が見れる。

ただ、ネットワーク越しに見えるため、大抵のゲームとかはリソースが読めなくなり、動かない。

QEMU

「HDD丸ごとコピーしたイメージなら、QEMU使ったらWindows動くんじゃないか?」と思ったけど、一瞬WindowsXPの起動スプラッシュが見えた直後にBSODでダウン。エラーコードは0x0000007bなので、なにかぶっ壊れているようだ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です