はじめに
Arch LinuxのOSが入っているSSDをM.2 SSDへクローンしました。このSSDとM.2 SSDは容量が異なり、M.2 SSDの方が多いです。クローンした後容量拡張し、ストレージの全領域が使えるようにします。
- 移行元: SSD 480GB
- 移行先: M.2 SSD 4TB
手順
Bootable USB Flashを作成&接続
適当なPCで、Bootable USB Flashを作成します。とりあえず手元にArch LinuxのISOファイルArch Linux - Downloads をBootableとしたUSB Flashがあったためそのまま使いました。このUSB Flashを移行元・先のSSDを接続しているPCに接続し、Bootable USB FlashからArch Linuxを起動します。起動後、以下のコマンドで、各ストレージと含まれるパーティションを出力します。
lsblk
# 以下のように出力された
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# loop0 7:0 0 971.9M 1 loop /run/archiso/airootfs
# sda 8:0 0 447.1G 0 disk
# ├─sda1 8:1 0 512M 0 part
# ├─sda2 8:2 0 4G 0 part
# └─sda3 8:3 0 442.6G 0 part
# sdb 8:16 1 28.9G 0 disk
# ├─sdb1 8:17 1 1.2G 0 part
# └─sdb2 8:18 1 251M 0 part
# nvme0n1 259:0 0 3.7T 0 disk
# ├─nvme0n1p1 259:1 0 100M 0 part
# ├─nvme0n1p2 259:2 0 16M 0 part
# ├─nvme0n1p3 259:3 0 3.7T 0 part
# └─nvme0n1p4 259:4 0 773M 0 part
「SIZE」の列より、以下の接続状況だとわかります。
- sda: SSD 480GB
- sdb: Bootable USB Flash
- nvme0n1: M.2 SSD 4TB
クローンの実行
Arch LinuxのOSが入っているSSDをM.2 SSDへクローンします。
# 時間がかかるので、経過時間が分かるよう現在時刻を出力しておきます
date
dd if=/dev/sda of=/dev/nvme0n1 bs=64K conv=noerror,sync status=progress
# 479977340928 bytes (480 GB, 447 GiB) copied, 1674 s, 287 MB/s
# 7325805+1 records in
# 7325806+0 records out
# 480104022016 bytes (480 GB, 447 GiB) copied, 1697.85 s, 283 MB/s
# dd if=/dev/sda of=/dev/nvme0n1 bs=64K conv=noerror,sync status=progress 7.70s user 157.76s system 9% cpu 28:17.87 total
クローン完了後、パーティション等を確認します。以下のように出力されました。
lsblk -f
# NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
# loop0 squashfs 4.0 0 100% /run/archiso/airootfs
# sda
# ├─sda1 vfat FAT32 D8E6-C659
# ├─sda2 swap 1 59a086d6-1223-46c8-8fa7-611f679ce776
# └─sda3 ext4 1.0 fd325ed5-93f7-41cf-baf4-a582a6f41b0d
# sdb iso9660 Joliet Extension ARCH_202601 2026-01-01-11-33-55-00
# ├─sdb1 iso9660 Joliet Extension ARCH_202601 2026-01-01-11-33-55-00
# └─sdb2 vfat FAT32 ARCHISO_EFI 6956-5BA3
# nvme0n1
# ├─nvme0n1p1 vfat FAT32 08A9-726A
# ├─nvme0n1p4 ntfs 0AA0B164A0B156C3
# └─nvme0n1p3 ext4 1.0 fd325ed5-93f7-41cf-baf4-a582a6f41b0d
クローンしたにもかかわらず、sdaとnvme0n1の内容が異なっているように見えますが、UUIDの重複のあるストレージが存在する状態なので、おかしいのかもしれません。いったんシャットダウンし、旧SSDを取り外します。再度Bootable USB FlashからArch Linuxを起動し、動揺にパーティション等を確認します。確認すると、nvme0n1の内容が正常に表示されました。
lsblk -f
# NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
# loop0 squashfs 4.0 0 100% /run/archiso/airootfs
# sda iso9660 Joliet Extension ARCH_202601 2026-01-01-11-33-55-00
# ├─sda1 iso9660 Joliet Extension ARCH_202601 2026-01-01-11-33-55-00
# └─sda2 vfat FAT32 ARCHISO_EFI 6956-5BA3
# nvme0n1
# ├─nvme0n1p1 vfat FAT32 D8E6-C659
# ├─nvme0n1p2 swap 1 59a086d6-1223-46c8-8fa7-611f679ce776
# └─nvme0n1p3 ext4 1.0 fd325ed5-93f7-41cf-baf4-a582a6f41b0d
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# loop0 7:0 0 971.9M 1 loop /run/archiso/airootfs
# sda 8:0 1 28.9G 0 disk
# ├─sda1 8:1 1 1.2G 0 part
# └─sda2 8:2 1 251M 0 part
# nvme0n1 259:0 0 3.7T 0 disk
# ├─nvme0n1p1 259:1 0 512M 0 part
# ├─nvme0n1p2 259:2 0 4G 0 part
# └─nvme0n1p3 259:3 0 442.6G 0 part
ディスク領域の拡張
480GBのストレージを4TBのストレージにクローンしたので、空き領域があるはずです。nvme0n1p3がデータ領域のパーティションなので、これを以下のコマンドで拡張してみます。
resize2fs /dev/nvme0n1p3
# resize2fs 1.47.3 (8-Jul-2025)
# Please run 'e2fsck -f /dev/nvme0n1p3' first.
言われた通り、e2fsck を起動してみます。途中、「extent tree」というものを最適化するかどうか聞かれましたので、すべてyesで答えました。とくにnoでも問題ないです。
e2fsck -f /dev/nvme0n1p3
# e2fsck 1.47.3 (8-Jul-2025)
# Pass 1: Checking inodes, blocks, and sizes
# Inode 1573306 extent tree (at level 1) could be narrower. Optimize<y>? yes
# Inode 1573334 extent tree (at level 1) could be narrower. Optimize<y>? yes
# Inode 1573371 extent tree (at level 1) could be narrower. Optimize<y>? yes
# ...(中略)
# Pass 1E: Optimizing extent trees
# Pass 2: Checking directory structure
# Pass 3: Checking directory connectivity
# Pass 4: Checking reference counts
# Pass 5: Checking group summary information
#
# /dev/nvme0n1p3: ***** FILE SYSTEM WAS MODIFIED *****
# /dev/nvme0n1p3: 1178839/29016064 files (0.7% non-contiguous), 96585352/116032977 blocks
完了しました。
もう一度、resize2fsでファイルシステムを拡張します。が、うまく行きません。すでに最大まで拡張されており何もすることがないと言われます。
resize2fs /dev/nvme0n1p3
# resize2fs 1.47.3 (8-Jul-2025)
# The filesystem is already 116032977 (4k) blocks long. Nothing to do!
どうも、最初にパーティションの拡張が必要のようです。以下のコマンドでパーティションを拡張します。
parted /dev/nvme0n1
# GNU Parted 3.6
# Using /dev/nvme0n1
# Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print # 現状のパーティション状態を確認
# Warning: Not all of the space available to /dev/nvme0n1 appears to be used, you can fix the GPT to use all of the space (an extra 7063870464 blocks) or continue with the current setting?
すべてのスペースを使っていないという警告が出力されますので、「Fix」を入力します。
Fix/Ignore? Fix # <---Fixと入力した
#
# Model: xxxxxxxxxxxxxxxxxxxxx (nvme)
# Disk /dev/nvme0n1: 4097GB
# Sector size (logical/physical): 512B/512B
# Partition Table: gpt
# Disk Flags:
#
# Number Start End Size File system Name Flags
# 1 1049kB 538MB 537MB fat32 EFI boot, esp
# 2 538MB 4833MB 4295MB linux-swap(v1) swap swap
# 3 4833MB 480GB 475GB ext4 root
正常にパーティション一覧が表示されるので、データ領域を拡張します。上記の場合は、パート1がboot領域、2がswap、3にデータ領域となっているので、以下のように入力しました。
(parted) resizepart 3 100%
(parted) print
# Model: MS950G70PCIe4HSE-04TB (nvme)
# Disk /dev/nvme0n1: 4097GB
# Sector size (logical/physical): 512B/512B
# Partition Table: gpt
# Disk Flags:
#
# Number Start End Size File system Name Flags
# 1 1049kB 538MB 537MB fat32 EFI boot, esp
# 2 538MB 4833MB 4295MB linux-swap(v1) swap swap
# 3 4833MB 4097GB 4092GB ext4 root
#
パーティション3が拡張されました。完了です。
(parted) quit
# Information: You may need to update /etc/fstab.
再度resizeを実行します。
resize2fs /dev/nvme0n1p3
# resize2fs 1.47.3 (8-Jul-2025)
# Resizing the filesystem on /dev/nvme0n1p3 to 999016785 (4k) blocks.
# The filesystem on /dev/nvme0n1p3 is now 999016785 (4k) blocks long.
今度は正常に処理が完了しました。ファイルシステムの拡張が完了しました。
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# loop0 7:0 0 971.9M 1 loop /run/archiso/airootfs
# sda 8:0 1 28.9G 0 disk
# ├─sda1 8:1 1 1.2G 0 part
# └─sda2 8:2 1 251M 0 part
# nvme0n1 259:0 0 3.7T 0 disk
# ├─nvme0n1p1 259:1 0 512M 0 part
# ├─nvme0n1p2 259:2 0 4G 0 part
# └─nvme0n1p3 259:3 0 3.7T 0 part
Bootable USB FlashをPCから取り外し、クローンしたストレージから起動すれば完了です。