2009/02/18(水)UbuntuでHDD交換

HGSTの500GBのHDDが発売されたので早速購入しました、というかこれが出るの待っていました。


早速X200sに取り付けです。X200sは初期は160GBのHDDでVistHomeがインストールされていましたが、購入直後に取り外して保管。余っていた250GBのHDDを取り付けてUbuntuをインストールして使っていました。まだ取り替えて2週間しか経っていませんので、容量的には余裕ありまくりで換装する必要性はないのですが、この250GBのHDDは別のPCに取り付ける予定の物だったので、そっちに戻す予定です。

というわけでHDDの交換をしてみることにしました。Ubuntuもインストールしただけの状態で、カスタマイズなどほとんどしていないので再インストールする方が間違いなく早いのですが、Ubuntuでのデータ移行は初めてなのでチャレンジということでやってみることにします。

UNUX系OSなのでddでコピーすればいいかな、とも思いましたが、google先生で適当に下調べをしました。注意事項は以下の3点でしょうか?
  1. ddrescueというツールがある
  2. デバイスの管理はUUID
  3. 起動してるHDDの操作は×、LiveCDなどで起動して操作
参考
インストール済みUbuntuのクローンを新しいハードディスクに作成する
http://www.itmedia.co.jp/enterprise/articles/0811/20/news019.html


X200sはCDドライブ搭載ではない&USB接続のドライブも持っていないので、USBメモリにインストールしたUbuntuで起動して操作してみることにしました。いくつか入ってないものがあるのでまずはそれらのインストールから。ちなみにGPartedはLiveCDだと入っているそうです。
$ sudo apt-get install gparted ddrescue

X200s本体内には旧250GBのHDD、USB接続で新500GBのHDDを接続した状態で、USBメモリからブートします。新500GBのHDDはSATA→USB接続にする変換するケーブルを使っています。fdiskで確認すると以下のようになりました。sdaが本体内HDD、sdbがUSBメモリ、sdcが外付けしたHDDです。
$ sudo fdisk -l

Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0002b94a

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       29164   234259798+  83  Linux
/dev/sda2           29165       30401     9936202+   5  拡張領域
/dev/sda5           29165       30401     9936171   82  Linux swap / Solaris

Disk /dev/sdb: 8050 MB, 8050966528 bytes
255 heads, 63 sectors/track, 978 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0000a113

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         978     7855753+  83  Linux

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

ディスク /dev/sdc は正常な領域テーブルを含んでいません

ddではなくddrescueを使ってコピーしてみることにします。ちなみにddresucueだとブロックサイズの調整もautoでやってくれるらしいです。コマンドはdd_rescueなので注意。時間がかかるそうなので、お昼寝して起きたら終わってました。
$ sudo dd_rescue -v /dev/sda /dev/sdc

1回電源を落として、本体内旧HDDと外付けにしていた新HDDを交換して起動確認。UUIDとか変更いらないのかしら、と思いましたが、とりあえずは起動したので後回しにします。次に容量の大きいHDDに移行したので、GPartedを使ってパーティションサイズの変更です。メインのsda1を増やします。手順が結構面倒で、以下の順で操作しました。
  1. sda5がswapなので後ろに動かしたいところだがsda2の中にあるので、sda2を最大
  2. sda5を後ろに移動する
  3. sda2を最小にする
  4. sda1を最大にする
メモリを4GB積んでるのでswapが必要なのかどうか怪しいところですが、今のところはswapはそのまま残す方針でsda1のサイズを大きくしました。GPartedを操作してると容量関係がギビバイトと表示されるので、ギガバイトの誤記かと思いつつもgoogle先生で確認したら誤記ではなくきちんとした単位でした。
Ubuntu Tips/その他/ギビバイトとメビバイト
https://wiki.ubuntulinux.jp/UbuntuTips/Others/GibibyteMebibyte

もう1度再起動しましたが、問題なく起動するようです。まったくトラブルなくきましたが、UUIDの変更とかまったくしていないのに大丈夫なの?と気になってちょっと検索。grubのmenu.lstとfstabをチェックすべし、というのがあったので見てみることにします。/boot/grub/menu.lstの中身を見るとUUIDが指定されています。UUIDは以下のコマンドで確認できるようです。
$ sudo vol_id /dev/sda1
/dev/sda1のUUIDと、menu.lstのUUIDはまったく同じで問題なさそうです。これは勝手に変えてくれるのかな、とも思いましたがそのままfstabのチェックをすると、こちらも問題なさそうです。fstabにはswapの指定もあるので、そっちもチェックしてみることにします。
$ sudo vol_id /dev/sda5
swapの方は一致しませんでした。これは古いままなのかな。
less /proc/swaps
たしかにswapが動作していません。動作しなくても問題なさそうですが、一応fstabのswapのところをvol_idで出てきた数字に直してみたらきちんと動作しました。


他にも気づいていないだけで、問題があるかもしれませんが、少しずつチェックしていく予定です。久々にLinuxでデータ移行をしましたが、昔に比べるとGUI(GParted)で操作できる分だいぶ難易度は下がったと思いますが、同じUNIX系OSだとMacOSがめちゃくちゃ簡単なので、もう少しかな、とも思います。WindowsはTrueImage入れると楽に移行できるけど、有償パッケージだし値段もそこそこするので×