上手く移行作業が出来なかった原因は、はっきり言って、移行先のハードディスクの WDC WD20EZRX を 4KB/セクタできっちりとパーティション切りが出来なかったためです。
現在使用中のハードディスクは従来からの 512B/セクタのものでした。またパーティションも MBR の標準通りの 63 ブロックから始まるパーティションで設定がしてあって、単純にハードディスク間で dd コマンドでイメージコピーをすれば完了する状態ではありませんでした。
現状のハードディスクのパーティション状況 |
もちろんこの 4KB/セクタを無視し、 AFT 機能を存分に活かして動作させる方法もあります。今回のように大量のデータをコピーするには 4KB/セクタでパーティションを区切ったハードディスクに比べて3倍程度の時間は掛かると思いますが、一応は動作するはずです。
しかしこの時間のロスや、将来再びやってくるであろうハードディスクの交換に備えて現時点で 4KB/セクタで対応したパーティション切りをしておきたいと思いました。
まず今回最も問題となったのが、FreeBSD 9.2 の標準のインストーラ(bsdinstall)でのパーティション設定でした。シェル上で手動により設定する他ありませんでした。一応、GUI での設定ツールにおいても複数のパーティショニングを行うことができて、それも割り当てられた領域のブロック数が8で割れる 4KB/セクタに対応できるような状態でした。しかし先頭のパーティションの位置が 4KB/セクタの区切りではない場所から始まっていることから全体のパーティションの区切りもずれた状態となっていました。これでは本来のハードディスクの読み書きの性能が得られません。
# gpart show
=> 63 3907029105 ada0 MBR (1.8T)
63 63 - free - (31k)
126 3906994077 1 freebsd [active] (1.8T)
3906994203 34965 - free - (17M)
赤字で表示した freebsd のパーティションの開始位置 126 が 8 で割り切れないブロック位置から開始していることが問題なのです。ちなみに1ブロック512バイトです。
=> 0 3906994077 ada0s1 BSD (1.8T)
0 1048576 1 freebsd-ufs (512M)
1048576 2097152 2 freebsd-swap (1.0G)
3145728 4194304 4 freebsd-ufs (2.0G)
7340032 1048576 5 freebsd-ufs (512M)
8388608 3898605468 6 freebsd-ufs (1.8T)
3906994076 1 - free - (512B)
手動でパーティションを設定するときに使うコマンドで -b オプションによってパーティションの開始ブロック位置の調整ができるようになっていますが、この gpart のコマンドのバグなのか仕様なのかはよく解りませんが、63 ブロック単位でまとめられてしまう癖があり、4KB/セクタの区切りの良い場所でパーティションが設定出来ない状態となっていました。例えば bsdinstall の標準で割り当てられる最初のパーティションの開始ブロックは 126 ブロックとなっています。しかしこれを8で割り切れる 128 ブロックに指定しても、やはり 126 ブロックから開始とするなどと理由のわからぬ位置で区切ってしまうのです。さらに Linux などでよく使われる 2048 ブロックを開始位置にしようとしても 2048 ブロックから配置してくれないのです。
gpart コマンドでのパーティション設定例
MBR 形式でハードディスクを初期設定します。
# gpart create -s mbr /dev/ada0
ada0 created
FreeBSD に割り当てるパーティションの先頭を 504 ブロックとした例です。
# gpart add -a 4k -b 504 -t freebsd /dev/ada0
ada0s0 added
ネット上を検索しながら彷徨っていると、開始ブロックを 504 ブロックから開始すると調度良い区切りができるという情報を得て、ようやく 4KB/セクタに対応したパーティション区切りができました。
# gpart show
=> 63 3907029105 ada0 MBR (1.8T)
63 441 - free - (220k)
504 3907028601 1 freebsd [active] (1.8T)
3907029105 63 - free - (31k)
青字で表示した freeBSD のパーティションの開始位置が 504 ブロックと 8 で割り切れるブロックからの開始となりました。
=> 0 3907028601 ada0s1 BSD (1.8T)
0 1048576 1 freebsd-ufs (512M)
1048576 2097152 2 freebsd-swap (1.0G)
3145728 4194304 4 freebsd-ufs (2.0G)
7340032 1048576 5 freebsd-ufs (512M)
8388608 3898639992 6 freebsd-ufs (1.8T)
3907028600 1 - free - (512B)
ここままで時間をかなり使い果たしてしまいました。データの移行作業は12時間以上の時間が掛かるため、今回の休日での作業は断念となりました。
そこで来週に備えて、以前データの移行作業で使ったシェル・スクリプトの見直しをしました。そして手持ちの空きハードディスクへ新規に FreeBSD 9.2 をインストールして、この仮設のハードディスクから移行先となる WDC WD20EZRX へデータを転送してみました。そして起動まで正しく行えることを確認してみました。
新規に FreeBSD をインストールしたてのため、システムのみの小容量のデータなのでさほどデータに転送の時間が掛かりません。何度かデータの転送を繰り返してみて、データ転送用のスクリプトを試験・調整を行なっておこうと思っています。
データ転送試験の様子です。 手前が仮設のシステムディスクです。 奥がデータの転送先となる新しいハードディスクです。 |
参考
前回のハードディスクの交換の様子の記事はこちらです。
http://near-unix.blogspot.jp/2011/03/blog-post.html