这周帮同事解决了一个产品上的问题,记录如下。
背景:产品上使用emmc,升级文件太大,不利于产品化和升级。
原因:升级文件大主要是文件系统rootfs.ext3文件太大,有390Mbyte,为什么这么大呢?是因为emmc上的文件系统分区分配了390Mbyte,将文件系统的镜像编译输出了390Mbyte,这样在uboot中使用mmc write将镜像烧写到指定分区后,文件系统就有390Mbyte,当文件系统镜像编译输出为实际target目录文件大小180Mbyte时,最后启动的文件系统分区也是180Mbyte,而不是390Mbyte,所以问题的关键是编译的镜像要根据实际大小输出,烧写到emmc后,需要将文件系统设置为390Mbyte。
解决:(1)将编译的ext3文件系统镜像在uboot中使用mmc write烧写到emmc分区,镜像是180Mbyte,启动后,使用df查看到文件系统是180Mbyte,使用fdisk -l查看到文件系统对应的mmcblk0px分区是380Mbyte,两个不一样,因为前者是文件系统的大小,后者是物理分区的大小,两个没有直接联系,文件系统是写到物理分区上的。
(2)开始想的是,文件系统180Mbyte,开始的时候将分区设置为180Mbyte,后面再扩大为380Mbyte,这样没用,分区变大了,文件系统没有变,我们要增加的是文件系统。
(3)resize2fs用来增加ext类型的文件系统的大小,uboot中烧写镜像启动后,判断文件系统如果小于分区大小,则使用resize2fs将文件系统扩展到分区的实际大小。
收获:(1)resize2fs /dev/mmcblk0px 390M,要使用/dev/mmcblk0px,而不是类似于/root的根目录,因为根目录是挂在到设备mmcblk0px上的,操作的是设备,而不是目录或文件。
(2)resize2fs可以扩大或减小文件系统,区别是减小时需要先卸载,而扩大则不需要。
(3)扩大文件系统时如果小于物理分区不需要改变,直接扩大即可,如果文件系统的大小超过了分区范围,需要使用fdisk先将分区扩大。
(4)想要使用Linux中一个不明白的命令,某些命令网上可能说的不详细,最好的方式是使用man来查看命令的详细描述。