以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

俺氏、ついに昔使っていたノートPCからHDDを摘出

f:id:abyssluke:20201211183714j:plain:w200:lefttwitterのTLでインターネット老人会というハッシュタグが流行してたので、過去の思い出に浸ろうとノートPCを起動してみたり。そしてHDD取り出したほうがいいんじゃねと思い、ノートPC(NEC LaVie NX, PC-LW33H82D)にあったHDDを摘出した。裏のネジ3本*1を外した後カバーの一部を外すと2.5インチIDE-HDDが見えるのでネジなりケーブルなりいろいろ外せば摘出完了。ちょうどIDE-USBアダプタがあったのでこれを使って中身を覗いてみたり、Ubuntu機でディスクイメージを作成するなどした。過去の黒歴史がァァ! あとはUbuntu機でWine使ってHDDにあったゲームを動かしてみたりしたのは秘密。

・・・Ubuntu機でディスクイメージを作成、マウントした時のメモは続きを読むから。

ディスクイメージ作成

mountコマンドなどでどのデバイスなのか予め確認。ここでは当該デバイスを/dev/sdbとして進める。

アンマウントしておき、ddコマンドでさくっとやってみる。

$ sudo dd if=/dev/sdb of=/path/to/image.img

しかし、使っていたHDDには不良セクタがあったため、途中でエラーとなり停止してしまった。そこでconv=sync,noerrorを付けてエラーが発生してもそのまま続行するように設定。エラーとなった部分はNULパディングされる。

$ sudo dd if=/dev/sdb of=/path/to/image.img conv=sync,noerror

約6.4GBのHDDで約20分近く掛かった。他の作業をしながらやっていたし512バイト単位で処理していたから仕方ないか。

マウント

ループバックデバイスを利用してマウントする。

参考ページの通りに/etc/modprobe.d/loop.confにループバックデバイスの設定を書いて反映。もしループバックデバイスが足りない時はmax_loop=8の8の部分を書き換えればOK。

$ sudo vi /etc/modprobe.d/loop.conf
$ cat /etc/modprobe.d/loop.conf
options loop max_part=63 max_loop=8
$ sudo modprobe loop

空いているループバックデバイスにHDDイメージを接続。

$ sudo losetup -f /path/to/image.img
$ sudo losetup -a
/dev/loop0: [fc00]:11017913 (/path/to/image.img)

しかしパーティションである/dev/loop0p*が無くこのままではマウントできないので、kpartx*2を使って/dev/mapper以下にパーティションマッピングしマウントできる状態にしてから、目的のパーティションをマウントする(fdisk -lで確認する)。
なお、環境によってはマッピング後、ファイルマネージャからマウントできる状態になっているのでそこからマウントしてもOK。

$ sudo fdisk -l /dev/loop0

ディスク /dev/loop0: 6495 MB, 6495068160 バイト
(中略)
デバイス ブート      始点        終点     ブロック   Id  システム
/dev/loop0p1   *          63     6305039     3152488+   b  W95 FAT32
/dev/loop0p2         6305040    12670559     3182760    5  拡張領域
/dev/loop0p5         6305103    12670559     3182728+   b  W95 FAT32
$ sudo kpartx -a /dev/loop0
$ sudo mkdir /mnt/vhd
$ sudo mount /dev/mapper/loop0p1 /mnt/vhd

使用が終わったらアンマウント後、マッピングを解除しループバックデバイスからHDDイメージを切り離す。

$ sudo umount /mnt/vhd
$ sudo kpartx -d /dev/loop0
$ sudo losetup -d /dev/loop0

*1:バッテリー寄りの2本だけでよかったかもしれない

*2:インストールしていない場合はaptitudeなりでインストールしておく