/ # df dbfilesystem 1K-blocks Used Available Use% Mounted on/dev/mmcblk0p3 61812032 11308736 50503296 18% /db
为什么这个vala代码可能另有说明?
try { fileUtils.set_data(bmp_path,bmp);} catch (Error e){ printf("Error! fileUtils.set_data %s\n%s\n",bmp_path,e.message);}
当然,代码打印出来
Error! fileUtils.set_data /db/20121112/165206.0.bmpFailed to create file '/db/20121112/165206.0.bmp.9X8PNW': No space left on device
Glib.fileUtils可以在一个目录中处理的数量文件是否有限制?
/ db / 20121112包含27220个文件(半个jpeg和半个bmp).
mmcblk0p3是这样创建的
echo -e "n\np\n3\n66\n\nt\n3\nc\nw" | fdisk /dev/mmcblk0
并格式化如下
mkfs.vfat -n DB -F 32 /dev/mmcblk0p3
这可能是一个不在乎但设备是64G SD卡和mmcblk0p1和mmcblk0p2用于启动和rootfs.
在这样的评论中建议将inode检查为barmar
df: invalID option -- 'i'BusyBox v1.18.2 (2012-11-09 13:08:26 EST) multi-call binary.
这是奇怪的,因为根据BusyBox docs,df -i是有效的
df [-Pkmhai] [-B SIZE] [fileSYstem...]-i Inodes
有没有其他方法来检查inode?
更新[2012年11月15日]:我认为问题可能是每个文件夹的文件太多,所以我修改了代码,每小时打开一个新文件夹而不是每天,但是在保存44354后它仍然死亡
使用16.7 64 GB SD卡均匀分布在7个文件夹中的图像.
对于fat32卷,可以存储在a中的最大文件数
文件夹是65,534.
fat32目录可以有65,536个目录条目.
fat32没有inode,而是由内核在运行中不稳定地生成/模拟并缓存.
下面是代码和提供的错误消息.
首先,与您看到的消息相关的错误是ENOSPC根据here,设备上没有剩余空间.
fileUtils.set_data调用glib fileutils函数g_file_set_contents(源位于here,Vala提交消息here)
在linux上(windows有基于ifdef的附加逻辑)
g_file_set_contents在同一源文件gfileutils.c中调用以下函数
> write_to_temp_file
> rename_file
> g_unlink
由于您的错误消息提到db / 20121112 / 165206.0.bmp.9X8PNW不是/db/20121112/165206.0.bmp,因此返回ENOSPC的函数是write_to_temp_file.
从错误消息的另一部分(无法创建文件)我们知道导致错误的函数调用是g_mkstemp_full,因为这是响应于设置文件描述符fd的初始值.
这会调用get_tmp_file,它调用wrap_g_open,即GTmpfileCallback,用于确定文件描述符fd的值.
wrap_g_open将g_open(生于gstdio.c)调用为其名称.
g_open调用open,文档为here,其中ENOSPC被描述为要创建路径名,但包含路径名的设备没有空间容纳新文件.
在FAT的内核源代码中,只有两个源文件返回ENOSPC,/ source / fs / fat / dc.c和/source/fs/fat/fatent.c.
在/source/fs/fat/dir.c中,通过处于某种错误状态返回ENOSPC的函数是fat_add_entrIEs,它在目录条目数时执行此 *** 作
大于fat32评估为2097152的最大目录大小.
在/source/fs/fat/fatent.c中直接返回ENOSPC的函数是fat_alloc_clusters,它在自由集群数量时执行此 *** 作
根据超级块信息少于请求分配的簇数.
根据here,使用fat32文件系统的卷上最大可能簇数为268,435,445.
您发布的format命令使用mkdosfs默认值为每个群集2个扇区.指定各种选项(包括-s,-R)可能会更改可用的群集数量,但我所看到的唯一用途是与128KB块对齐以增加磁盘吞吐量.
我不知道你的SD卡有多少扇区,我无法计算集群总数.
我不相信你已超过最大目录大小(虽然我不能确定),所以我认为它与SD卡上的免费群集数量有关.
您的SD卡合法地不在群集中,或者文件系统只是认为它不在群集中.在文件系统上运行fsck(文件系统检查)可能会有所帮助.
不同的SD卡的行为方式是否相同?
总结以上是内存溢出为你收集整理的embedded-linux – 设备上没有空间?全部内容,希望文章能够帮你解决embedded-linux – 设备上没有空间?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)