「Linuxその他 - ディスクイメージ」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == ディスクイメージファイルのサイズの変更 == まず、空のイメージファイルを作成する。<br> 以下の例では、拡張するサイズを5[GiB]としている。<br> truncate -s 5GiB <空のイメージファイル名>.img <br> 元のディスクイメージファイルと空のイメージファイルを結合する。<br> cat <元のディスクイメージファイル>.img <空のイメージファイル…」)
 
 
(同じ利用者による、間の11版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
ディスクイメージは、ディスク全体またはパーティションの完全なコピーであり、後で復元や分析が可能である。<br>
これは、システムのバックアップや移行、テスト等で非常に役立つ。<br>
<br><br>
<br><br>


== ディスクイメージファイルのサイズの変更 ==
== ディスクイメージファイルの拡張 ==
Linux OSのディスクイメージファイルをマウントして使用する場合、ディスクイメージファイルの空き領域が不足する時がある。<br>
ここでは、ディスクイメージファイルのサイズを変更する手順について記載する。<br>
<br>
==== 方法 1 (推奨) ====
まず、ディスクイメージファイルを確認する。<br>
sudo fdisk -lu <ディスクイメージファイル>.img
# 出力例
ディスク 2023-10-10-raspios-bookworm-arm64-lite.img: 2.54 GiB, 2722103296 バイト, 5316608 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7788c428
デバイス                                        起動 開始位置  終了位置    セクタ  サイズ Id  タイプ
2023-10-10-raspios-bookworm-arm64-lite.img1          8192  1056767 1048576  512M  c  W95 FAT32 (LBA)
2023-10-10-raspios-bookworm-arm64-lite.img2      1056768  5316607 4259840    2G 83  Linux
<br>
<code>dd</code>コマンドを使用して、空き領域を追加する。<br>
上記の例では、最初のパーティションはブートパーティション(カーネルとバイナリブロブ)、2番目のパーティションはファイルシステムである。<br>
ディスクイメージファイルに空の空き領域を追加して、2番目のパーティションを拡張する。<br>
sudo dd if=/dev/zero bs=1M count=3072 >> <元のディスクイメージファイル>.img  # この例では、3[GB]を追加している
<br>
空き領域を追加したディスクイメージファイルの情報を表示する。<br>
この時、出力結果は空き領域が追加されたサイズ(以下の例では、5.54[GiB])と表示するが、ディスクイメージファイルの2番目のパーティションのサイズはまだ変更されていない。(以下の例では、2[G])<br>
sudo fdisk -lu <元のディスクイメージファイル>.img
# 出力例
ディスク 2023-10-10-raspios-bookworm-arm64-lite.img: 5.54 GiB, 5943328768 バイト, 11608064 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7788c428
デバイス                                        起動 開始位置  終了位置    セクタ  サイズ Id  タイプ
2023-10-10-raspios-bookworm-arm64-lite.img1          8192  1056767 1048576  512M  c  W95 FAT32 (LBA)
2023-10-10-raspios-bookworm-arm64-lite.img2      1056768  5316607 4259840    2G 83  Linux
<br>
これを解決するため、ディスクイメージファイルの空の追加領域の部分を埋めるようにパーティションのサイズを変更する必要がある。<br>
まず、ループバックデバイスを作成する。<br>
sudo losetup -f -P --show <元のディスクイメージファイル>.img
# 出力例
/dev/loop0
<br>
これにより、/dev/loop<span style="color:#C00000">X</span>がディスクイメージファイル全体、/dev/loop<span style="color:#C00000">X</span>p2がサイズ拡張するパーティションとして設定される。<br>
他のループバックデバイスを選択する場合は、未使用のループバックデバイスのドライブを割り当てる。<br>
sudo fdisk -lu /dev/loop<span style="color:#C00000">X</span>  # X : ループバックデバイス番号
# 実行例
sudo fdisk -lu /dev/loop0
# 出力例
ディスク /dev/loop0: 5.54 GiB, 5943328768 バイト, 11608064 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7788c428
デバイス        起動 開始位置  終了位置    セクタ  サイズ Id  タイプ
/dev/loop0p1          8192  1056767 1048576  512M  c  W95 FAT32 (LBA)
/dev/loop0p2      1056768  5316607 4259840    2G 83  Linux
<br>
上記の出力例では、/dev/loop0p1はブートパーティション、/dev/loop0p2はルートパーティションである。<br>
<br>
次に、<code>parted</code>を実行して、パーティションのサイズを変更する。<br>
2番目のパーティションのサイズを、<code>parted</code>コマンドのヘッダ出力の<u>Disk</u>または<u>ディスク</u>で始まる行で指定された/dev/loop<span style="color:#C00000">X</span>のフルサイズに変更する。<br>
以下の例では、<u>ディスク</u>は5943[MB]である。<br>
sudo parted /dev/loop<span style="color:#C00000">X</span>
<br>
(parted) print
# 出力例
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 5943MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号  開始    終了    サイズ    タイプ    ファイルシステム      フラグ
  1    4194kB  541MB  537MB  primary  fat32            lba, type=0c
  2    541MB  2722MB  2181MB  primary  ext4              type=83
<br>
2番目のパーティションサイズを変更する。<br>
以下の例では、2番目のパーティション(ルートパーティション)をフルサイズに変更している。<br>
(parted) resizepart <パーティション番号> <拡張するサイズ>
または
(parted) resizepart <パーティション番号> <拡張するサイズの割合>
# 実行例
(parted) resizepart 2 5943MB
または
(parted) resizepart 2 100%
<br>
正常に拡張されているかどうかを確認する。<br>
(parted) print
# 出力例
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 5943MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号  開始    終了    サイズ    タイプ    ファイルシステム      フラグ
  1    4194kB  541MB  537MB  primary  fat32            lba, type=0c
  2    541MB  5943MB  5402MB  primary  ext4              type=83
<br>
<code>e2fsck</code>コマンドを実行して、拡張したディスクイメージファイルのファイルシステムを確認する。<br>
sudo e2fsck -f /dev/loop<span style="color:#C00000">X</span>p<span style="color:#C00000">Y</span>  # Xはデバイス番号, Yは拡張したパーティション番号
<br>
<code>resize2fs</code>で拡張したディスクイメージファイルのファイルシステムを拡張する。<br>
<u>※パーティションのサイズは既に変更しているので、ここではファイルシステムをリサイズ(拡張)する。</u><br>
sudo resize2fs /dev/loop<span style="color:#C00000">X</span>p<span style="color:#C00000">Y</span>  # Xはデバイス番号, Yは拡張したパーティション番号
<br>
ディスクイメージファイルが正常に拡張されているかどうかを確認する。<br>
sudo parted /dev/loop<span style="color:#C00000">X</span>
(parted) print
# 出力例 (正常に拡張されている場合)
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 5943MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号  開始    終了    サイズ    タイプ    ファイルシステム      フラグ
  1    4194kB  541MB  537MB  primary  fat32            lba, type=0c
  2    541MB  5943MB  5402MB  primary  ext4              type=83
<br>
最後に、ループバックデバイスを削除する。<br>
sudo losetup -d /dev/loop<span style="color:#C00000">X</span>
<br>
 
==== 方法 2 ====
まず、空のイメージファイルを作成する。<br>
まず、空のイメージファイルを作成する。<br>
以下の例では、拡張するサイズを5[GiB]としている。<br>
以下の例では、拡張するサイズを5[GiB]としている。<br>
17行目: 158行目:
<br>
<br>
結合したディスクイメージファイルをループバックデバイスにマウントする。<br>
結合したディスクイメージファイルをループバックデバイスにマウントする。<br>
  sudo losetup /dev/loopX <結合したディスクイメージファイル名>.img
  sudo losetup /dev/loop<span style="color:#C00000">X</span> <結合したディスクイメージファイル名>.img # X : ループバックデバイス番号
<br>
<br>
正常にマウントできたかどうかを確認するため、ループバックデバイスの設定状況を確認する。<br>
正常にマウントできたかどうかを確認するため、ループバックデバイスの設定状況を確認する。<br>
26行目: 167行目:
<br>
<br>
パーティションテーブルを確認する。<br>
パーティションテーブルを確認する。<br>
  sudo fdisk -lu /dev/loopX
  sudo fdisk -lu /dev/loop<span style="color:#C00000">X</span>
   
   
  # 出力例
  # 出力例
  Disk /dev/loop0: 2.9 GiB, 3054501888 bytes, 5965824 sectors
  Disk /dev/loop0: 5.6 GiB, 3054501888 bytes, 5965824 sectors
  Units: sectors of 1 * 512 = 512 bytes
  Units: sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disklabel type: dos
  Disklabel type: gpt
  Disk identifier: 0xd8cd040f
  Disk identifier: 00CF01F2-3FB1-498B-BFE9-BA5B68507014
   
   
  デバイス    起動  Start 最後から セクタ  Size Id タイプ
  デバイス    起動  Start 最後から セクタ  Size Id タイプ
  /dev/loop0p1       2048  133119 131072  64M c W95 FAT32 (LBA)
  /dev/loop0p1         2048  1048576  131072 511M c W95 FAT32 (LBA)
  /dev/loop0p2      133120 5965823 5832704 2.8G 83 Linux
  /dev/loop0p2      1048576 13913020 13313020 4.1G 83 Linux ファイルシステム
<br>
<br>
結合したディスクイメージファイルのパーティションを設定する。<br>
結合したディスクイメージファイルのパーティションを設定する。<br>
  sudo fdisk /dev/loopX
  sudo fdisk /dev/loop<span style="color:#C00000">X</span>
   
   
  # 出力例
  # 出力例
  Welcome to fdisk (util-linux 2.27.1).
  Welcome to fdisk (util-linux 2.37.4).
  Changes will remain in memory only, until you decide to write them.
  Changes will remain in memory only, until you decide to write them.
  Be careful before using the write command.
  Be careful before using the write command.
56行目: 197行目:
<br>
<br>
次に、拡張するパーティションの種類を選択する。<br>
次に、拡張するパーティションの種類を選択する。<br>
<code>n</code>キーを入力した後、<code>p</code>キーを入力する。<br>
ここでは、プライマリとして使用するため、<code>n</code>キーを入力した後、<code>p</code>キーを入力する。<br>
なお、extendedパーティション(拡張パーティション)は、主にスワップ向けに使用される。<br>
  コマンド (m でヘルプ): n
  コマンド (m でヘルプ): n
  Partition type
  Partition type
69行目: 211行目:
   
   
  # 出力例
  # 出力例
  First sector (133120-5965823, default 133120):  
  First sector (1048576-15913020, default 1048576):  
  Last sector, +sectors or +size{K,M,G,T,P} (133120-5965823, default 5965823):  
  Last sector, +sectors or +size{K,M,G,T,P} (1048576-15913020, default 15913020):  
   
   
  Created a new partition 2 of type 'Linux' and of size 2.8 GiB.
  Created a new partition 2 of type 'Linux' and of size 7.1 GiB.
<br>
<br>
拡張するパーティションタイプを指定する。<br>
拡張するパーティションタイプを指定する。<br>
<code>t</code>キーを入力した後、Linuxシステムを示すパーティションタイプである<code>83</code>を入力する。<br>
<code>t</code>キーを入力した後、パーティション番号およびLinuxファイルシステムを示すパーティションタイプである<code>83</code>を入力する。<br>
  コマンド (m でヘルプ): t
  コマンド (m でヘルプ): t
  パーティション番号 (1,2, default 2): 2
  パーティション番号 (1,2, default 2): 2
88行目: 230行目:
   
   
  # 出力例
  # 出力例
  Disk /dev/loop0: 2.9 GiB, 3054501888 bytes, 5965824 sectors
  Disk /dev/loop0: 7.59 GiB, 8147483648 bytes, 14864445 sectors
  Units: sectors of 1 * 512 = 512 bytes
  Units: sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disklabel type: dos
  Disklabel type: gpt
  Disk identifier: 0xd8cd040f
  Disk identifier: 00CF01F2-3FB1-498B-BFE9-BA5B68507014
   
   
  デバイス    起動  Start 最後から セクタ  Size Id タイプ
  デバイス    起動  Start 最後から セクタ  Size Id タイプ
  /dev/loop0p1       2048  133119 131072  64M c W95 FAT32 (LBA)
  /dev/loop0p1         2048  1048576 1048576  511M c EFI システム
  /dev/loop0p2      133120 5965823 5832704 2.8G 83 Linux
  /dev/loop0p2      1048576 15913020 14864445 7.1G 83 Linux ファイルシステム
<br>
<br>
上記で設定したパーティションを書き込む。<br>
上記で設定したパーティションを書き込む。<br>
111行目: 253行目:
<br>
<br>
ループバックデバイスを削除する。<br>
ループバックデバイスを削除する。<br>
  sudo losetup -d /dev/loopX
  sudo losetup -d /dev/loop<span style="color:#C00000">X</span>
<br>
<br>
ディスクイメージをマウントする。<br>
ディスクイメージをマウントする。<br>
  sudo mount -o loop,offset=<オフセット番号  (1セクタサイズ ✕ セクタの開始番号)> <結合したディスクイメージファイル名>.img <マウントするディレクトリ>
  sudo mount -o loop,offset=<オフセット番号  (1セクタサイズ ✕ セクタの開始番号)> <結合したディスクイメージファイル名>.img <マウントするディレクトリ>
<br>
<br>
拡張の設定をしたパーティションをリサイズする。<br>
拡張の設定をしたパーティションを拡大する。<br>
  sudo resize2fs /dev/loopX
# 設定されているループバックデバイス名を確認
sudo losetup -a
# パーティションの拡大
  sudo resize2fs /dev/loop<span style="color:#C00000">X</span>
<br>
<br>
拡張したパーティションを確認する。<br>
拡張したパーティションを確認する。<br>
123行目: 269行目:
   
   
  # 出力例
  # 出力例
  /dev/loop0                    2838548   1789236     901532 67% work/mnt
  /dev/loop0                    1048576   15913020     14864445 35% /mnt
<br><br>
<br><br>


== SDカードのパーティションの拡張 ==
SDカードの場合は、SDカードをPCに挿入してパーティションのサイズを変更する。<br>
イメージファイルをフラッシュした後にパーティションのサイズを変更する。<br>
<br>
パーティションのサイズを拡張するには、以下に示す2つの方法がある。<br>
<br>
* Growpartの使用
*# GrowPartをインストールする。
*#: <code>sudo zypper install growpart</code>
*# GrowPartを実行して、パーティションのサイズを設定する。
*#: <code>sudo growpart  /dev/mmcblk<span style="color:#C00000">X</span> <span style="color:#00A000">Y</span></code>  # Xはストレージデバイス番号, Yはパーティション番号
*# パーティションのサイズを変更する。
*#: <code>sudo resize2fs /dev/mmcblk<span style="color:#C00000">X</span>p<span style="color:#00A000">Y</span></code>  # Xはストレージデバイス番号, Yはパーティション番号
*: <br>
* Partedの使用 (推奨)
*# PCにSDカードを挿入する。
*# Partedを実行して、パーティションのサイズを設定する。
*#: <code>sudo parted /dev/sd<span style="color:#C00000">X</span></code>  # Xはストレージデバイス番号
*#: <code>(parted) resizepart 2 100%</code>
*#: <code>(parted) quit</code>
*# パーティションのサイズを変更する。
*#: <code>sudo resize2fs /dev/sd<span style="color:#C00000">X</span><span style="color:#00A000">Y</span></code>  # Xはストレージデバイス番号, Yはパーティション番号
<br>
<u>※注意 1</u><br>
<u>実機の内部からパーティションのサイズを変更することは禁止である。</u><br>
<u>現在マウントされているパーティションのサイズを変更すると、奇妙な結果になることがある。</u><br>
<br>
<u>※注意 2 : PinePhone Beta/ProのeMMCの拡張</u><br>
<u>PinePhone Beta/ProのeMMCを拡張する場合、Jumpdriveを使用して、PCとUSBケーブルで接続してeMMCに直接アクセスする。</u><br>
<u>その後、eMMCのパーティションのサイズを変更する。</u><br>
<br><br>
== qcow2ファイルのサイズの拡張 ==
KVMで作成した仮想マシンのディスクファイル(qcow2ファイル)を拡張する。<br>
なお、仮想マシンのセットアップが完了していることが前提となる。<br>
<br>
仮想マシンのディスクファイルのリサイズは、<code>virsh</code>コマンドを使用する。<br>
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのパス> <ファイルサイズ> [--pool <プール名 または UUID>] [--allocate] [--delta] [--shrink]
<br>
ファイルサイズは、<code>50GB</code>、<code>50000MB</code>、または、<code>50GiB</code>、<code>5120MiB</code>等と記述する。<br>
<br>
<code>--allocate</code>オプションは、rawファイルにのみ対応しており、qcow2ファイルに対して指定するとエラーになるので注意する。 (基本的には使用しない)<br>
<br>
<code>--delta</code>オプションを付加しない場合、<ファイルサイズ>には変更後のサイズを指定する。<br>
<code>--delta</code>オプションを付加する場合、代わりにサイズ拡張 / 縮小の差分の値を指定する。<br>
<br>
<code>--shrink</code>オプションを付加する場合、サイズを縮小する際に指定する。<br>
拡張の際に指定するとエラーとなることに注意する。<br>
<br>
==== 拡張手順 ====
まず、プール名を確認する。<br>
sudo virsh pool-list
# 出力例
#  Name                    State    Autostart
# ----------------------------------------------
#  default                  active  yes
<br>
プール名にある仮想マシン名を確認する。<br>
sudo virsh vol-list --pool <プール名>
# 出力例
#  名前          パス
# -----------------------------------------------------
#  RHEL_9      /run/media/suse/SAMSUNG860EVO/KVM/RHEL_9
<br>
現在のボリュームサイズを確認する。<br>
sudo virsh vol-info --pool <プール名> <仮想マシン名 または 仮想マシンのファイルのパス>
# 出力例
名前:      RHEL_9.qcow2
タイプ:      ファイル
容量:      40.00 GiB
割り当て:    12.19 GiB
<br>
以下の例では、プール名 : defaultに存在するサイズ : 50[GiB]の仮想マシン名 : RHEL_9.qcow2を、50[GiB]に拡張している。<br>
以下に示す2種類のコマンドは、同様の結果になる。<br>
<br>
なお、<code>--delta</code>を使用する方が現在の容量を意識せずに済む。<br>
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> --delta 10GiB
# または
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> 50GiB
<br>
以下の例では、仮想マシンのファイルサイズを5[GiB]縮小している。<br>
ファイルサイズの縮小する場合はデータを破壊するリスクがあるため、実行する前にバックアップを作成した方がよい。<br>
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> --delta -5GiB --shrink
# または
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> 35GiB --shrink
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]

