パーティションとファイルシステムを別のデバイスに移行する方法

パーティションとファイルシステムを別のデバイスに移行する方法

パーティションがある既存のシステムがありますが、それを新しいデバイスに移動したいと思います。新しいデバイスはより小さく、既存のデバイスとは異なる方法で接続できます。パーティションとファイルシステムを移動してブートシステムを維持するにはどうすればよいですか?

ベストアンサー1

標準のツールセットを使用して、Linuxオペレーティングシステムと一緒にドライブをコピーできます。ディストリビューションにはいくつかの注意事項がありますが、ほとんどの場合、これはすべてのディストリビューションに適用されます。この例では、HDDからHDDより小さいSSDに移行します。

パーティションおよびファイルシステムに関する情報を収集します。

パーティション/ブロックデバイスレイアウト:

lsblk -o NAME,VENDOR,SERIAL,FSTYPE,MODEL,SIZE,TYPE,MOUNTPOINT

作業するパーティションと受信ディスクを決定します。

ls /dev/disk/by-id/

lsblkの情報に基づいて、既存のパーティションと受信ディスクに/dev/diskパスセットを作成します。 lsblkのVENDORは実際にはバス名です。

/dev/disk/by-id/[busname]-[model]_[serial]-partX

たとえば、

/dev/disk/by-id/usb-hdd1000_1234-part1
/dev/disk/by-id/usb-hdd1000_1234-part2
/dev/disk/by-id/usb-hdd1000_1234-part3
/dev/disk/by-id/usb-hdd1000_1234-part4
/dev/disk/by-id/usb-hdd1000_1234-part5

そしてソースディスクとシンクディスク:

/dev/disk/by-id/usb-hdd1000_1234
/dev/disk/by-id/ata-ssd1000_1234

ls -laを使用して、予想されるデバイスが正しいことを確認してください。

ls -la /dev/disk/by-id/usb-hdd1000_1234
  /dev/disk/by-id/usb-hdd1000_1234 -> ../../sda
ls -la /dev/disk/by-id/ata-ssd1000_1234
  /dev/disk/by-id/ata-ssd1000_1234 -> ../../sdb

理想的なパーティションレイアウトの決定

例えば

Device size: 256GiB
1 EFI     256MiB
2 Linux    20GiB
3 Windows  80GiB
4 Data    139.75GiB
5 Swap     16GiB

特定のシステムにどのタイプのパーティションが必要かどうかを確認するには、別の質問を参照してください。ただし、特にSSDに移行するときは、すべてのパーティションが4Kセクタに収まっていることを確認してください。これを行うには、各パーティションのサイズを4KiBに分割できるように調整します。

新しいパーティションの作成

fdiskやpartedなどを使用できます。今はGPTのみ紹介します。サンプルパーティションレイアウトの使用:

fdisk /dev/disk/by-id/ata-ssd1000_1234

g 新しい GPT パーティションテーブルの場合

n 新しいパーティションの場合

デフォルトのパーティション番号を表示するには、Enterを押します。

デフォルトの開始セクタを表示するにはENTERを押します。

スタートセクタ(+)前の256MiB(M)の場合は+256Mです。

t 1

1

EFI システムの場合は fs タイプです。

型コードは次のとおりです。

1 EFI System - Needed on EFI systems for booting
4 BIOS Boot - Used for executable data on BIOS mode GPT disks
11 Microsoft Basic Data - Used for most Windows data partitions including NTFS
20 Linux file system - Used for all Linux based file systems except swap. Other types exist for special volume types like RAID (29) and LVM (31).
19 Linux swap - for swap partitions

他のパーティションについてもこの操作を繰り返します。

または次のものと分離:

parted
> select /dev/disk/by-id/ata-ssd1000_1234
> mktable gpt
> mkpart ESP fat32 1MiB 513MiB
> set 1 boot on
> mkpart primary ext4 513MiB 20737MiB
> mkpart primary ntfs 20737MiB 102657MiB
> mkpart primary ext4 102657MiB 245761MiB
> mkpart primary linux-swap 245761MiB 262145MiB

サイズ変更が必要なファイルシステムがあることを確認する

受信ディスクが小さいか小さいパーティションが必要な場合は、既存のファイルシステムを縮小する必要があります。

ファイルシステム使用率:

dh -h

ファイルシステムにこれを行うのに十分な空き容量があることを確認してください。ファイルシステムがNTFSの場合は、Windowsでディスク管理を使用することをお勧めします。

たとえば、Linuxパーティションのサイズを変更します。/dev/disk/by-id/usb-hdd1000_1234-part2

