在linux下扩容IMG镜像的方法

我有一个文件 FydeOS_for_PC_iris_v14.0-stable.img 只有6.8G,直接在ventoy里运行速度很快但是空间太小,可用空间只有1.3G,啥软件都装不了,所以我需要扩容这个镜像。

首先,给镜像增加5G的可用空间(未分配)

dd if=/dev/zero bs=1M count=5000 >> ./FydeOS_for_PC_iris_v14.0-stable.img

查看一下镜像内的分区:

sudo fdisk -l FydeOS_for_PC_iris_v14.0-stable.img 

输出:

GPT PMBR 大小不符(14287004 != 24527004),将用写入予以更正。
The backup GPT table is not on the end of the device.
Disk FydeOS_for_PC_iris_v14.0-stable.img:11.7 GiB,12557826560 字节,24527005 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:1DF41F80-84D3-6B4E-B82A-D1B86AC5EEAA

设备                                     起点     末尾    扇区  大小 类型
FydeOS_for_PC_iris_v14.0-stable.img1  5898240 14286956 8388717    4G Linux 文件系统
FydeOS_for_PC_iris_v14.0-stable.img2    20480    53247   32768   16M ChromeOS 内核
FydeOS_for_PC_iris_v14.0-stable.img3   319488  5898239 5578752  2.7G ChromeOS 根文件系统
FydeOS_for_PC_iris_v14.0-stable.img4    53248    86015   32768   16M ChromeOS 内核
FydeOS_for_PC_iris_v14.0-stable.img5   315392   319487    4096    2M ChromeOS 根文件系统
FydeOS_for_PC_iris_v14.0-stable.img6    16448    16448       1  512B ChromeOS 内核
FydeOS_for_PC_iris_v14.0-stable.img7    16449    16449       1  512B ChromeOS 根文件系统
FydeOS_for_PC_iris_v14.0-stable.img8    86016   118783   32768   16M Linux 文件系统
FydeOS_for_PC_iris_v14.0-stable.img9    16450    16450       1  512B ChromeOS 保留
FydeOS_for_PC_iris_v14.0-stable.img10   16451    16451       1  512B ChromeOS 保留
FydeOS_for_PC_iris_v14.0-stable.img11      64    16447   16384    8M 未知
FydeOS_for_PC_iris_v14.0-stable.img12  249856   315391   65536   32M EFI 系统

分区表记录没有按磁盘顺序。

可以看到 FydeOS_for_PC_iris_v14.0-stable.img1 5898240 14286956 8388717 4G Linux 文件系统 ,这个4G大小的分区就是我们要扩容的分区。将这个分区的起点5898240 乘以512 (每个单元的字节数)得到 3019898880,这就是我们需要的偏移量 offset,等下挂载这个分区需要用到。

sudo fdisk -l FydeOS_for_PC_iris_v14.0-stable.img

然后将镜像挂载(偏移量从上面的计算得到):
挂载分区:

sudo mount -o loop,offset=3019898880 FydeOS_for_PC_iris_v14.0-stable.img /mnt 

挂载镜像:

sudo losetup --find FydeOS_for_PC_iris_v14.0-stable.img 

用lsblk查看系统磁盘分配情况:

lsblk -p 

得到如下信息:

NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
/dev/loop0                  7:0    0   8.9G  0 loop /mnt
/dev/loop1                  7:1    0  11.7G  0 loop 
/dev/nvme0n1              259:0    0 476.9G  0 disk 
├─/dev/nvme0n1p1          259:1    0   100G  0 part 
│ └─/dev/mapper/ventoy    254:0    0    32G  0 dm   
│   ├─/dev/mapper/ventoy1 254:1    0   300M  0 dm   /boot/efi
│   └─/dev/mapper/ventoy2 254:2    0  31.7G  0 dm   /
├─/dev/nvme0n1p2          259:2    0   200G  0 part /run/media/david/本地磁盘
└─/dev/nvme0n1p3          259:3    0 176.9G  0 part /run/media/david/1FFFC14652545540
/dev/nvme1n1              259:4    0  27.3G  0 disk 
├─/dev/nvme1n1p1          259:5    0  27.2G  0 part /run/media/david/Ventoy
└─/dev/nvme1n1p2          259:6    0    32M  0 part /run/media/david/VTOYEFI

可以看到 /dev/loop0 和 /dev/loop1 两个设备被挂载,其中 /dev/loop0是我需要调整的分区,而 /dev/loop1是整个镜像。输入:

sudo gparted /dev/loop0

在图形界面就可以看到灰色部分为未分配空间。

输入命令:

sudo resize2fs /dev/loop0

将未分配空间合并到该分区即可。再次进入Gparted可以看到扩容已完成:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注