2024年10月14日 (月) 13:13時点における最新版

概要

ディスクイメージは、ディスク全体またはパーティションの完全なコピーであり、後で復元や分析が可能である。
これは、システムのバックアップや移行、テスト等で非常に役立つ。


ディスクイメージファイルの拡張

Linux OSのディスクイメージファイルをマウントして使用する場合、ディスクイメージファイルの空き領域が不足する時がある。
ここでは、ディスクイメージファイルのサイズを変更する手順について記載する。

方法 1 (推奨)

まず、ディスクイメージファイルを確認する。

sudo fdisk -lu <ディスクイメージファイル>.img

# 出力例
ディスク 2023-10-10-raspios-bookworm-arm64-lite.img: 2.54 GiB, 2722103296 バイト, 5316608 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7788c428

デバイス                                        起動 開始位置  終了位置    セクタ   サイズ Id   タイプ
2023-10-10-raspios-bookworm-arm64-lite.img1          8192  1056767 1048576   512M  c   W95 FAT32 (LBA)
2023-10-10-raspios-bookworm-arm64-lite.img2       1056768  5316607 4259840     2G 83   Linux


ddコマンドを使用して、空き領域を追加する。
上記の例では、最初のパーティションはブートパーティション(カーネルとバイナリブロブ)、2番目のパーティションはファイルシステムである。
ディスクイメージファイルに空の空き領域を追加して、2番目のパーティションを拡張する。

