LNノードのmicroSDカード交換(128GB→16GB、Clonezilla)
前回はSSDの交換でしたが、そろそろmicroSDカードも交換しておいたほうがいいかなと、思い立ちました。しかし、実際に作業をしてみると思ったより大変だったので、備忘録として残しておきます。
microSDカードを交換する理由
- microSDカードの領域は、主にOSの起動に必要なファイルやシステムログファイル、ユーザーのホームディレクトリが含まれる重要なものです。
- SSDのようにSMARTデータが取得できないため、交換時期が読めない。
3年近く使用しているので、交換しておこうかなぐらいの理由です。
microSDカードのデータを移行する方法
今回は以前から気になっていたClonezillaを使用することにしました。
https://clonezilla.org/
Clonezillaは多彩な機能を持ちながら無料で使用できることがメリットですが、使用してみて少しクセがある(=初心者向けではない)というデメリットがあります。
また、今回microSDカードのサイズが大から小(128GB→16GB)への移行のため、事前に移行元のサイズを移行先と同じかそれより小さくする必要があるのですが、そのサイズの縮小に使用するコマンドもClonezillaのシェルで実行することができます。
用意したもの
- Umbrel OSをインストールしている移行元のmicroSDカード(今回は SanDisk Ultra 128GB)
- 移行先のmicroSDカード(今回は SanDisk Industrial 16GB)
- microSDカードリーダー(USBタイプ x 2)
- USBメモリ(Clonezillaの起動ディスク作成用、500MB以上)
- WindowsPC(USBポート x 3ポート)
手順
ClonezillaのUSB起動ディスクの作成
ClonezillaはOSがインストールされたハードドライブにもインストールできるようですが、PC内蔵のHDD/SSDのクローンにも使用できるようにするため、USB起動ディスクを作成するものとします。
流れとしては、
1. Clonezilla Live のイメージファイル(ISO)をここからダウンロード
2. Balena Etcher(※) をPCにインストール
3. PCにUSBメモリを挿入する
4. Balena Etcher を起動し、1.のイメージファイルを選択してUSBメモリにflashする
となります。
※Balena Etcher は Umbrel OS をmicroSDにflashするのにも使用されているもので、複数あるflashの手段の一つです。他の方法についてはこちらを参照ください。
移行元のmicroSDカードの使用量確認
移行元のmicroSDカードがどのくらいデータを使用しているかをあらかじめ確認しておきます。(後ほど移行元のサイズを縮小する時の目安を確認します)
SSHでUmbrel OSにログイン後、以下のコマンドで確認します。
$ df -hP
Filesystem Size Used Avail Use% Mounted on
/dev/root 117G 8.9G 104G 8% /
devtmpfs 3.7G 0 3.7G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 300M 3.6G 8% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 30M 223M 12% /boot
/dev/sda1 1.8T 763G 987G 44% /mnt/data
tmpfs 782M 0 782M 0% /run/use/1000
移行元のmicroSDカードにはパーティションが2つあり、以下のように確認できます。
・パーティション1 /dev/mmcblk0p1
→Sizeが 253M で 30M を使用
・パーティション2 /dev/root
→Sizeが 117G で 8.9G を使用
移行元のmicroSDカードの取り外し
Umbrel OSのGUI(http://umbrel.local/)にログインし、設定>Shutdown を実行します。シャットダウン完了後に移行元のmicroSDカードを取り外します。
PCにmicroSDカードを接続
2つのmicroSDカードリーダーにそれぞれ移行元・移行先のmicroSDカードを挿入し、PCに接続します。
(microSDカードとカードリーダーには相性があるようで、ここで認識されなくて時間を費やしてしまいました)
ClonezillaのUSBディスク起動
PCのBIOS(UEFI)の設定を変更し、ClonezillaのUSBディスクで起動するようにします。(設定変更方法はPCのメーカーにより異なります)
(私が使用するDellのPCの場合、起動時のDellのロゴ表示時にF12キーを連打すると One-Time Boot Menu が表示され、一時的に起動ディスクを変更できました)
Clonezillaの操作
Clonezillaの画面が表示されたら、一番目の「Clonezilla live (VGA 800x600)」のままEnterを押します。
「Choose language」の画面で、デフォルトの「en_US.UTF-8 English」を選択したままEnterを押します。
(「ja_JP.UTF-8 Japanese | 日本語」を選択すると、なぜかmicroSDカードを認識しなくなる確率が上がったので、避けたほうが良いかもしれません)
「Keyboard configuration」の画面で「Change Change keyboard layout」を選択します。
(後ほどシェルでコマンド入力が必要なため)
「Keyboard model」の選択画面で、日本語レイアウト(106が含まれるもの)を選択し、Enterを押します。
次の画面で「Japanese」が表示されていないので「Other」を選択し、Enterを押します。
一覧から「Japanese」を選択し、Enterを押します。
一覧から一番目の「Japanese」を選択し、Enterを押します。
「AltGr」は使用しないので「No AltGr key」を選択し、Enterを押します。
「Compose key」も使用しないので「No compose key」を選択し、Enterを押します。
「Start Clonezilla」の画面で、「Enter_shell Enter command line prompt」を選択し、Enterを押します。
(この後、シェルのコマンドで移行元のmicroSDカードのサイズを変更します)
シェルのコマンド操作
以下のコマンドでブロックデバイス一覧を確認します。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 367.3M 1 loop /usr/lib/live/mount/rootfs/filesystem.squashfs
/run/live/rootfs/filesystem.squashfs
sda 8:0 1 14.8G 0 disk
sdb 8:16 1 119.1G 0 disk
├─sdb1 8:17 1 256M 0 part
└─sdb2 8:18 1 118.8G 0 part
sdc 8:32 1 28.8G 0 disk
└─sdc1 8:33 1 433M 0 part /usr/lib/live/mount/medium /run/live/medium
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 400M 0 part
├─nvme0n1p2 259:2 0 128M 0 part
├─nvme0n1p3 259:3 0 218G 0 part
├─nvme0n1p4 259:4 0 208.7G 0 part
├─nvme0n1p5 259:5 0 1.1G 0 part
├─nvme0n1p6 259:6 0 15.1G 0 part
├─nvme0n1p7 259:7 0 1.5G 0 part
└─nvme0n1p8 259:8 0 32G 0 part /mnt/data
SIZEから sda が移行先microSD、sdb が移行元microSD、sdc がClonezilla起動ディスクであることが分かります。
ここから移行元microSDのサイズの縮小を行なっていきます。
sdb のパーティション1(sdb1)は起動領域のためそのままとし、パーティション2(sdb2)が 118.8G あるのでこの部分を縮小します。
流れとしては、
・sdb2 のファイルシステムサイズを縮小
・sdb2 のパーティションサイズを縮小
・sdb2 のファイルシステムサイズをパーティションサイズまで拡張
となります。
まず、以下のコマンドで sdb2 のファイルシステムのチェックを行ないます。
$ sudo e2fsck -f /dev/sdb2
e2fsck 1.47.1 (20-May-2024)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
rootfs: 286492/7729728 files (0.3% non-contiguous), 2822092/31150587 blocks
次に、以下のコマンドで sdb2 のファイルシステムサイズを縮小します。
(使用量が 8.9G だったので、12Gに縮小)
$ sudo resize2fs /dev/sdb2 12G
resize2fs 1.47.1 (20-May-2024)
Resizing the filesystem on /dev/sdb2 to 3145728 (4k) blocks.
The filesystem on /dev/sdb2 is now 3145728 (4k) blocks long.
次に、以下のコマンドで sdb2 のパーティションサイズを縮小します。
ここでは sdb2 のパーティションを削除し、新たに希望のサイズでパーティションを作成します。
その際に元の sdb2 のパーティションの開始セクタと同じ番号で開始セクタを指定しないとファイルシステムが壊れるので注意してください。
$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.40.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p # パーティション情報の表示
Disk /dev/sdb: 119.08 GiB, 127865454592 bytes, 249737216 sectors
Disk model: Multi-Card
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/sdb2 532480 249737182 249204703 118.8G 83 Linux
Command (m for help): d # パーティションの削除
Partition number (1,2, default 2):
Partition 2 has been deleted.
Command (m for help): n # パーティションの作成
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (2048-249737215, default 2048): 532480 # 元の sdb2 と開始セクタ番号を合わせる
Last sector, +/-sectors or +/-size{K,M,G,T,P} (532480-249737215, default 249737215): +14G # サイズを14Gに指定
Created a new partition 2 of type 'Linux' and of size 14 GiB.
Partition #2 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.
Command (m for help): p
Disk /dev/sdb: 119.08 GiB, 127865454592 bytes, 249737216 sectors
Disk model: Multi-Card
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Device Boot Start End Sectors Size Id Type
/dev/sdb1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/sdb2 532480 29892607 29360128 14G 83 Linux
Filesystem/RAID signature on partition 2 will be wiped.
Command (m for help): w # 設定の保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
次に、以下のコマンドで sdb2 のファイルシステムサイズをパーティションサイズまで拡張します。
$ sudo e2fsck -f /dev/sdb2
e2fsck 1.47.1 (20-May-2024)
ext2fs_open2: Bad magic number in super-block
e2fsck: Superblock invalid, trying backup blocks...
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
$
$ sudo resize2fs /dev/sdb2
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/sdb2 to 3822976 (4k) blocks.
The filesystem on /dev/sda2 is now 3822976 (4k) blocks long.
これで移行元microSDのサイズ縮小は完了です。
以下のコマンドでシェルを抜けます。
$ exit
次に移行元microSDを移行先microSDへクローンしていきます。
Clonezillaの操作
「Start Clonezilla」の画面に戻りますので、「Start_Clonezilla Start Clonezilla」を選択し、Enterを押します。
「Select mode」の画面で、二番目の「device-device work directly from a disk or partition to a disk or partition」を選択し、Enterを押します。
「Choose the mode」の画面で、二番目の「Expert Expert mode: Choose your own options」を選択し、Enterを押します。
次の画面では「disk_to_local_disk local_disk_to_local_disk_clone」を選択し、Enterを押します。
「Choose local disk as source」(移行元選択)の画面で、「sdb 128GB_...」を選択し、Enterを押します。
「Choose loca disk as target」(移行先選択)の画面で、「sda 15.9GB_...」を選択し、Enterを押します。
「Set the advanced parameters」の画面で、一番上から5つ(デフォルトでON)と、追加で「-icds」をON([Space]キーでON/OFF切替)し、Enterを押します。
(「-icds」を選択しないと、今回のような大→小のクローンが失敗します。)
「Set the advanced parameters」の画面で、「-sfsck Skip checking/repairing source file system」を選択し、Enterを押します。
次の「Set the advanced parameters」の画面では、上から4番目の「-k2 Enter command line prompt to create partition manually later」を選択し、Enterを押します。
これにより後ほど移行先のmicroSDカードのパーティションをシェルのコマンドで作成します。
(※以下の画像では「-k0」を選択していますが、「-k2」を選択します。「-k2」以外のオプションだと失敗しました)
「The action to perform when everything is finished」の画面で、「-p choose Choose reboot/shutdown/etc when everything is finished」を選択し、Enterを押します。
画面下部に以下のような表示が出たら、Enterを押します。
念押しの確認で「Are you sure you want to continue? (y/n)」と表示されるので、「y」を入力し、Enterを押します。
その後、画面に多くのメッセージが出力されて、しばらくすると移行先のmicroSDカードのパーティションを作成するため、シェルのコマンドプロンプトに移行します。
以下のコマンドでパーティションを作成します。
$ sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.40.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p # パーティション情報の表示
Disk /dev/sda: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Multi-Card
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Device Boot Start End Sectors Size Id Type
/dev/sda1 131 31116287 30583808 14.9G c W95 FAT32 (LBA)
Command (m for help): d # 一旦パーティションをすべて削除します
Selected partition 1
Partition 1 has been deleted.
Command (m for help): p
Disk /dev/sda: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Multi-Card
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Command (m for help): n # パーティション1の作成
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-3897343, default 2048): 8192 # sdb1 と開始セクタを合わせておきます
Last sector, +/-sectors or +/-size{K,M,G,T,P} (8192-31116287, default 31116287): +256M
Created a new partition 1 of type 'Linux' and of size 256 MiB.
Command (m for help): p
Disk /dev/sda: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Multi-Card
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Device Boot Start End Sectors Size Id Type
/dev/sda1 8192 532479 524288 256M 83 Linux
Command (m for help): t # システムIDの変更(sdb1 と合わせておきます)
Selected partition 1
Hex code or alias (type L to list all): L
00 Empty 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
01 FAT12 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
02 XENIX root 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
03 XENIX usr 40 Venix 80286 85 Linux extended c7 Syrinx
04 FAT16 <32M 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
05 Extended 42 SFS 87 NTFS volume set db CP/M / CTOS / .
06 FAT16 4d QNX4.x 88 Linux plaintext de Dell Utility
07 HPFS/NTFS/exFAT 4e QNX4.x 2nd part 8e Linux LVM df BootIt
08 AIX 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
09 AIX bootable 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
0a OS/2 Boot Manag 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
0b W95 FAT32 52 CP/M a0 IBM Thinkpad hi ea Linux extended
0c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
0e W95 FAT16 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
0f W95 Ext'd (LBA) 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a9 NetBSD f1 SpeedStor
12 Compaq diagnost 61 SpeedStor ab Darwin boot f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
16 Hidden FAT16 64 Novell Netware b7 BSDI fs f8 EBBR protective
17 Hidden HPFS/NTF 65 Novell Netware b8 BSDI swap fb VMware VMFS
18 AST SmartSleep 70 DiskSecure Mult bb Boot Wizard hid fc VMware VMKCORE
1b Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fd Linux raid auto
1c Hidden W95 FAT3 80 Old Minix be Solaris boot fe LANstep
1e Hidden W95 FAT1 81 Minix / old Lin bf Solaris ff BBT
24 NEC DOS
Aliases:
linux - 83
swap - 82
extended - 05
uefi - EF
raid - FD
lvm - 8E
linuxex - 85
Hex code or alias (type L to list all): 0c
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Command (m for help): p
Disk /dev/sda: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Multi-Card
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Device Boot Start End Sectors Size Id Type
/dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA)
Command (m for help): n # パーティション2の作成
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (2048-31116287, default 2048): 532480 # sdb2 と開始セクタを合わせておきます
Last sector, +/-sectors or +/-size{K,M,G,T,P} (532480-31116287, default 31116287):
Created a new partition 2 of type 'Linux' and of size 14.6 GiB.
Command (m for help): p
Disk /dev/sda: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Multi-CardUnits: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bb0111b
Device Boot Start End Sectors Size Id Type
/dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/sda2 532480 31116287 30583808 14.6G 83 Linux
Command (m for help): w # 設定の保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
これで移行先microSDのパーティション作成は完了です。以下のコマンドでシェルを抜けると、クローン処理が再開されます。
$ exit
進捗が表示されるので、気長に待ちます。
クローン処理が終わると、以下のようにファイルシステムサイズの調整が行われます。
すべての処理が完了すると、reboot(再起動)/poweroff(シャットダウン)/コマンドプロンプト の選択を聞かれますので、シャットダウンします。
シャットダウン後に移行先microSDカードを取り外し、Raspberry Pi などに挿入してUmbrel OSが正しく起動するか確認します。
以上で作業は終了です。
おわりに
今回のように大きいサイズから小さいサイズへのmicroSDカード交換が大変な作業になることがお分かりいただけたかと思います。microSDカードのサイズ選びはくれぐれも慎重に行うようにしましょう(自戒)。