1年前に構築したUbuntu16.04 Desktopのサーバのシステムドライブが満杯になってしまったので,応急処置的にHDDに交換しました。

(Pic from PAKUTASO )


0. 現状

30GBのSSDに/,swapなど,通常のUbuntuをインストールすると作られるパーティションがあります。

SSDからHDD(1TB TOSHIBA)にデータをそっくりそのまま移して同じシステムを使用することが目標です。

1. 方法

まず,SSDから新しいハードディスクにブートローダ含めたすべてのデータをコピーするために,「dd」コマンドを使用して,ディスクの複製を行います。その後,移動先のHDDのパーティション情報を操作します。
この時注意がいるのは,SSD(移動元)よりHDD(移動先)が容量が大きい場合にこの方法が使用可能である点です。移動先のディスクのほうが小さい場合は移動元のデータを移動先のディスク容量より小さくするようにして望む必要があります。

1.1 コピーを作成する
  1. サーバの電源を落として,新しいHDDを接続します。
  2. UbuntuのUSBインストーラの起動ディスクを使用して,「Ubuntuをインストールせずに使用する(Try Ubuntu without Installing)」を選んで起動する。
  3. Ubuntuのターミナルを起動して以下のコマンドを使用してディスクの情報を確かめます。
  4. ディスクのデバイス名を確認したら以下のコマンドを使用してSSDをフルコピーします。今回のディスクはコピー元が「/dev/sda」,コピー先が「/dev/sdb」です。コピー元に「if=」,コピー先を「of=」で指定してやります。bsはブロックサイズなのですが,適当な値を指定してやらないとコピーが非常に遅くなるため,ここでは4MBに指定しています。

1.2 コピー先のHDDのパーティション情報を操作する
UbuntuはGPartedというパーティション操作のGUIアプリケーションがあるのでそれを使用します。

非常にかんたんなので,スクリーンショットは撮っていないので,文字で手順だけ書いておきます。
  1. swap領域をHDDの一番後ろまで拡張します。
  2. 次にswapをHDDの一番後ろまで持っていきます。今回のSSDでのswap領域は16GBあったのでその分だけ移動します。
  3. その後,HDDに未利用領域ができるため,これを縮小して右側に持っていきます。
  4. ここまで来ると「システム領域」・「未割当領域」・「swap領域」の順になっていると思います。
  5. そして,システム領域を拡張して未割当領域をなくします。
  6. これでHDDのパーティションは「システム領域」・「swap領域」だけになったはずです。
  7. あとはチェックマークを押して反映させるだけでパーティション操作は完了です。

2.結果

これでSSD(30GB)からHDD(1TB)に換装して以前と何ら変わらずサーバを使用することができました。

再起動時にちょっとしたエラーがありました。HDDをあらたに差し込んだので,fstabのマウントするディスク情報と実際の割当ディスク情報の整合性が取れなくなったため起動しませんでした。
解決策としては起動時のEmergency modeでHDD識別子(UUID)を使用して,正しいディスク情報をfstabに登録しました。
HDDをUUIDでfstabに登録する際,UUIDを調べるためのコマンドは「sudo blkid」を使用すればOKです。

3. まとめ

いまさらDockerに興味があったのでインストールしようと思っていたら,ディスク容量がネックになったため交換しました。あの世代のSSDと今のHDDの性能だからそんなに速度とかに問題はないように思います。(そもそも一度起動したらLogくらいでしか読み書きしてないようなシステムですからね。)
これからDockerを使用していくぞー。


参考資料: