遊びに使っているThinkpadで使用しているSSDで、何気にdmesgを確認していたところIO errorが出力されていることを確認しました(ログを取っておくのを忘れた)。
HDDだと色々とステータスを探ったり、物理的に振動や稼動音から調子を探ることをもできますが、SSDとなると振動や音もありませんし、SMARTからもその調子を判別するのは難しいと思います。
Buffer I/O error on device hda1, logical block xxxxxx
lost page write due to I/O error on hda1
end_request: I/O error, dev hda, sector xxxxxxx
精神的安寧を得るために即時に代わりのSSDを発注しました。今回は「Crucial M4 128GB」にしました。旧環境は64GBで今回は128GBということで、パーティションの拡張も併せて必要になります。
しかしながらここで一つ問題が。普段はWindowsばかり触っているせいかLinux系でのディスク移行の方法について全く知らないので、本機会で少し調べながらですが実践してみることにしました。
用意したもの
- Ubuntu Liveメディア →「スタートアップディスクの作成」などで作成
- 新しいSSD
- SATA to USB変換ケーブル
- ノートPC
手順
手順自体は以下のWebサイトのものをそのままなぞれば問題ない。
1. Live USBでUbuntu起動する。
2. [システム設定] → [ソフトウェアソース]を選択し、[コミュニティーによるメンテナンスされるオープンソースソフトウェア(universe)]にチェックを入れる
3. Terminalを起動し、以下のコマンドを実行する。またddrescueをインストールする。
sudo apt-get update && sudo apt-get install ddrescue
4. 以下のコマンドを実行し、SSDの参照名を確認する。(今回は/dev/sdc
が対象。また、下記に出ている数値等はイメージ)
sudo fdisk -l
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 233443327 116720640 83 Linux
/dev/sda2 233443328 250069679 8313176 5 Extended
/dev/sda5 233445376 250068991 8311808 82 Linux swap / Solaris
Disk /dev/sdc: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xb94838a4
Disk /dev/sdc doesn't contain a valid partition table
5. ディスクの参照名を確認できたら、以下のコマンドを実行し、一旦初期パーティションテーブル情報を書き込む。(今回は/dev/sdc
が対象)
sudo cfdisk -z /dev/sdc
6. GUIが起動してきたら、「Create」→「Primary」→「Sizeは任意のサイズを指定」→「Bootable(起動ディスクの交換のため)」の順で選択し、「Write」を選択、パーティション情報をディスクに書きこむ。
7. パーティション情報が書きこまれたことを確認したら、以下のコマンドを実行しディスクのクローンを作成する(ちなみに自分の環境では-f
を付けないと実行できなかった)。実行時間はクローン元のディスク容量に比例してかかるので、気長に待つ。
sudo ddrescue -v -f /dev/sda /dev/sdb
8. ddrescue
コマンドが終了したら、一旦PCをシャットダウンし、元のディスクから新しいディスクに交換する。再度Live USBからubuntuを起動する。
9. 今回は元の64GBでクローンされているので、新しい方のSSDの全容量が活用されていない。そのためパーティションを拡張する必要がある。Gpartdを起動する。
10. 細かい手順は省くが、概ね以下の通り。
- Swapをoffにする
- 拡張パーティション(Extended)を最大容量まで拡張する
- 一旦パーティション情報を書き込む
- 拡張パーティションが拡張されたら、スワップ領域を拡張パーティションの最後尾に移動する
- Ubuntuの入っているLinuxパーティションを最大容量まで拡張する
- パーティション情報を書き込む
- swapをonにする
11. 以下のコマンドを実行し、パーティション情報にエラーがないことを確認する。
sudo fsck.ext4 -f /dev/sda1
12. ディスクから起動し、問題なく起動することを確認する。
以上。