sudo dd if=/dev/zero bs=1M count=3072 >> <元のディスクイメージファイル>.img  # この例では、3[GB]を追加している


空き領域を追加したディスクイメージファイルの情報を表示する。
この時、出力結果は空き領域が追加されたサイズ(以下の例では、5.54[GiB])と表示するが、ディスクイメージファイルの2番目のパーティションのサイズはまだ変更されていない。(以下の例では、2[G])

sudo fdisk -lu <元のディスクイメージファイル>.img

# 出力例
ディスク 2023-10-10-raspios-bookworm-arm64-lite.img: 5.54 GiB, 5943328768 バイト, 11608064 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7788c428

デバイス                                        起動 開始位置  終了位置    セクタ   サイズ Id   タイプ
2023-10-10-raspios-bookworm-arm64-lite.img1          8192  1056767 1048576   512M  c   W95 FAT32 (LBA)
2023-10-10-raspios-bookworm-arm64-lite.img2       1056768  5316607 4259840     2G 83   Linux


これを解決するため、ディスクイメージファイルの空の追加領域の部分を埋めるようにパーティションのサイズを変更する必要がある。
まず、ループバックデバイスを作成する。

sudo losetup -f -P --show <元のディスクイメージファイル>.img

# 出力例
/dev/loop0