e2fsck -f /dev/disk/by-id/usb-hdd1000_1234-part2
resize2fs /dev/disk/by-id/usb-hdd1000_1234-part2 20G

正確なサイズがわからない場合は、予想される新しいパーティションサイズよりもはるかに小さいサイズにサイズ変更してください。ファイルシステムは後で正確なサイズに拡張できます。

resize2fs /dev/disk/by-id/usb-hdd1000_1234-part2 19G

または約500MiB 19GiB = 19456MiB + 500MiB = 19956MiB

resize2fs /dev/disk/by-id/usb-hdd1000_1234-part2 19956M

ファイルシステムを新しいパーティションに複製する

割り当てられたスペースのみをコピーしてファイルシステムを複製します。

シングルユーザーモードまたはLive CDでこれを行うことができます。

partclone.fat32 -b -s /dev/disk/by-id/usb-hdd1000_1234-part1 -o /dev/disk/by-id/ata-ssd1000_1234-part1
partclone.ext4 -b -s /dev/disk/by-id/usb-hdd1000_1234-part2 -o /dev/disk/by-id/ata-ssd1000_1234-part2
partclone.ntfs -b -s /dev/disk/by-id/usb-hdd1000_1234-part3 -o /dev/disk/by-id/ata-ssd1000_1234-part3
partclone.ext4 -b -s /dev/disk/by-id/usb-hdd1000_1234-part4 -o /dev/disk/by-id/ata-ssd1000_1234-part4

再交換

mkswap /dev/disk/by-id/usb-hdd1000_1234-part5

/dev/disk/by-id/usb-hdd1000_1234-part2でファイルシステムのサイズを縮小し、/dev/disk/by-id/ata-ssd1000_1234-part2にコピーするため、拡張する必要があるかもしれません。 。寸法が正確にコピーされている場合は、この作業は不要です。

resize2fs /dev/disk/by-id/ata-ssd1000_1234-part2

新しいディスクを使用してシステムを起動可能にします。

ファイルシステムとパーティションがUEFIに移動されたため、ブートローダとLinuxは新しいパーティションを理解する必要があります。別のアプローチはUUIDまたはパーティションの順序を再利用することですが、このアプローチには調整と変更が必要な場合がありますので、必要に応じて更新します。

Linux:

ディストリビューションによっては、スワップパーティションを自動的に検出して使用するか、fstab に含める必要があります。

起動に必要なパーティションのfstabを更新します。これにはパーティションが含まれます。

/
/boot
/boot/efi
/home

この例では、更新する/および/boot/efiのみがあります。

fstabでlsblkのUUID出力を使用します。

/etc/fstab 編集

最初のEFIシステム

lsblk -no UUID /dev/disk/by-id/ata-ssd1000_1234-part1

出力を使用して/boot/efiを使用してfstabの行を変更します。ここでUUID =はlsblkのUUID出力に変更する必要があります。

Linuxファイルシステムにも同じことを行います。 lsblk -UUIDなし/dev/disk/by-id/ata-ssd1000_1234-part2

UEFI:

あるいは、Windowsでブートローダーを回復する必要があるフォーマット済みEFIシステムパーティションから始めることもできます。それ以外の場合は、このステップをスキップしてください。

mkfs.vfat -F32 /dev/disk/by-id/ata-ssd1000_1234-part1

efibootmgrを使用してUEFIにアイテムを手動で追加できますが、GRUBに組み込まれている機能を使用します。

幼虫:

それではGRUBブートローダーだけを紹介します。

mount /dev/disk/by-id/ata-ssd1000_1234-part2 /mnt
mount /dev/disk/by-id/ata-ssd1000_1234-part1 /mnt/boot/efi

grub-install --target=x86_64-efi --boot-directory=/mnt/boot --efi-directory==/mnt/boot/efi --bootloader-id="NewLinux"
grub-mkconfig -o /mnt/boot/grub/grub.cfg

UEFIに表示する項目にbootloader-idパラメータを設定します。現在の設定とは異なる場合があります。

grub-mkconfigは、実行中のシステムスクリプトを使用してエントリを生成します。既存のディスクを使用している場合、これには独自のエントリが含まれ、os-proberには別のディスクが含まれます。起動時にデフォルト値ではないため、これを選択する必要があります。ライブCDを使用している場合、os-proberは両方のインストールを検出します。新しいシステムに入ったら、grub-mkconfigを再実行して新しいシステムで生成されたエントリを取得します。

最後に、ファイルシステムをアンマウントして再起動します。

umount /mnt/*
reboot

osproberエントリのgrubから新しいディスクを選択し、新しいディスクから起動して再構築します。

grub-mkconfig -o /boot/grub/grub.cfg

おすすめ記事