如何增加循环虚拟磁盘的大小?

如何增加循环虚拟磁盘的大小?

我已经生成了一个图像文件dd。该映像包含两个分区。

我创建了一个loop虚拟磁盘:losetup -P /dev/loop0 $image_file。我将创建的两个loop分区(loop0p1loop0p2)安装到两个安装点。

我的问题是loop磁盘对于我要添加的文件来说太小。我研究了 的选项losetup,但无济于事。

有没有办法增加循环磁盘?

答案1

通常警告:调整文件系统和分区的大小可能会因软件错误、硬件故障、断电、人为错误而导致数据丢失。确保始终备份数据。

循环设备是一种块设备,逻辑上类似于物理磁盘。因此,分区管理器并不意味着直接地调整它的大小。

您尚未找到的几个有用的部分是losetup -c,使循环驱动程序在其支持文件大小更改时更新块设备的大小,以及partprobe使内核更新其设备上分区的内部表示。 (尽管如果您使用 GUI 分区管理器(例如 GParted),您可能不需要显式调用后者)。

让我们设置一个工作示例:

$ 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

如果不卸载这两个分区,我们将只能将它们和所包含的文件系统增长到其右侧的可用空间量(仅/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或任何您用来调整分区大小的文件系统,然后将其重新安装。

相关内容