画像ファイルを作成しましたdd
。イメージには2つのパーティションが含まれています。
仮想ディスクを作成しましたloop
:losetup -P /dev/loop0 $image_file
。私が作成した2つのパーティションloop
(loop0p1
、、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
パーティションのサイズを変更するために使用するファイルシステムを実行してから再マウントすることです。