【问题标题】:Partition's size in df -h is totally different than the size in /proc/partitions [closed]df -h 中的分区大小与 /proc/partitions 中的大小完全不同 [关闭]
【发布时间】:2017-10-03 01:03:41
【问题描述】:

我正在使用 buildroot 为我的 raspi A+ 构建自定义 linux 系统。

使用 genimage,我在 1 GB sdcard 上创建了两个分区。第一个分区是引导分区。它是 vfat,它是 32 MB。第二个分区是 ext4,它是 rootfs,它是 512 MB

一旦我用新刻录的 sdcard 启动我的 raspi 并输入 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.1 MB 而不是 512 MB。

然后,我发出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

我们清楚地看到 sdcard (mmcblk0) 为 1 GB,引导分区 (mmcblk0p1) 为 32 MB,rootfs 分区 (mmcblk0p2) 为 512 MB。

所以,为了让自己相信 mmcblk0p2 分区可能安装不当,我再次使用 mount -t ext4 -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.1 MB。

所以,我的问题是 为什么 cat /proc/partitions 返回我的 rootfs 分区的预期大小,而 df -h 返回完全不同的虚假大小?

【问题讨论】:

  • 你的引导是否使用了某种形式的根轴旋转?也就是说,您是否开始安装 RAM 映像,然后交换到根文件系统?这只是一个疯狂的猜测,但 17M 看起来对于 initramfs 映像来说是一个不错的大小,我想知道 /dev/root 实际上是否不再安装在 / 上?
  • 不,我不使用任何形式的根旋转。我唯一的根文件系统是 mmcblk0p2 中的那个。
  • 没有 initramfs 或类似的东西?您是否将 mmcblk 支持直接编译到内核中?我问是因为 /dev/root 通常指的是 initramfs,而“真正的”rootfs 通常要么旋转到位,要么只是安装在 / 的顶部。无论哪种情况,您都会在 /dev/root 上留下一个 initramfs,但它没有做任何有用的事情。避免 initramfs 作为无用附件潜伏的唯一方法(我记得)是根本不使用 initramfs,并在引导时将所有需要的驱动程序直接编译到内核中。我相信 /dev/root 可以隐藏,但我不记得如何了。

标签: raspberry-pi mount partition buildroot linux-disk-free


【解决方案1】:

TL;DR:将 BR2_TARGET_ROOTFS_EXT2_BLOCKS 设置为 524288。

你必须区分分区和分区上的文件系统。

分区大小和偏移量在分区表中指定,可以用cat /proc/partitions查看。分区是使用 fdisk 之类的工具创建的(或者当您使用 Buildroot 时,它通常由 genimage 创建)。

文件系统大小在文件系统超级块中指定,这是一段元数据,指定文件系统的大小、任何选项(例如,如果使用日志)、集群大小等。这是由像mke2fs 这样的工具创建的.当您直接在分区上使用mke2fs 时,它将使用分区的全部空间来存储文件系统,这通常是您想要的。但是,当您创建文件系统对 SD 卡进行分区时(通常是使用 Buildroot 生成映像时的情况),您必须将大小指定为 mke2fs(参见 @ 987654321@:第二个参数是blocks-count)。

在 Buildroot 中,您通常将映像创建为文件,而不是直接写入 SD 卡。那是因为 SD 卡的大小是未知的,而且你必须是 root 才能写入 SD 卡。因此,当您创建文件系统时,Buildroot 无法知道 ext4 文件系统应该有多大。在 Buildroot 的 2017.05 版本之前,它会尝试估计文件系统应该有多大以适应所有内容,并创建一个与该大小完全相同的文件系统。您可能处于这种情况。

要解决此问题,您应该将配置变量 BR2_TARGET_ROOTFS_EXT2_BLOCKS 设置为 524288(= 512MB,1024 字节块)。或者,如果您使用比 2017.05 版本更新的 Buildroot,BR2_TARGET_ROOTFS_EXT2_SIZE 设置为 512M(新选项以字节为单位,但允许使用后缀 K、M、G)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多