これにより、/dev/loopXがディスクイメージファイル全体、/dev/loopXp2がサイズ拡張するパーティションとして設定される。
他のループバックデバイスを選択する場合は、未使用のループバックデバイスのドライブを割り当てる。

sudo fdisk -lu /dev/loopX  # X : ループバックデバイス番号

# 実行例
sudo fdisk -lu /dev/loop0

# 出力例
ディスク /dev/loop0: 5.54 GiB, 5943328768 バイト, 11608064 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x7788c428

デバイス         起動 開始位置  終了位置    セクタ   サイズ Id  タイプ
/dev/loop0p1          8192  1056767 1048576   512M  c   W95 FAT32 (LBA)
/dev/loop0p2       1056768  5316607 4259840     2G 83   Linux


上記の出力例では、/dev/loop0p1はブートパーティション、/dev/loop0p2はルートパーティションである。

次に、partedを実行して、パーティションのサイズを変更する。
2番目のパーティションのサイズを、partedコマンドのヘッダ出力のDiskまたはディスクで始まる行で指定された/dev/loopXのフルサイズに変更する。
以下の例では、ディスクは5943[MB]である。

sudo parted /dev/loopX


(parted) print

# 出力例
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 5943MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号   開始     終了    サイズ    タイプ     ファイルシステム      フラグ
 1    4194kB  541MB   537MB   primary  fat32             lba, type=0c
 2    541MB   2722MB  2181MB  primary  ext4              type=83


