Raspberry pi 分区';df-h中的大小与/proc/partitions中的大小完全不同
我正在使用buildroot为我的raspi a+构建一个定制的linux系统 使用genimage,我在1 GB SD卡上创建了两个分区。第一个分区是引导分区。它是vfat,并且32mb。第二个分区是ext4,它是rootfs,大小512MB 一旦我用新烧坏的SD卡启动raspi并键入Raspberry pi 分区';df-h中的大小与/proc/partitions中的大小完全不同,raspberry-pi,mount,partition,buildroot,linux-df,Raspberry Pi,Mount,Partition,Buildroot,Linux Df,我正在使用buildroot为我的raspi a+构建一个定制的linux系统 使用genimage,我在1 GB SD卡上创建了两个分区。第一个分区是引导分区。它是vfat,并且32mb。第二个分区是ext4,它是rootfs,大小512MB 一旦我用新烧坏的SD卡启动raspi并键入df-h后,我在输出中得到以下信息: Filesystem Size Used Available Use% Mounted on /dev/root
df-h
后,我在输出中得到以下信息:
Filesystem Size Used Available Use% Mounted on
/dev/root 17.1M 14.0M 1.8M 89% /
devtmpfs 200.6M 0 200.6M 0% /dev
tmpfs 200.7M 0 200.7M 0% /dev/shm
tmpfs 200.7M 0 200.7M 0% /tmp
tmpfs 200.7M 4.0K 200.7M 0% /run
正如您所看到的,/dev/root
是17.1MB,而不是512MB
然后,我发布cat/proc/partitions
:
major minor #blocks name
1 0 4096 ram0
1 1 4096 ram1
1 2 4096 ram2
1 3 4096 ram3
1 4 4096 ram4
1 5 4096 ram5
1 6 4096 ram6
1 7 4096 ram7
1 8 4096 ram8
1 9 4096 ram9
1 10 4096 ram10
1 11 4096 ram11
1 12 4096 ram12
1 13 4096 ram13
1 14 4096 ram14
1 15 4096 ram15
179 0 969728 mmcblk0
179 1 32768 mmcblk0p1
179 2 524288 mmcblk0p2
我们清楚地看到SD卡(mmcblk0)是1GB,引导分区(mmcblk0p1)是32MB,rootfs分区(mmcblk0p2)是512MB
因此,为了让自己确信mmcblk0p2分区可能已被重要装载,我使用mount-text4-o rw/dev/mmcblk0p2/mnt
再次装载它,然后再次发布df-h
:
Filesystem Size Used Available Use% Mounted on
/dev/root 17.1M 14.0M 1.8M 89% /
devtmpfs 200.6M 0 200.6M 0% /dev
tmpfs 200.7M 0 200.7M 0% /dev/shm
tmpfs 200.7M 0 200.7M 0% /tmp
tmpfs 200.7M 4.0K 200.7M 0% /run
/dev/mmcblk0p2 17.1M 14.0M 1.8M 89% /mnt
我再次看到mmcblk0p2的大小是17.1MB
因此,我的问题是为什么cat/proc/partitions
返回我的rootfs分区的预期大小而df-h
返回完全不同的伪大小?TL;灾难恢复:将BR2\u目标\u ROOTFS\u EXT2\u块设置为524288。
您必须区分分区和分区上的文件系统
分区大小和偏移量在分区表中指定,您可以使用cat/proc/partitions
查看它们。分区是使用类似于fdisk
的工具创建的(或者当您使用Buildroot时,它通常由genimage
创建)
文件系统大小在文件系统超级块(filesystem superblock)中指定,这是一段元数据,用于指定文件系统的大小、任何选项(例如,如果使用日志记录)、集群大小等。这是由类似mke2fs
的工具创建的。当您直接在分区上使用mke2fs
时,它将为文件系统使用分区的全部空间,这通常是您想要的。但是,当您在对SD卡进行分区之前创建文件系统时(通常是使用Buildroot生成映像时),必须将大小指定为mke2fs
(cfr.the:第二个参数是块计数
)
在Buildroot中,通常将映像创建为文件,而不是直接写入SD卡。这是因为SD卡的大小是未知的,而且您必须是root用户才能写入SD卡。因此,在创建文件系统时,Buildroot无法知道ext4文件系统应该有多大。在Buildroot的2017.05版本发布之前,它将尝试估计文件系统应该有多大才能容纳所有内容,并创建一个正好如此大小的文件系统。你可能处于那种情况
要解决此问题,您应该将配置变量BR2_TARGET_ROOTFS_EXT2_BLOCKS
设置为524288(=512MB in 1024字节块)。或者,如果您使用的Buildroot比2017.05版本更新,将BR2_TARGET_ROOTFS_EXT2_SIZE
设置为512M(新选项以字节为单位,但允许后缀K、M、G)。;灾难恢复:将BR2\u目标\u ROOTFS\u EXT2\u块设置为524288。
您必须区分分区和分区上的文件系统
分区大小和偏移量在分区表中指定,您可以使用cat/proc/partitions
查看它们。分区是使用类似于fdisk
的工具创建的(或者当您使用Buildroot时,它通常由genimage
创建)
文件系统大小在文件系统超级块(filesystem superblock)中指定,这是一段元数据,用于指定文件系统的大小、任何选项(例如,如果使用日志记录)、集群大小等。这是由类似mke2fs
的工具创建的。当您直接在分区上使用mke2fs
时,它将为文件系统使用分区的全部空间,这通常是您想要的。但是,当您在对SD卡进行分区之前创建文件系统时(通常是使用Buildroot生成映像时),必须将大小指定为mke2fs
(cfr.the:第二个参数是块计数
)
在Buildroot中,通常将映像创建为文件,而不是直接写入SD卡。这是因为SD卡的大小是未知的,而且您必须是root用户才能写入SD卡。因此,在创建文件系统时,Buildroot无法知道ext4文件系统应该有多大。在Buildroot的2017.05版本发布之前,它将尝试估计文件系统应该有多大才能容纳所有内容,并创建一个正好如此大小的文件系统。你可能处于那种情况
要解决此问题,您应该将配置变量
BR2_TARGET_ROOTFS_EXT2_BLOCKS
设置为524288(=512MB in 1024字节块)。或者,如果您使用的Buildroot比2017.05版本更新,将BR2_TARGET_ROOTFS_EXT2_SIZE
设置为512M(新选项以字节为单位,但允许后缀K、M、G)。您的引导是否使用某种形式的根轴旋转?也就是说,您是否开始装载RAM映像,然后交换到根文件系统?这只是一个粗略的猜测,但是对于initramfs映像来说17M看起来是一个不错的大小,我想知道/dev/root实际上是否不再挂载在/?上不,我不使用任何形式的根旋转。我唯一的根文件系统是mmcblk0p2中的文件系统。没有initramfs之类的吗?您是否已将mmcblk支持直接编译到内核中?我之所以这样问,是因为/dev/root通常指的是initramfs,“真正的”rootfs通常被旋转到适当的位置,或者安装在/的顶部。在这两种情况下,您都会在/dev/root上留下一个initramfs,但它不起任何作用