外付けSSDにクローンディスクを作成する

外付けSSDにクローンディスクを作成する

はじめに

外部に公開している自宅サーバに、追加で 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 の入れ替え

  1. システムをシャットダウン
  2. 元の SSD を取り外し
  3. クローンした SSD(sdb)を取り付け
  4. システムを起動

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 の起動まで到達しませんでした。

もう一度同じ手順でクローンディスクを作成したところ正常に起動しました。

参考サイト