如何将 /dev/root 文件系统大小设置为分区大小
How to set /dev/root filesystem size to the partition size
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 4.3G 1.9G 2.2G 47% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 981M 0 981M 0% /dev/shm
tmpfs 981M 33M 948M 4% /run
tmpfs 981M 0 981M 0% /sys/fs/cgroup
tmpfs 981M 0 981M 0% /tmp
tmpfs 981M 16K 981M 1% /var/volatile
# fdisk -l
Disk /dev/mmcblk1: 7.3 GiB, 7818182656 bytes, 15269888 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:
Device Start End Sectors Size Type
/dev/mmcblk1p1 16384 24575 8192 4M unknown
/dev/mmcblk1p2 24576 32767 8192 4M unknown
/dev/mmcblk1p3 32768 69859 37092 18.1M unknown
/dev/mmcblk1p4 81920 15269854 15187935 7.2G unknown
据我所知,/dev/root 文件系统大小是复制到 /dev/root 的内容的大小。
我的目标是 /dev/root 大小与 /dev/mmcblk1p4 相同,即 7.2G。
我如何指示 Yocto 为 /dev/root 文件系统提供它挂载到的分区的大小?
我可以看到两种可能的解决方案。
第一个是告诉 Yocto 生成具有特定 IMAGE_ROOTFS_SIZE
值的图像。如 Yocto Mega-Manual 中所述。大小以千字节为单位指定。修改您的 machine.conf
或 local.conf
以添加此参数。
在您的情况下,该值似乎是:
15269854 - 81920 = 15187934 sectors
sectors are 512 Bytes on your system (see verification below)
15187935 * 512 = 7776222208 Bytes
7776222208 / 1024 = 7593967 KBytes
To verify the sector size of 512B:
7593967 / (1024 * 1024) = 7.242 GB
With 512 Bytes blocksize, the partition size is 7.2GB, as stated by fdisk
我认为将它减少一点是个好主意,像 7230000 千字节(~7.23 GB)这样的值可能是一个不错的选择。
如果您的分区类型是 ext2/3/4,另一种方法是使用 resize2fs 程序。该程序可以在已安装或未安装的设备上执行。如果您使用的是 SD 卡,最简单的方法是将其插入您的计算机,卸载它,然后 运行 resize2fs /dev/<mysdcarddevice>
。您也可以直接从嵌入式板执行它。在这种情况下,您需要使用 IMAGE_INSTALL += "e2fsprogs-resize2fs"
在电路板上添加包 e2fsprogs-resize2fs
,然后 运行 resize2fs /dev/mmcblk1p4
.
根据 PierreOlivier 的建议,我使用了 resize2fs
程序。
因为我使用 Yocto 来构建自定义图像,所以我使用 pkg_postinst_ontarget
它只在目标机器的第一次启动时运行一次。
在我的一个食谱中,我放了
pkg_postinst_ontarget_${PN}() {
#!/bin/bash
resize2fs /dev/mmcblk1p4
}
这会在第一次启动时调整所选分区的大小。
谢谢 PierreOlivier
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 4.3G 1.9G 2.2G 47% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 981M 0 981M 0% /dev/shm
tmpfs 981M 33M 948M 4% /run
tmpfs 981M 0 981M 0% /sys/fs/cgroup
tmpfs 981M 0 981M 0% /tmp
tmpfs 981M 16K 981M 1% /var/volatile
# fdisk -l
Disk /dev/mmcblk1: 7.3 GiB, 7818182656 bytes, 15269888 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:
Device Start End Sectors Size Type
/dev/mmcblk1p1 16384 24575 8192 4M unknown
/dev/mmcblk1p2 24576 32767 8192 4M unknown
/dev/mmcblk1p3 32768 69859 37092 18.1M unknown
/dev/mmcblk1p4 81920 15269854 15187935 7.2G unknown
据我所知,/dev/root 文件系统大小是复制到 /dev/root 的内容的大小。
我的目标是 /dev/root 大小与 /dev/mmcblk1p4 相同,即 7.2G。
我如何指示 Yocto 为 /dev/root 文件系统提供它挂载到的分区的大小?
我可以看到两种可能的解决方案。
第一个是告诉 Yocto 生成具有特定 IMAGE_ROOTFS_SIZE
值的图像。如 Yocto Mega-Manual 中所述。大小以千字节为单位指定。修改您的 machine.conf
或 local.conf
以添加此参数。
在您的情况下,该值似乎是:
15269854 - 81920 = 15187934 sectors
sectors are 512 Bytes on your system (see verification below)
15187935 * 512 = 7776222208 Bytes
7776222208 / 1024 = 7593967 KBytes
To verify the sector size of 512B:
7593967 / (1024 * 1024) = 7.242 GB
With 512 Bytes blocksize, the partition size is 7.2GB, as stated by fdisk
我认为将它减少一点是个好主意,像 7230000 千字节(~7.23 GB)这样的值可能是一个不错的选择。
如果您的分区类型是 ext2/3/4,另一种方法是使用 resize2fs 程序。该程序可以在已安装或未安装的设备上执行。如果您使用的是 SD 卡,最简单的方法是将其插入您的计算机,卸载它,然后 运行 resize2fs /dev/<mysdcarddevice>
。您也可以直接从嵌入式板执行它。在这种情况下,您需要使用 IMAGE_INSTALL += "e2fsprogs-resize2fs"
在电路板上添加包 e2fsprogs-resize2fs
,然后 运行 resize2fs /dev/mmcblk1p4
.
根据 PierreOlivier 的建议,我使用了 resize2fs
程序。
因为我使用 Yocto 来构建自定义图像,所以我使用 pkg_postinst_ontarget
它只在目标机器的第一次启动时运行一次。
在我的一个食谱中,我放了
pkg_postinst_ontarget_${PN}() {
#!/bin/bash
resize2fs /dev/mmcblk1p4
}
这会在第一次启动时调整所选分区的大小。 谢谢 PierreOlivier