SDイメージのシュリンク

以前「 Kali Linux を RaspberryPi にインストールする」で作成したSDイメージのバックアップを作成する。
32GBのSDカードを使用したので、そのままディスクイメージを作成せずシュリンクしてしまう手順のメモ。

作業は仮想マシンで実施している。

ディスクイメージの作成

まずは、カードのアンマウント。

$ sudo umount /media/developer/BOOT
$ sudo umount /media/developer/ROOTFS

ディスクイメージを作成。

$ sudo dd bs=4M if=/dev/sdb of=/mnt/hgfs/share/recovery.img status=progress 
conv=fsync
31243370496 bytes (31 GB, 29 GiB) copied, 4998 s, 6.3 MB/s
7449+0 レコード入力
7449+0 レコード出力
31243370496 bytes (31 GB, 29 GiB) copied, 4997.8 s, 6.3 MB/s

ループバックデバイスがあることを確認し、イメージファイルをループバックデバイスに関連付ける。

$ sudo losetup -f
/dev/loop0
$ sudo losetup /dev/loop0 /mnt/hgfs/share/recovery.img

ループバックデバイスのパーティションを認識させる。

$ sudo partprobe /dev/loop0

gpartedをインストールする。

$ sudo apt install gparted

gpartedを起動してパーティションの容量を変更する。

$ sudo gparted /dev/loop0
  1. パーティション(P) - リサイズ/移動(R)
    /dev/loop0p2(ext4)の空きが19.91GiBなので1GiBほどまで小さくする。
  2. 編集(E) - 保留中の全ての操作を適用する(A) を実行する。

ループバックデバイスの関連付けを解除する。

$ sudo losetup -d /dev/loop0

作成したディスクイメージの確認。

$ sudo fdisk -l /mnt/hgfs/share/recovery.img
Disk /mnt/hgfs/share/recovery.img: 29.1 GiB, 31243370496 bytes, 61022208 sectors
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: 0x9f1f2384

Device                        Boot  Start      End  Sectors  Size Id Type
/mnt/hgfs/share/recovery.img1        2048   262143   260096  127M  c W95 FAT32 
(
/mnt/hgfs/share/recovery.img2      262144 21561343 21299200 10.2G 83 Linux

ファイルのサイズはもとのままなのでをシュリンクする。
Linuxパーティションの最後(21561343)に1加算したサイズに切り詰める。

$ truncate --size=$[(21561343+1)*512] /mnt/hgfs/share/recovery.img

SDイメージのリサイズ方法

あるあるな話で、切り詰めた領域をSDイメージに書き込んだ後に拡げる方法。

現状の確認。

kali@kali:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 28.9G  0 disk
  mmcblk0p1 179:1    0  127M  0 part /boot
  mmcblk0p2 179:2    0 10.2G  0 part /
kali@kali:~$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         10G  8.9G  641M   94% /
devtmpfs         454M     0  454M    0% /dev
tmpfs            459M     0  459M    0% /dev/shm
tmpfs            184M  920K  183M    1% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
/dev/mmcblk0p1   126M   69M   57M   55% /boot
tmpfs             92M   56K   92M    1% /run/user/129
tmpfs             92M   52K   92M    1% /run/user/1000

1Gほど空けたつもりだったが、実際は残りが641Mなので、そのままだと使い勝手が悪そうなのでgrowpartを使用して拡張する。

kali@kali:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 28.9G  0 disk
mmcblk0p1 179:1    0  127M  0 part /boot
mmcblk0p2 179:2    0 10.2G  0 part /
kali@kali:~$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         10G  8.9G  641M   94% /
devtmpfs         454M     0  454M    0% /dev
tmpfs            459M     0  459M    0% /dev/shm
tmpfs            184M  920K  183M    1% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
/dev/mmcblk0p1   126M   69M   57M   55% /boot
tmpfs             92M   56K   92M    1% /run/user/129
tmpfs             92M   52K   92M    1% /run/user/1000

growpart のインストール。

kali@kali:~$ sudo apt install cloud-guest-utils
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
提案パッケージ:
  cloud-init
以下のパッケージが新たにインストールされます:
  cloud-guest-utils
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
23.7 kB のアーカイブを取得する必要があります。
この操作後に追加で 62.5 kB のディスク容量が消費されます。
取得:1 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling/main arm64 cloud-guest-utils all 0.31-2 [23.7 kB]
23.7 kB を 1秒 で取得しました (33.4 kB/s)
以前に未選択のパッケージ cloud-guest-utils を選択しています。
(データベースを読み込んでいます ... 現在 334167 個のファイルとディレクトリがインストールされています。)
.../cloud-guest-utils_0.31-2_all.deb を展開する準備をしています ...
cloud-guest-utils (0.31-2) を展開しています...
cloud-guest-utils (0.31-2) を設定しています ...
man-db (2.9.3-2) のトリガを処理しています ...
kali-menu (2021.1.4) のトリガを処理しています ...

growpart でサイズを拡張する。

kali@kali:~$ sudo growpart /dev/mmcblk0 2
CHANGED: partition=2 start=262144 old: size=21299200 end=21561344 new: size=60243935 end=60506079

拡張されたサイズの確認。

kali@kali:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 28.9G  0 disk
  mmcblk0p1 179:1    0  127M  0 part /boot
  mmcblk0p2 179:2    0 28.7G  0 part /

resize2fs で ファイルシステムのサイズを変更する。

kali@kali:~$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.46.1 (9-Feb-2021)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p2 is now 7530491 (4k) blocks long.

最終確認。

kali@kali:~$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         29G  8.9G   19G   33% /
devtmpfs         454M     0  454M    0% /dev
tmpfs            459M     0  459M    0% /dev/shm
tmpfs            184M  928K  183M    1% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
/dev/mmcblk0p1   126M   69M   57M   55% /boot
tmpfs             92M   56K   92M    1% /run/user/129
tmpfs             92M   52K   92M    1% /run/user/1000

これで、バックアップ時はコンパクトに、使用するときは大きなサイズで使うことができた。



※Raspberry PiはRaspberry Pi財団の登録商標です。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-02-13 (土) 17:35:10