【发布时间】: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