jac*_*nad 5 glib vala embedded-linux fileutils
根据df,设备上有足够的空间(约50G).
/ # df db
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p3 61812032 11308736 50503296 18% /db
Run Code Online (Sandbox Code Playgroud)
为什么这个vala代码会另外表示?
try
{
FileUtils.set_data(bmp_path, bmp);
}
catch (Error e)
{
printf("Error! FileUtils.set_data %s\n%s\n", bmp_path, e.message);
}
Run Code Online (Sandbox Code Playgroud)
当然,代码打印出来
Error! FileUtils.set_data /db/20121112/165206.0.bmp
Failed to create file '/db/20121112/165206.0.bmp.9X8PNW': No space left on device
Run Code Online (Sandbox Code Playgroud)
GLib.FileUtils可以在一个目录中处理的数量文件是否有限制?/ db/20121112包含27220个文件(半个jpeg和半个bmp).
mmcblk0p3是这样创建的
echo -e "n\np\n3\n66\n\nt\n3\nc\nw" | fdisk /dev/mmcblk0
Run Code Online (Sandbox Code Playgroud)
并格式化如下
mkfs.vfat -n DB -F 32 /dev/mmcblk0p3
Run Code Online (Sandbox Code Playgroud)
这可能是一个不在乎但设备是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.
Run Code Online (Sandbox Code Playgroud)
这是奇怪的,因为根据BusyBox文档,df -i是有效的
df [-Pkmhai] [-B SIZE] [FILESYSTEM...]
-i Inodes
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来检查inode?
更新[2012年11月15日]:我认为问题可能是每个文件夹的文件太多,所以我修改了代码,每小时而不是每天打开一个新文件夹但是在使用16.7保存44354个图像均匀分布在7个文件夹中之后它仍然死亡一张64 GB的SD卡.
df在busybox中只有-i,如果FEATURE_DF_FANCY在编译时启用了.
对于FAT32卷,可以存储在文件夹中的最大文件数为65,534.
FAT32目录可以有65,536个目录条目.
FAT32没有inode,而是由内核在运行中不稳定地生成/模拟并缓存.
下面是代码和提供的错误消息.
首先你看到的消息相关联的错误是 ENOSPC No space left on device按这里.
FileUtils.set_data调用油嘴文件实用程序功能g_file_set_contents(源位于此处,伐拉提交消息此处)
在Linux上(Windows有基于ifdef的附加逻辑)
g_file_set_contents 在同一源文件gfileutils.c中调用以下函数
write_to_temp_filerename_file g_unlink 正如您的错误消息提到db/20121112/165206.0.bmp.9X8PNW的那样/db/20121112/165206.0.bmp,返回的函数ENOSPC是write_to_temp_file.
从错误消息(Failed to create file)的另一部分我们知道导致错误的函数调用g_mkstemp_full就是响应设置文件描述符fd的初始值的那个.
这个调用get_tmp_file调用了wrap_g_openGTmpFileCallback,它用于确定文件描述符的值fd.
wrap_g_open调用g_open(位于gstdio.c中)与其名称相同.
g_open此处open记录的呼叫以及ENOSPC被描述为的呼叫.pathname was to be created but the device containing pathname has no room for the new file
在FAT的内核源代码中,只返回两个源文件ENOSPC,/source/fs/fat/dir.c和/source/fs/fat/fatent.c.
在通过处于某种错误状态/source/fs/fat/dir.c 返回的函数中,当目录条目的数量大于FAT32的最大目录大小时,它会执行此操作,因为它被评估为2097152.ENOSPCfat_add_entries
在直接/source/fs/fat/fatent.c返回的函数中,当根据超级块信息的空闲簇的数量小于请求分配的簇的数量时,它执行此操作.ENOSPCfat_alloc_clusters
使用FAT32文件系统的卷上的最大可能簇数为268,435,445(此处为).
您发布的format命令使用mkdosfs默认值为每个群集2个扇区.指定各种选项(包括-s,-R)可能会更改可用的群集数量,但我所看到的唯一用途是与128KB块对齐以增加磁盘吞吐量.
我不知道你的SD卡有多少扇区,我无法计算集群总数.
我不相信你已超过最大目录大小(虽然我不能确定),所以我认为它与SD卡上的免费群集数量有关.
您的SD卡合法地不在群集中,或者文件系统只是认为它不在群集中.在文件系统上运行fsck(文件系统检查)可能会有所帮助.
不同的SD卡的行为方式是否相同?
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |