はじめに
外部に公開している自宅サーバに、追加で Web アプリケーションのコンテナを展開したときにディスク容量が足りない(128GB の SSD)と言われたので、仕方なく 500GB の SSD にクローンディスクを作成したときの記録です。
外付けケースはロジテック HDD SSD ケース 2.5 インチ USB3.2 Gen1 ブラック LGB-PBSU3を使用しました。
前提条件
- 元のシステムディスク:
/dev/sda(111.8GB)- 必要であればバックアップを取得しておく
- クローン先の外付け SSD:
/dev/sdb(476.9GB)- フォーマット済み
- OS: Ubuntu 22.04
※sdXなどの名前は起動時のデバイス検出順によって変化します。自身の環境に置き換えてください。
1. 現在のディスク状態を確認
# ディスク構成を確認
lsblk
# 外付けSSDが空であることを確認
sudo fdisk -l /dev/sdb
2. システムの安全停止
# Dockerコンテナを停止(実行中の場合)
# システムを同期
sudo sync
3. 完全クローンの実行
ストレージ容量にもよりますが、私の環境では 5 分程度で完了しました。
# 完全クローン実行(約111.8GBのデータをコピー)
sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress
4. クローン完了の確認
# クローンされたディスクの情報を確認
sudo fdisk -l /dev/sdb
# パーティションが正しく複製されているか確認
lsblk
5. クローン先ディスクのファイルシステムの整合性チェック
# 各パーティションのファイルシステムをチェック
sudo e2fsck -f /dev/sdb1
sudo e2fsck -f /dev/sdb5
sudo e2fsck -f /dev/sdb6
6. パーティション UUID の更新
# 新しいUUIDを生成
sudo tune2fs -U random /dev/sdb1
sudo tune2fs -U random /dev/sdb5
sudo tune2fs -U random /dev/sdb6
# 新しいUUIDを確認(IDを控えておく)
sudo blkid /dev/sdb*
7. ブートローダーの修復
# クローンされたディスクのルートパーティションをマウント
sudo mount /dev/sdb1 /mnt
# 必要なディレクトリをマウント
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# chrootでクローンされたシステムに入る
sudo chroot /mnt
# ブートローダーを再インストール
grub-install /dev/sdb
update-grub
# chrootから出る
exit
# マウントを解除
sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt
8. fstab ファイルの更新
コピー先の fstab が読み取り専用となっていて書き込みエラーになっている場合は、ファイル属性を確認してchattrコマンドを実行してください。
# ファイル属性を確認
lsattr /mnt/etc/fstab
# immutable属性を解除(必要に応じて)
sudo chattr -i /mnt/etc/fstab
# fstabファイルを編集
sudo vim /mnt/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=更新後のUUID / ext4 errors=remount-ro 0 1
# /home was on /dev/sda5 during installation
UUID=更新後のUUID /home ext4 defaults 0 2
# /var was on /dev/sda6 during installation
UUID=更新後のUUID /var ext4 defaults 0 2
/swapfile none swap sw 0 0
9. 最終確認とマウント解除
# マウントを解除
sudo umount /mnt
# 最終確認
sudo blkid /dev/sdb*
10. SSD の入れ替え
- システムをシャットダウン
- 元の SSD を取り外し
- クローンした SSD(sdb)を取り付け
- システムを起動
11. 入れ替え後のパーティション容量拡張(オプション)
# 現在のパーティション状況を確認
lsblk
df -h
# パーティションテーブルを拡張
sudo parted /dev/sdb
# parted> resizepart 1 100%
# parted> quit
# ファイルシステムを拡張
sudo resize2fs /dev/sdb1
# 確認
df -h
起動しない場合
- BIOS/UEFI 設定で起動順序を確認
- fstab の内容(UUID 等)が正しいか確認
- もう一度クローンディスクを作成して、ブートローダーの修復でエラーが発生していないか確認する
私の環境ではブートローダーの修復がうまく完了していなかったのか、1 回目のコピーでは OS の起動まで到達しませんでした。
もう一度同じ手順でクローンディスクを作成したところ正常に起動しました。



