はじめに
小型PC LIVA Z (N4200)にインストールしているLinux OSを、拡張スロットに取り付けたSSDに丸ごと引越し出来たので、その手順を本記事にまとめます。
OS引越しの経緯
LIVA Z (N4200)を2018年2月頃に購入して5年ほど使っています。OSはLinux(Debian)です。
デフォルトで利用できるストレージが32GB(規格はeMMC)でかなり少なく、容量をすぐに使い切ってしまった状態でした。そこでSSDの拡張スロット(M.2 TYPE 2242,SATAをサポート)に下記の128GB SSDを購入して容量逼迫を何とか防いできました。
ところがそれでも何かと不便が出てきたので「いっそのこと拡張SSDにOSを丸ごと引っ越そう!」と思い立ちます。こちらの記事で新しく512GBのSSDを購入して引っ越しを試みましたが、筆者の知識が足りずに見事に失敗...。今回はその失敗から学び(?)、見事にOS引越しに成功しました。
やりたいこと
現在、以下の3つのストレージがある状態です。
- (1) eMMC 32GB
- LIVAに最初から付いているストレージ。OSもここに格納
- (2) SSD SATA 128GB (M.2 TYPE 2242)
- 拡張スロットに取り付けているSSDストレージ
- (3) SSD PCIe 512GB (M.2 TYPE 2242)
- 前回記事でOSの引越し先として購入したSSD(LIVAの拡張スロットの接続規格はSATAだったが、こちらはPCIeだったため取り付けても認識しないことが判明...)
実際の写真で見ると、(1)~(3)のストレージが以下のように接続されています。今後3つのストレージに言及する場合はこのまま番号つきの名前を使います。
前回記事の最終状態が「(1)eMMC 32GB」と「(3)SSD PCIe 512GB」のディスクに使いたいデータ(およびOS)が格納されている状態なので、今回はそれを「(2)SSD SATA 128GB」に移行していきます。その際、単純に引越しするだけではSSDからOSを起動することができないので、作業過程でSSDにブートローダーのインストールを行います。(前回はこの認識が無かったためにOS丸ごと引越しに失敗しました...)
作業概要
必要な作業を表にしてみます。(こうして見ると手数が多い...)
番号 | 対象ディスク | 作業内容 | 作業時に使うOS |
---|---|---|---|
1 | (2)SSD SATA 128GB | 既存のファイルシステム削除 | インストール済みのOS |
2 | (2)SSD SATA 128GB | パーティションを2つ作成 | インストール済みのOS |
3 | (1)~(3)全て | (1)(3)のデータを(2)に移行 | Ubuntu Live USB |
4 | (2)SSD SATA 128GB | ブートローダーのインストール | Ubuntu Live USB |
5 | (2)SSD SATA 128GB | (2)の/etc/fstab のマウントポイントのUUID修正 |
Ubuntu Live USB |
6 | (2)SSD SATA 128GB | ブートできるかの確認 | 移行先OS |
7 | (1)eMMC 32GB | ファイルシステム削除 | 移行先OS |
補足
- 「(2)SSD SATA 128GB」に作る2つのパーティションは以下です
- EFIシステムパーティション
- ブートローダーをインストールするためのパーティション
- PC起動時はUEFIを利用(BIOSではないので注意!)
- ルートパーティション
- ルートディレクトリ(
/
)配下のファイルを格納するパーティション
- ルートディレクトリ(
- EFIシステムパーティション
- データ移行やブートローダーをインストールする作業は、予めUSBハードディスクにインストールしたUbuntu Live USB経由で行います。
それでは各作業の詳細を見ていきます。
手順詳細
手順1 : 「(2)SSD SATA 128GB」から既存のファイルシステム削除
ファイルシステム削除にはwipefs
コマンドを使います。lsblk
コマンドで確認すると、128GBのSSDは /dev/sda
として認識されており、パーティション分けはしていませんでした。そこで以下のコマンドでファイルシステムを削除します。
sudo wipefs -a /dev/sda
上記コマンドは非常に危険なので単純コピペで実行しないでください! 引数の/dev/sda
の部分はご自身の環境に合わせて設定いただくようお願いいたします。
手順2 : 「(2)SSD SATA 128GB」に2つのパーティションを作成
ファイルシステムの削除が出来たので、「EFIシステムパーティション」と「ルートパーティション」を順番に作っていきます。パーティションを作るツールはいくつかありますが、今回はparted
を使います。
パーティションを作る前に、パーティション形式をGPTに指定するコマンドを実行します。
パーティション形式(正確な呼び名がわからない...)はMBR,GPT等があり、こちら記事によると今回使うUEFIではどちらでも対応していそうなので、MBRでもOKなのかもしれません。
$ sudo parted /dev/sda
(出力略)
(parted) mklabel gpt
(parted) print
Model: ATA TS128GMTS400S (scsi)
Disk /dev/sda: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
続いて「EFIシステムパーティション」を作ります。
NameとFlagsの指定は任意でいいのかもしれませんが、念のためよく使われているものを設定します。
(parted) mkpart "EFI System Partition" fat32 1MiB 512MiB
(parted) set 1 boot on
(parted) set 1 esp on
(parted) print
Model: ATA TS128GMTS400S (scsi)
Disk /dev/sda: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 537MB 536MB fat32 EFI System Partition boot, esp
さらに「ルートパーティション」を作り、最後にquitでpartedから抜けます。
(parted) mkpart primary ext4 512MiB 100%
(parted) print
Model: ATA TS128GMTS400S (scsi)
Disk /dev/sda: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 537MB 536MB fat32 EFI System Partition boot, esp
2 537MB 128GB 127GB ext4 primary
(parted) quit
パーティションを作っただけでファイルシステムはできていないので、最後に2つのパーティションをフォーマットします。
sudo mkfs.fat -F32 /dev/sda1
sudo mkfs -t ext4 /dev/sda2
手順3 : (1)(3)のデータを「(2)SSD SATA 128GB」に移行
移行先の(2)のSSDは準備できたので、(1)(3)のデータを移行していきます。
移行時に使うOSは本体のOSではなく、予めUSBハードディスクにインストールしたUbuntu Live USBから起動したUbuntu OSを利用します。Ubuntu Live USBのインストールと起動の方法に関してはこちらの記事等をご参照ください。
Ubuntu起動後lsblk
コマンドで確認すると、各デバイスが次のように認識されていました。
移行元
- /dev/mmcblk0p2 : (1) eMMC 32GB
- OSの/直下のデータを格納
- /dev/sdc : (3) SSD 512GB
- 容量が大きいディレクトリを別途格納し、bindマウントして使っている
移行先
- /dev/sdb : (2) SSD 128GB
- 移行のための準備済み
前回記事から移行元と移行先が変わっただけでやっていることは同じですが、以下の手順で移行していきます。
上記のファイルにアクセスできるように、まずは各々マウントします。
$ sudo su -
# mkdir /mnt/src1 /mnt/src2 /mnt/dst
# mount /dev/mmcblk0p2 /mnt/src1
# mount /dev/sdc /mnt/src2
# mount /dev/sdb2 /mnt/dst
あとはrsyncでひたすらコピーしていきます。
/
直下のデータはそのままコピー
rsync -ahv /mnt/src1/ /mnt/dst/
bindマウントして使っていたディレクトリは以下コマンドでマウント元とマウント先の対応を確認して、一つ一つrsyncします。ここではもともと拡張SSDのボリュームは /mnt/ssd
にマウントされていたものとします。
# cat /mnt/src1/etc/fstab | grep bind
/mnt/ssd/home /home none defaults,bind 0 0
/mnt/ssd/opt /opt none defaults,bind 0 0
/mnt/ssd/var /var none defaults,bind 0 0
確認したら/home
,/opt
,/var
がbindマウントされていたため、rsyncで各々コピーします。
rsync -ahv /mnt/src2/home/ /mnt/dst/home/
rsync -ahv /mnt/src2/opt/ /mnt/dst/opt/
rsync -ahv /mnt/src2/var/ /mnt/dst/var/
これで/
配下の全データを「(2) SSD 128GB」に移行できました。
手順4 : ブートローダーのインストール
続いて「(2) SSD 128GB」に、GRUBのブートローダーをインストールします。
/mnt/dst
にchrootする
インストールの際に、現状/mnt/dst
でマウントされている移行先ディスクのディレクトリをルート/
に変更する必要があります。後ほど出てきますがchroot
コマンドを使うとこれを実現できます。
その前の準備として、本体側の一部ディレクトリを /mnt/dst
にbindマウントしておく必要があります。これはGRUBの各コマンドでブートローダーをインストールする際に、/dev
ディレクトリを介してデバイスにアクセスする必要がある、等の事情によるものです(ChatGPTからの回答ですが...)。
mount --bind /dev /mnt/dst/dev
mount --bind /dev/pts /mnt/dst/dev/pts
mount --bind /proc /mnt/dst/proc
mount --bind /sys /mnt/dst/sys
mount --bind /run /mnt/dst/run # 不要かもしれない → 必要!(23/08/05確認)
bindマウントできたら、chroot
コマンドで/mnt/dst
が/
になるようにします。
chroot /mnt/dst
GRUBのコマンドでブートローダーをインストール
準備が整ったので、ブートローダーをインストールします。
23/08/05追記 /boot/efi
を「EFIシステムパーティション」に事前にマウントする記述が抜けており追記しましたm(_ _)m
# mount /dev/sdb1 /boot/efi
# grub-install --efi-directory=/boot/efi
Installing for x86_64-efi platform.
Installation finished. No error reported.
続いてupdate-grub
でカーネルをブートローダーに紐づけます。出力から/boot
ディレクトリに格納されているカーネルを認識しているのがわかります。
# update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.4.246-0504246-generic
Found initrd image: /boot/initrd.img-5.4.246-0504246-generic
Found linux image: /boot/vmlinuz-4.19.0-25-amd64
Found initrd image: /boot/initrd.img-4.19.0-25-amd64
Found linux image: /boot/vmlinuz-4.19.0-24-amd64
Found initrd image: /boot/initrd.img-4.19.0-24-amd64
Found linux image: /boot/vmlinuz-4.19.0-20-amd64
Found initrd image: /boot/initrd.img-4.19.0-20-amd64
Found linux image: /boot/vmlinuz-4.9.0-8-amd64
Found initrd image: /boot/initrd.img-4.9.0-8-amd64
Found linux image: /boot/vmlinuz-4.9.0-3-amd64
Found initrd image: /boot/initrd.img-4.9.0-3-amd64
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Debian GNU/Linux 10 (buster) on /dev/mmcblk0p2
done
インストールが終わったら、/mnt/dst
にchrootしている状態から抜けます。
umount /boot/efi
exit
手順5 : /etc/fstab
のマウントポイントのUUID修正
「(2) SSD 128GB」に移行すると、パーティションのUUIDが移行前とは別のものが付与されます。新しく付与されたUUIDを確認し、マウントポイントを定義した/etc/fstab
を更新します。
移行先のSSDは/dev/sdb
として認識されているため、次のコマンドでUUIDを確認します。
EFIシステムパーティション
# blkid /dev/sdb1
/dev/sdb1: UUID="xxxx-yyyy" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID=...
ルートパーティション
# blkid /dev/sdb2
/dev/sdb2: UUID="xxxxxxxx-yyyy-..." TYPE="ext4" PARTLABEL="primary" PARTUUID=...
/mnt/dst/etc/fstab
で、/boot/efi
と/
のマウントポイントを記載している行に、上記コマンドで出力されたUUIDを反映します。
移行先(/mnt/dst
)のfstabを編集する必要があるのでご注意ください!
...
# ↓反映
UUID=xxxxxxxx-yyyy-... / ext4 errors=remount-ro 0 1
...
# ↓反映
UUID=xxxx-yyyy /boot/efi vfat umask=0077 0 1
...
以上で Ubuntu Live USBでの作業は完了です。
マウント解除など後片付けしてからシャットダウンします。
umount /mnt/dst/dev
umount /mnt/dst/dev/pts
umount /mnt/dst/proc
umount /mnt/dst/sys
umount /mnt/dst/run
umount /mnt/dst
umount /mnt/src2
umount /mnt/src1
rmdir /mnt/src1 /mnt/src2 /mnt/dst
shutdown now
手順6 : 移行先ディスクでブートできるかの確認
PCの電源を入れ、Deleteキーを押しBIOS画面を呼び出します。ブートのメニューを見ると、現状は図のようにハードディスクからのブートが無効になっているはずなので、ハードディスクからブートできるように設定を変更します。

その後終了タブに移動して「変更を保存して終了」を選択して再起動させた後、再度Deleteキー連打してBIOS画面に入ります。
再び終了タブに移動して一番下の「ブートオーバーライド」を見て、下のように「P1: TS128GMTS400S」と記載されたOSが追加されているのを確認します。
(なぜか2つ表示されているのは謎...。LIVAにはブートセクタらしきパーティションが2つあるため?また1番目と4番目に"ubuntu"と"Debian"と書かれているのも謎ですが、こちらは移行前のOSを表しており通常は同じ名前になるはずです)

こちらを選択してOSが起動したら成功です!
起動後に以下のように、OS含めて移行後のディスクに格納されて動いていることを確認できます。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
udev 5.8G 0 5.8G 0% /dev
tmpfs 1.2G 117M 1.1G 10% /run
/dev/sda2 117G 66G 46G 60% /
tmpfs 5.8G 0 5.8G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 5.8G 0 5.8G 0% /sys/fs/cgroup
/dev/sda1 510M 5.8M 505M 2% /boot/efi
tmpfs 1.2G 3.5M 1.2G 1% /run/user/1000
手順7 : 「(1)eMMC 32GB」のファイルシステム削除
上記の状態だと再起動した場合に移行前のOSが起動されてしまうため、移行前のディスクのファイルシステムを削除します。
移行前ディスクで「EFIシステムパーティション」は /dev/mmcblk0p1
、「ルートパーティション」は/dev/mmcblk0p2
に相当していたので、下記コマンドで消していきます。(ちゃんと記録を取っていなくてうろ覚えなので間違っている可能性はあります)
sudo wipefs -a /dev/mmcblk0p1
sudo wipefs -a /dev/mmcblk0p2
wipefs
コマンドは非常に危険なので慎重に実行してください!
$ sudo parted /dev/mmcblk0
GNU Parted 3.2
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) rm 1
(parted) rm 2
(parted) quit
この後再起動し、何も操作せずに移行後のOSが起動すれば完了です!
sudo reboot now