円形仮想ディスクのサイズを増やす方法は?

円形仮想ディスクのサイズを増やす方法は?

画像ファイルを作成しましたdd。イメージには2つのパーティションが含まれています。

仮想ディスクを作成しましたlooplosetup -P /dev/loop0 $image_file。私が作成した2つのパーティションlooploop0p1、、loop0p2)を2つのマウントポイントにマウントしました。

loop私の問題は、追加したいファイルと比較してディスクが小さすぎるということです。オプションを見ましたが、losetup役に立ちませんでした。

ループディスクを増やす方法はありますか?

答え1

通常警告する:ファイルシステムとパーティションのサイズを変更すると、ソフトウェアエラー、ハードウェアエラー、停電、人的ミスによってデータが失われる可能性があります。常にデータをバックアップしてください。

ループ装置は物理ディスクと論理的に類似したブロック装置である。したがって、Partition Manager は次のことを意味しません。まっすぐサイズを変更してください。

まだ見つからないいくつかの便利な部分は、losetup -cサポートされているファイルサイズが変更されたときにループドライバにブロックデバイスのサイズを更新させ、カーネルにデバイス上のpartprobeパーティションの内部表現を更新させることです。 (GPartedなどのGUIパーティションマネージャを使用している場合は、後者を明示的に呼び出す必要はないかもしれません)。

実際の例を設定してみましょう。

$ fallocate -l 100M volume
$ sudo parted <<'EOT'
select ./volume
mklabel msdos
mkpart primary ext4 1MiB 50M
mkpart primary ext4 50M 100%FREE
quit
EOT
$ sudo losetup -P /dev/loop0 volume
$ sudo mkfs.ext4 /dev/loop0p1
$ sudo mkfs.ext4 /dev/loop0p2
$ mkdir mp1 mp2
$ sudo mount /dev/loop0p1 mp1
$ sudo mount /dev/loop0p2 mp2

これは以下を提供します:

$ lsblk /dev/loop0
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0  100M  0 loop
├─loop0p1 259:0    0   47M  0 part /path/to/mp1
└─loop0p2 259:1    0   52M  0 part /path/to/mp2
$ df -h /dev/loop0p*
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p1     42M  1.1M   38M   3% /path/to/mp1
/dev/loop0p2     47M  1.1M   42M   3% /path/to/mp2

その後、ループデバイスをサポートするファイルを増やし、losetupファイルサイズを再読み込みして容量を更新できますloop0

$ fallocate -l 200M volume
$ sudo losetup -c /dev/loop0

これらの2つのパーティションをアンマウントしないと、そのパーティションと含まれているファイルシステムを右側の空き容量だけ拡張できます(これは/dev/loop0p2私たちの場合にのみ可能です)。また、ファイルシステムのサイズを変更するには、変更されたパーティションテーブルについてカーネルに通知する必要があります。

$ sudo parted <<'EOT'
select ./volume
resizepart 2 100%FREE
quit
EOT
$ sudo partprobe -s /dev/loop0
$ sudo resize2fs /dev/loop0p2

(両方のファイルシステムをアンマウントすると、パーティションを縮小または移動することもできます。縮小パーティションの場合、これらのステップの順序は逆です。まず、ファイルシステムのサイズを変更してからパーティションのサイズを変更し(必要に応じてカーネルに変更を通知し)、バックアップファイルのサイズを小さくします。

ついに得た:

$ lsblk /dev/loop0
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0  200M  0 loop
├─loop0p1 259:0    0   47M  0 part /path/to/mp1
└─loop0p2 259:1    0  152M  0 part /path/to/mp2
$ df -h /dev/loop0p*
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0p1     42M  1.1M   38M   3% /path/to/mp1
/dev/loop0p2    144M  1.6M  135M   2% /path/to/mp2

答え2

これはできません。 Linuxカーネルでループバックデバイスが動作する方法は、画像ファイルサイズを使用して動作し、そのサイズを超えて書き込まないことです。

必要なものを達成する唯一の方法は、イメージをマウント解除し、サイズ/パーティションを再び増やし、resize2fsパーティションのサイズを変更するために使用するファイルシステムを実行してから再マウントすることです。

関連情報