くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

【FreeBSD】マウントできなくなったUSBからデータをサルベージする

FreeBSDにて。
いつも使っていたUSBメモリfsckで「partition 1 does not end on a track boundary.」(パーティション1がトラックの切れ目で終わってないよ!)のエラーが出てしまい、mountできなくなってしまった。
なんとかかんとかデータをデータのサルベージはできたので、その手順を記録。

手順

①データ退避

ddコマンドで。

$ dd if=/dev/da0 of=usb.img bs=128M
$ dd if=/dev/da0 of=usb.noerror.img conv=noerror,sync bs=128M

②デバイスにファイルを割り当て

mdconfig を使って、上記イメージファイルをデバイスにする

$ mdconfig -a -t vnode -f usb.noerror.img
md0


確認

$ ls -l /dev/md0


マウントしてみるテスト

$ mount /dev/md0 /mnt
mount: /dev/md0 R/W mount of /export denied. Filesystem is not clean - run fsck.: Operation not permitted

失敗!

③割り当てたデバイスをリカバリ

fsckする

$ fsck /dev/md0
fsck: Could not determine filesystem type

ダメー!


fsck_ffsで再チャレンジ

$ fsck_ffs /dev/md0
** /dev/md0
** Last Mounted on /export
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
12623 files, 895298 used, 1016773 free (1181 frags, 126949 blocks, 0.1% fragmentation)

***** FILE SYSTEM MARKED CLEAN *****


もっかいマウント

$ mount /dev/md0 /mnt
$ ls /mnt
.snap           bin             svn-repos       usercmd


マウント成功!
とりあえず、これでデータをサルベージ。

④後始末

いろいろアンマウント

$ umount /mnt
$ mdconfig -d -u /dev/md0