2番目のパーティションサイズを変更する。
以下の例では、2番目のパーティション(ルートパーティション)をフルサイズに変更している。

(parted) resizepart <パーティション番号> <拡張するサイズ>
または
(parted) resizepart <パーティション番号> <拡張するサイズの割合>

# 実行例
(parted) resizepart 2 5943MB
または
(parted) resizepart 2 100%


正常に拡張されているかどうかを確認する。

(parted) print

# 出力例
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 5943MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号   開始     終了    サイズ    タイプ    ファイルシステム       フラグ
 1    4194kB  541MB   537MB   primary  fat32             lba, type=0c
 2    541MB   5943MB  5402MB  primary  ext4              type=83


e2fsckコマンドを実行して、拡張したディスクイメージファイルのファイルシステムを確認する。

sudo e2fsck -f /dev/loopXpY  # Xはデバイス番号, Yは拡張したパーティション番号


resize2fsで拡張したディスクイメージファイルのファイルシステムを拡張する。
※パーティションのサイズは既に変更しているので、ここではファイルシステムをリサイズ(拡張)する。

sudo resize2fs /dev/loopXpY  # Xはデバイス番号, Yは拡張したパーティション番号


ディスクイメージファイルが正常に拡張されているかどうかを確認する。

sudo parted /dev/loopX

