Google Code Prettify

2009年6月29日

ReadyNAS の HDD の内容を普通のPCで読む

最近、HDDを整理してたら 320G SATA HDD (Seagate製) が 8台も出てきた。

うちで使っている ReadyNAS Duoには 2台の750G SATA HDD を載せているが、ボリュームの使用率が10%未満なので宝の持ち腐れな気がするので、ちょっと入れ替えてみた。

ReadyNAS Duoで実装されているX-RAIDは、HDDの容量を大きくする方向の変更は出来ても、小さくする変更は出来ない。まぁしょうがないので、大人しく別途バックアップを取って入れ替えた。

使っていた 750G HDDがフリーになったので、もの試しに読めるかどうか調べてみた。

LVMへのアクセス

普通のPCに繋いでみると、 一台のみにIBM PCベースのパーティションテーブルらしきある。

どうも先頭の2セクタを除いてミラーリングされているっぽく、2台中1台のみにパーティションテーブルが書かれているようだ。まぁ、同じ内容のディスクが変に認識されて混乱するのを避ける為なんだろうなぁ。

パーティションの最後が LVM のボリュームになっており、論理ボリューム上にデータ領域が確保されている。

# sfdisk -l -uS /dev/sdd

Disk /dev/sdd: 91201 cylinders, 255 heads, 63 sectors/track
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdd1             2   4096001    4096000  83  Linux
/dev/sdd2       4096002   4608001     512000  82  Linux swap / Solaris
/dev/sdd3       4608002 1465112305 1460504304   5  Extended
/dev/sdd4             0         -          0   0  Empty
/dev/sdd5       4608003 1465112305 1460504303  8e  Linux LVM

個々のパーティションは、シリンダ境界で区切られておらず、パーティションが無いもう一台に再現するのは、先頭2セクタをコピーするか、sfdisk を駆使するか、ちぃと面倒。

X-RAIDで容量の拡張とかしていなければ、dmsetup を使うのも良いかも。

# lvmsize=$((`blockdev --getsz /dev/sdd` - 4608003))
# echo 0 $lvmsize linear /dev/sdd 4608003 | dmsetup create readynas-pv 
# pvscan
# lvchange -ay -pr c/c
# lvs
  LV        VG     Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  c         c      -ri-a- 696.41G                                      

ファイルシステムへのアクセス

LVMの論理ボリュームがアクセスできるようになったら、何にも考えずに ext2/ext3 でマウントをしてみると上手く行かない。

# mount -t ext3 -oro /dev/c/c /mnt
mount: wrong fs type, bad option, bad superblock on /dev/mapper/c-c,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
# dmesg | tail -1
[ 3446.561022] EXT3-fs: bad blocksize 16384.

man を見ると、ブロックサイズは1024,2048,4096の3種類しか有効でないが、いつの時点で実装されたか分からないが、ext2/ext3のブロックサイズはCPUアーキテクチャのページサイズまで拡張されている。ReadyNAS で使われていたext2/ext3 ファイルシステムはブロックサイズが 16K なので、普通にはマウントできなかったようである。

ext2/ext3でブロックサイズが大きすぎる場合、読むだけなら2通りの方法がありそうである。

dump/restore でのアクセス

まぁ何も考えずに dump/restore を使えば、ブロックサイズを気にせずにファイルシステム全体をコピーできるので、ファイルを取り出すことが出来る。容量が大きいHDDが用意できるのならば、安定したアクセスが出来る。

# dump 0f - /dev/c/c | ( cd /backup ; restore rf - )

fuse ext2 でのアクセス

fuse 様にお伺いすると、ext2/ext3 にアクセスできる奴がある。。。コイツもブロックサイズの制限を気にせずにアクセスできる。ただ、、、まぁ、、、枯れきっていない感があるなぁ。

# apt-get install fuseext2
...
# fuseext2 -o ro /dev/c/c /mnt
# mount | grep mnt
fuseext2 on /mnt type fuse.fuseext2 (ro,nosuid,nodev)

まとめ

取り敢えず、ReadyNAS Duo からサクサクとファイルを抜き出せるようになりましたと。。。まぁ、ファンが五月蝿いから捨てますかねぇ。

2 件のコメント:

同じくreadynasのサルベージで困っていました。 さんのコメント...

ブログを見てやってみましたが、どうもうまくいきません。大きなハードディスクが無いためfuseext2を使ってみたのですが、/mntの中身が見えません。試しに/mntの中のディレクトリをrm -rdで消そうとしたら、/dev/c/cの中身が見えました(途中で止めました)
あと一番下の#mount | grep mnt fuseext2 on…….を入力したら、予期しないトークン‘(’の周辺に構文エラーがあります、と怒られました。お手数ですがアドバイスいただければ幸いです。よろしくお願いします。

同じくreadynasのサルベージで困っていました。 さんのコメント...

上記のものですが、なんとかfuseext2でファイルを取り出せました。ありがとうございました。

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...