はじめに
- OSをそのまま別ディスクにコピーしたい、けど、単なるコピーでは無理な方向けの記事
- 大きいディスクを小さいディスクにしたいなど
- 移行元HDDが、移行先HDDより大きい場合で、ddなどではコピーできない場合の手法
- rsyncで /dev/sda (64GB) から /dev/sdb (16GB) に Ubuntu をコピーして起動可能にするメモ
- ubuntu24.04 をコピーしています
- /dev/sda から /dev/sdb にコピーします
- x86_64-efi、または、arm64-efi 環境
BIOS版はこちらの記事を参照してください
【2025年09月版】rsyncで /dev/sda から /dev/sdb に Ubuntu をコピーして起動可能にするメモ【BIOS版】
/dev/sda には 以下のパーティションのみがある場合の手順です。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─ubuntu--vg-lv--0 252:0 0 60.9G 0 lvm /
手順
- コピー先のディスクの準備
- rsync でコピー
- システム設定修正
- 起動テスト
コピー先のディスクの準備
/dev/sda と /dev/sdb の状態
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─ubuntu--vg-lv--0 252:0 0 60.9G 0 lvm /
sdb 8:16 0 16G 0 disk
パーティション作成
- sdb1 → EFI
- sdb2 → /boot
- sdb3 → LVM
sudo parted /dev/sdb mklabel gpt
# EFI 512MiB
sudo parted -a opt /dev/sdb mkpart ESP fat32 1MiB 513MiB
sudo parted /dev/sdb set 1 esp on
# /boot 1GiB
sudo parted -a opt /dev/sdb mkpart primary ext4 513MiB 1537MiB
# 残りを LVM に全部
sudo parted -a opt /dev/sdb mkpart primary 1537MiB 100%
sudo parted /dev/sdb set 3 lvm on
フォーマット
# EFI
sudo mkfs.fat -F32 /dev/sdb1
# /boot
sudo mkfs.ext4 /dev/sdb2
# LVM 初期化
sudo pvcreate /dev/sdb3
sudo vgcreate ubuntu-vg-b /dev/sdb3
sudo lvcreate -l 100%FREE -n lv-0 ubuntu-vg-b # 100% 利用
sudo mkfs.ext4 /dev/ubuntu-vg-b/lv-0
マウント
sudo mount /dev/ubuntu-vg-b/lv-0 /mnt
sudo mkdir -p /mnt/boot /mnt/boot/efi
sudo mount /dev/sdb2 /mnt/boot
sudo mkdir -p /mnt/boot/efi
sudo mount /dev/sdb1 /mnt/boot/efi
rsync でコピー
除外リストをつけてルートを丸ごとコピー
sudo rsync -aAXHv --progress / /mnt \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}
-aAXH : パーミッション・ACL・ハードリンク保持
--progress : 進行状況表示
--exclude : 除外、ランタイム系ディレクトリ(/dev, /proc, …)
システム設定修正
UUID の取得
UUID を控える
sudo blkid /dev/sdb1 /dev/sdb2 /dev/ubuntu-vg-b/lv-0
/mnt/etc/fstab の修正
控えた UUID に変更。
- /dev/ubuntu-vg-b/lv-0 の UUID → /
- /dev/sdb2 の UUID → /boot
- /dev/sdb1 の UUID → /boot/efi
sudo vim /mnt/etc/fstab
例:
UUID=<uuid-of-sdb2> /boot ext4 defaults 0 2
UUID=<uuid-of-sdb1> /boot/efi vfat umask=0077 0 1
UUID=<uuid-of-lv0> / ext4 defaults 0 1
GRUB をインストール
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
# x86_64の場合は以下
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
# ARMの場合は以下
#grub-install --target=arm64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
update-grub
exit
アンマウント
sudo umount -R /mnt
起動テスト
/dev/sda のHDDを、/dev/sdb のHDDと交換して、UEFI でブート順を指定して起動する。
起動しない場合は、Live USB で起動して再度 grub-install と update-grub を実行するとうまくいくこともある。
さいごに
かんたんでしたね。