(parted) print

# 出力例 (正常に拡張されている場合)
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 5943MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号   開始     終了    サイズ    タイプ     ファイルシステム      フラグ
 1    4194kB  541MB   537MB   primary  fat32             lba, type=0c
 2    541MB   5943MB  5402MB  primary  ext4              type=83


最後に、ループバックデバイスを削除する。

sudo losetup -d /dev/loopX


方法 2

まず、空のイメージファイルを作成する。
以下の例では、拡張するサイズを5[GiB]としている。

truncate -s 5GiB <空のイメージファイル名>.img


元のディスクイメージファイルと空のイメージファイルを結合する。

cat <元のディスクイメージファイル>.img <空のイメージファイル名>.img > <結合したディスクイメージファイル名>.img


現在空いているループバックデバイスを確認する。

sudo losetup -f

# 出力例
/dev/loop0


結合したディスクイメージファイルをループバックデバイスにマウントする。

sudo losetup /dev/loopX <結合したディスクイメージファイル名>.img  # X : ループバックデバイス番号


正常にマウントできたかどうかを確認するため、ループバックデバイスの設定状況を確認する。

sudo losetup -a

# 出力例
/dev/loop0: []: (<結合したディスクイメージファイル名>.img)


パーティションテーブルを確認する。

sudo fdisk -lu /dev/loopX

