HDDからSSDへの換装作業ログ

512GBのSSDを買ってもらった。 研究室の端末のUbuntu 14.04をSSDにのせてシステムを高速化しよう。 /home は別HDDからマウントしてるので、バックアップはまぁとらなくてもいいか。 失敗したらクリーンインストールすりゃええねん。

換装前の blkid とか fdisk とかのログをとり忘れたけど、 2TBのHDD にシステム領域が10GB程度あるだけだった。 もったいないのであとでマウントして使う。

以下、HDDを /dev/sda, SSDを /dev/sdb としよう。 いろいろHDDが付いてる場合は全部ケーブル抜いてから作業するといいと思う。

システムファイルの引越し

パーティションの準備

2TBの領域を512GBのSSDにのせることはできないので、 HDD側のパーティションを小さくしておく。 マウントしてるとパーティションを変更できないので Live DVD からUbuntuを起動。 gparted ユーティリティを使ってマウスでポチポチ。 とりあえず50GBくらいまで小さくしておいた。

続いてSSD側にもパーティションを作っておく。

$ sudo cfdisk -z /dev/sdb 

fdisk -l で確認したら次へ。

SSDにパーティションをコピー

データ復旧用のユーティリティを使ってまるごとコピーする。

$ sudo su
$ apt-get update
$ apt-get install gddrescue

と思ったがパッケージが見つからないと怒られたので、手動でインストールした。

$ apt-get install build-essential file-roller
$ wget http://ftp.heanet.ie/mirrors/gnu/ddrescue/ddrescue-1.18.1.tar.lz
$ tar -xvf ddrescue-1.18.1.tar.lz
$ cd ddrescue-1.18.1/
$ ./configure
$ make
$ make install

ちなみにライブ起動のrootにはパスワードがない。

インストールできたらコピー実行。 コピー元を /dev/sda1, コピー先のSSDを /dev/sdb1 としよう。

$ ddrescue -v -f /dev/sda1 /dev/sdb1

パーティションサイズを小さくしてあるのでそんなに時間はかからない。
終わったら、たぶんほとんどの領域が unallocated になってると思うので また gparted を使ってパーティションを適当なサイズに修正。 自分は拡張領域を作って メモリと同サイズの swap も作成。

UUIDの罠

この段階で、なぜか /dev/sdb1 のUUIDが /dev/sda1 の値とまったく一緒になってしまった。 このままだと片方しか認識されなくていろいろまずいので、どちらかのUUIDをはやめに変更すべし。 gparted でNew UUIDを選択すると自動でランダムな値を振ってくれる。

fstab とか grub とか

自動マウントの設定

起動時に /dev/sdb1 を / にマウントするように /etc/fstab を修正する。 swap も設定した場合はそれも。

$ mkdir /mnt/ssd
$ mount /dev/sdb1 /mnt/ssd
$ vi /mnt/ssd/etc/fstab

デバイスファイル名ではなくUUIDで記述することを推奨。

grub のインストール

/dev/sda1 の fstab も同様に編集して再起動すると、 まず HDD (/dev/sda) のブートローダが起動して、 HDD の /etc/fstab の設定を参照して SSD が / にマウントされる、 という中途半端な状態になる。 SSD 単独でブート可能にするために /dev/sdb に grub をインストールする。

ここを参考にした。 ライブ起動した状態で、

$ mount /dev/sdb1 /mnt/ssd &&
$ mount --bind /dev /mnt/ssd/dev &&
$ mount --bind /dev/pts /mnt/ssd/dev/pts &&
$ mount --bind /proc /mnt/ssd/proc &&
$ mount --bind /sys /mnt/ssd/sys

$ chroot /mnt/ssd
$ grub-install /dev/sdb
$ grub-install --recheck /dev/sdb
$ update-grub
$ exit

$ umount /mnt/sys &&
$ umount /mnt/ssd/proc &&
$ umount /mnt/ssd/dev/pts &&
$ umount /mnt/ssd/dev
$ umount /mnt/ssd

これでインストール完了。 HDDとLive DVDを取り外して再起動すれば、SSDのgrubからブートローダが立ち上がる。

戦後処理

error: malformed file

もしかすると再起動したときにこんなエラーが出るかもしれない。 grub の不整合が原因っぽいがよくわからない。 フォーラムには

$ echo "GRUB_SAVEDEFAULT=true" >> /etc/default/grub

で解決するよ、みたいに書いてあったがエラーが2行に増えただけだった。

結局、わからんながらもうまくいったのは

$ echo "GRUB_SAVEDEFAULT=false" >> /etc/default/grub
$ update-grub

だった。再起動で全行程終了。