# 出力例
Disk /dev/loop0: 5.6 GiB, 3054501888 bytes, 5965824 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: gpt
Disk identifier: 00CF01F2-3FB1-498B-BFE9-BA5B68507014

デバイス     起動  Start 最後から セクタ  Size Id タイプ
/dev/loop0p1         2048   1048576   131072  511M  c W95 FAT32 (LBA)
/dev/loop0p2      1048576  13913020 13313020  4.1G 83 Linux ファイルシステム


結合したディスクイメージファイルのパーティションを設定する。

sudo fdisk /dev/loopX

# 出力例
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


まず、拡張するパーティションを削除する。
dキーを入力した後、拡張するパーティション番号を入力する。

コマンド (m でヘルプ): d
パーティション番号 (1,2, default 2): 2

Partition 2 has been deleted.


次に、拡張するパーティションの種類を選択する。
ここでは、プライマリとして使用するため、nキーを入力した後、pキーを入力する。
なお、extendedパーティション(拡張パーティション)は、主にスワップ向けに使用される。

コマンド (m でヘルプ): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)

Select (default p): p


拡張するパーティション番号および拡張するサイズ(セクタ番号の最初と最後)を入力する。
デフォルトの値は、最大セクタサイズである。

パーティション番号 (2-4, default 2): 2

# 出力例
First sector (1048576-15913020, default 1048576): 
Last sector, +sectors or +size{K,M,G,T,P} (1048576-15913020, default 15913020): 

Created a new partition 2 of type 'Linux' and of size 7.1 GiB.


拡張するパーティションタイプを指定する。
tキーを入力した後、パーティション番号およびLinuxファイルシステムを示すパーティションタイプである83を入力する。

コマンド (m でヘルプ): t
パーティション番号 (1,2, default 2): 2
Partition type (type L to list all types): 83

# 出力例
Changed type of partition 'Linux' to 'Linux'.


設定したパーティションを確認する。
pキーを入力する。

コマンド (m でヘルプ): p

# 出力例
Disk /dev/loop0: 7.59 GiB, 8147483648 bytes, 14864445 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: gpt
Disk identifier: 00CF01F2-3FB1-498B-BFE9-BA5B68507014

デバイス     起動  Start 最後から セクタ  Size Id タイプ
/dev/loop0p1         2048   1048576  1048576  511M  c EFI システム
/dev/loop0p2      1048576  15913020 14864445  7.1G 83 Linux ファイルシステム


上記で設定したパーティションを書き込む。
wキーを入力する。

コマンド (m でヘルプ): w

# 出力例
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: 無効な引数です

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).


ループバックデバイスを削除する。

sudo losetup -d /dev/loopX


ディスクイメージをマウントする。

sudo mount -o loop,offset=<オフセット番号  (1セクタサイズ ✕ セクタの開始番号)> <結合したディスクイメージファイル名>.img <マウントするディレクトリ>


拡張の設定をしたパーティションを拡大する。

# 設定されているループバックデバイス名を確認
sudo losetup -a

# パーティションの拡大
sudo resize2fs /dev/loopX


拡張したパーティションを確認する。

df

# 出力例
/dev/loop0                    1048576    15913020     14864445  35% /mnt



SDカードのパーティションの拡張

SDカードの場合は、SDカードをPCに挿入してパーティションのサイズを変更する。
イメージファイルをフラッシュした後にパーティションのサイズを変更する。

パーティションのサイズを拡張するには、以下に示す2つの方法がある。

  • Growpartの使用
    1. GrowPartをインストールする。
      sudo zypper install growpart
    2. GrowPartを実行して、パーティションのサイズを設定する。
      sudo growpart /dev/mmcblkX Y # Xはストレージデバイス番号, Yはパーティション番号
    3. パーティションのサイズを変更する。
      sudo resize2fs /dev/mmcblkXpY # Xはストレージデバイス番号, Yはパーティション番号

  • Partedの使用 (推奨)
    1. PCにSDカードを挿入する。
    2. Partedを実行して、パーティションのサイズを設定する。
      sudo parted /dev/sdX # Xはストレージデバイス番号
      (parted) resizepart 2 100%
      (parted) quit
    3. パーティションのサイズを変更する。
      sudo resize2fs /dev/sdXY # Xはストレージデバイス番号, Yはパーティション番号


※注意 1
実機の内部からパーティションのサイズを変更することは禁止である。
現在マウントされているパーティションのサイズを変更すると、奇妙な結果になることがある。

※注意 2 : PinePhone Beta/ProのeMMCの拡張
PinePhone Beta/ProのeMMCを拡張する場合、Jumpdriveを使用して、PCとUSBケーブルで接続してeMMCに直接アクセスする。
その後、eMMCのパーティションのサイズを変更する。


qcow2ファイルのサイズの拡張

KVMで作成した仮想マシンのディスクファイル(qcow2ファイル)を拡張する。
なお、仮想マシンのセットアップが完了していることが前提となる。

仮想マシンのディスクファイルのリサイズは、virshコマンドを使用する。

sudo virsh vol-resize <仮想マシン名 または 仮想マシンのパス> <ファイルサイズ> [--pool <プール名 または UUID>] [--allocate] [--delta] [--shrink]


ファイルサイズは、50GB50000MB、または、50GiB5120MiB等と記述する。

--allocateオプションは、rawファイルにのみ対応しており、qcow2ファイルに対して指定するとエラーになるので注意する。 (基本的には使用しない)

--deltaオプションを付加しない場合、<ファイルサイズ>には変更後のサイズを指定する。
--deltaオプションを付加する場合、代わりにサイズ拡張 / 縮小の差分の値を指定する。

--shrinkオプションを付加する場合、サイズを縮小する際に指定する。
拡張の際に指定するとエラーとなることに注意する。

拡張手順

まず、プール名を確認する。

sudo virsh pool-list

# 出力例
#  Name                     State    Autostart
# ----------------------------------------------
#  default                  active   yes


プール名にある仮想マシン名を確認する。

sudo virsh vol-list --pool <プール名>

# 出力例
#  名前          パス
# -----------------------------------------------------
#  RHEL_9       /run/media/suse/SAMSUNG860EVO/KVM/RHEL_9


現在のボリュームサイズを確認する。

sudo virsh vol-info --pool <プール名> <仮想マシン名 または 仮想マシンのファイルのパス>

# 出力例
名前:       RHEL_9.qcow2
タイプ:      ファイル
容量:       40.00 GiB
割り当て:    12.19 GiB


以下の例では、プール名 : defaultに存在するサイズ : 50[GiB]の仮想マシン名 : RHEL_9.qcow2を、50[GiB]に拡張している。
以下に示す2種類のコマンドは、同様の結果になる。

なお、--deltaを使用する方が現在の容量を意識せずに済む。

sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> --delta 10GiB
# または
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> 50GiB


以下の例では、仮想マシンのファイルサイズを5[GiB]縮小している。
ファイルサイズの縮小する場合はデータを破壊するリスクがあるため、実行する前にバックアップを作成した方がよい。

sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> --delta -5GiB --shrink
# または
sudo virsh vol-resize <仮想マシン名 または 仮想マシンのファイルのパス> --pool <プール名> 35GiB --shrink