问题 在板子上观察到56M的ubi卷,挂载上ubifs之后,df -h显示可用空间约为50M。 如此计算开销超过了10%,那么这个开销随容量如何变化呢,是固定为10%吗还是有其他规律? 只知道ubifs分为了六个区域,那么要确认可用大小,应该先减去其余区域的占用,再确认main area本身如何计算可用空间。 这个要深入进去看源码,就比较花时间了。暂且搁置,以后有空再来填这个坑。 second_id_byte=0xd3 third_id_byte=0x10 fourth_id_byte=0xa6 sudo modprobe ubi mtd=0 sudo ubimkvol /dev/ubi0 -N ubifs-vol -s 100MiB sudo mkdir -p /mnt/ubifs sudo mount -t ubifs /dev/ubi0_0 /mnt/ubifs df -h | grep ubi0_0 对应卸载命令为 sudo umount /mnt/ubifs sudo rmmod ubifs ubi nandsim 查看ubi信息的命令 ubinfo /dev/ubi0_0 测试结果 ?
使能UBIFS 创建UBIFS镜像 镜像制作 UBIFS挂载 参考 UBIFS UBIFS 是诺基亚工程师在塞格德大学的帮助下开发的一种新的闪存文件系统。 LZO 是 UBIFS 和 mkfs.ubifs 实用程序的默认压缩算法。当然,您可以使用“-x none”mkfs.ubifs 选项完全禁用UBIFS压缩。 linux-next 分支包含稳定的 UBIFS 更新和修复。 User-space tools 目前只有一个UBIFS用户空间工具mkfs.ubifs,它可以创建 UBIFS 映像。 UBIFS使用示例 使能UBIFS 由于UBIFS在UBI之上运行,必须先启用 UBI。 在Linux配置菜单中,选择如下配置使能UBIFS。 UBIFS挂载 以下是 UBIFS 特定的挂载选项。
└──────────────┘ UBIFS是什么? UBIFS = UBI File System(无序块映像文件系统) 它不是单独工作的,而是建立在UBI(无序块管理层)之上! ❌ **不推荐UBIFS** 推荐:JFFS2或直接使用UBI卷 原因: • UBIFS开销相对较大 • 小容量优势不明显 UBIFS实战配置指南 1. 内核配置 # 配置内核支持UBIFS CONFIG_MTD_UBI=y CONFIG_UBIFS_FS=y CONFIG_UBIFS_FS_ADVANCED_COMPR=y # 启用高级压缩 CONFIG_UBIFS_FS_LZO 100MiB # 步骤3:创建UBIFS文件系统 mkfs.ubifs -r /path/to/rootfs -m 2048 -e 124KiB -c 1000 -o ubifs.img # 步骤 | grep -i ubifs # 查看UBIFS日志 # 性能测试 time mount -t ubifs ubi0:rootfs /mnt # 测试挂载时间 dd if=/dev/zero
ubi block device,使用该block device 挂载 squashfs 使用vloume 1挂载ubifs 注意:如果不需要运行ubifs,那么只创建一个volume运行squashfs 制作ubifs需要用到mkfs.ubifs工具,使用方法参见创建UBIFS镜像 创建fs目录内容如下: $ ls apps this_is_ubifs.txt 执行如下命令:根据fs目录创建ubifs ,输出的ubifs镜像文件为 ubifs.img mkfs.ubifs -m 4KiB -e 248KiB -c 128 --space-fixup --compr=lzo --squash-uids ] mode=ubi vol_id=1 vol_type=dynamic vol_name=my_ubifs vol_flags=autoresize image=ubifs.img 上述配置文件包含2 个卷: 动态卷0,为其分配ID 0 并命名为my_squashfs;卷的内容取自squashfs.img ; 动态卷1,为其分配 ID 1 并命名为my_ubifs; 卷的内容取自 ubifs.img;
我是你们的朋友全栈君 我在用TI的dm368开发板,kernel是2.6.32.17,默认的flash文件系统是jffs2,但是jffs2在大分区下,mount速度很慢,而且占用ram较多,因此,我想使用ubifs ubifs的原理和配置过程,很多网页都有介绍的,我给一个链接,大家可以看看,我就不转载了,我重点说我移植过程中遇到并解决的问题。 分区也成功了,复制文件也成功了,很高兴:) ubiattach /dev/ubi_ctrl -m 3 ubimkvol /dev/ubi0 -N rootfs -s 480MiB mount -t ubifs 48 MiB, 403 LEBs) UBIFS: journal size: 2539520 bytes (2480 KiB, 2 MiB, 20 LEBs) UBIFS: media format : w4/r0 (latest is w4/r0) UBIFS: default compressor: lzo UBIFS: reserved for root: 2416947 bytes
jffs2(配置) BusyBox配置:动态链接,中等功能集 体积:~2MB 包含命令:完整shell、网络工具、文件操作 优点:平衡体积与功能,支持配置更新 方案3:复杂系统(工控设备) 文件系统:ubifs 制作ubifs(通过UBI层) mkfs.ubifs -r rootfs -m 2048 -e 124KiB -c 1000 -o rootfs.ubifs 图文解析:系统启动流程中的BusyBox角色 BusyBox init: 0.1秒 总时间: ~2.9秒 方案B:ubifs + 静态BusyBox 1. 挂载ubifs: 0.5秒(快速挂载) 2. 加载动态库: 0秒(静态) 3. 在ubifs中的完整系统部署 ubifs大容量方案: / (ubifs, 可读写) ├── busybox完整部署 ├── 用户应用程序 ├── 配置文件(直接可写) ├── 日志系统 └── 软件更新区域 + initramfs 静态编译,精简 ubifs挂载快,initramfs内存运行 频繁更新 jffs2/yaffs2 动态编译,中等功能 支持擦写,磨损均衡 大容量复杂 ubifs 动态编译,完整功能
: Change this – ubifs: ifeq ($(HARDWARE_CFG), dm365) (UBIFS_PATH)/mkfs.ubifs -r (TARGET_FS) -m 512 -e 15360 -c 1662 -o ubifs.img (UBIFS_PATH)/ubinize -o (SYSTEM_CFG)_(HARDWARE_CFG)_ubifs -m 512 -p 16KiB (HARDWARE_CFG)_ubinize.cfg else (UBIFS_PATH)/mkfs.ubifs -r (TARGET_FS) -m 2048 -e 126976 -c 313 -o ubifs.img (UBIFS_PATH)/ubinize -o (SYSTEM_CFG)_(HARDWARE_CFG)_ubifs -m 2048 -p 128KiB (HARDWARE_CFG )_ubinize.cfg endif To this – ubifs: ifeq ($(HARDWARE_CFG), dm365) mkfs.ubifs -r $(TARGET_FS
data ext4 613.9M 976.0K 568.2M 0% /data [root@buildroot /]# df -hT // ubifs Filesystem Type Size Used Available Use% Mounted on /dev/ubi0_0 ubifs 86.0M 66.2M 15.4M 81% /data /dev/ubi1_1 ubifs 16.8M 92.0K 15.8M 1% /etc/sugr /dev/ubi1_2 ubifs 16.8M 32.0K 15.9M 0% /cache 查看具体的分区大小 eMMC内置控制器用于处理坏块等问题,根本不需要类似ubifs文件系统中集成去处理 Linux下查询磁盘空间和扩充磁盘空间 sparse image ---- simg2img ↩︎
ubifs,非压缩,四线读写,100MHz。 ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz,performance 调频策略。 hs400,100MHz,8 线。 hs200,150MHz,4 线, 1.8V, 不带O_SYNC ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz。 performance 调频策略, cpu 频率1440000Hz, dram频率792MHz; ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz。 ,performance 调频策略, cpu 频率1440000Hz, dram频率792MHz; ubifs,lzo 压缩,50% 随机数据,四线读写,100MHz。 /spec/storage/seq #适用于>64M 内存的方案 /spec/storage/tiny-seq #适用于<=64M 内存的方案和使用ubifs的存储方案 特别注意的是,在测试文件数据量非常小时
(ubi0:7): Mounting in unauthenticated mode [ 3.409453] UBIFS (ubi0:7): background thread "ubifs_bgt0 _7" started, PID 101 [ 3.489026] UBIFS (ubi0:7): recovery needed [ 3.602963] UBIFS (ubi0:7): recovery completed [ 3.608155] UBIFS (ubi0:7): UBIFS: mounted UBI device 0, volume 7, name "rootfs_data" [ (ubi0:8): Mounting in unauthenticated mode [ 3.785754] UBIFS (ubi0:8): background thread "ubifs_bgt0 _8" started, PID 130 [ 3.877253] UBIFS (ubi0:8): recovery needed [ 3.938029] UBIFS (ubi0:8): recovery
89 UBIFS (ubi0:7): recovery needed UBIFS (ubi0:7): recovery completed UBIFS (ubi0:7): UBIFS: mounted size 1806337 bytes (1 MiB, 5 LEBs) UBIFS (ubi0:7): reserved for root: 146258 bytes (142 KiB) UBIFS ( PID 118 UBIFS (ubi0:8): recovery needed UBIFS (ubi0:8): recovery completed UBIFS (ubi0:8): UBIFS: mounted 89 UBIFS (ubi0:7): recovery needed UBIFS (ubi0:7): recovery completed UBIFS (ubi0:7): UBIFS: mounted PID 118 UBIFS (ubi0:8): recovery needed UBIFS (ubi0:8): recovery completed UBIFS (ubi0:8): UBIFS: mounted
2.6.4 创建ubifs 镜像 使用tina/out/host/bin/make.ubifs 创建ubifs 镜像,推荐的使用方法如下: mkfs.ubifs -x <压缩方式> -b <超级页大小> -x zlib -b 4096 -e 262144 -c 512 -r ${FILE_PATH} -o ${ROOT_DIR}/img/data_ubifs. fex 2.7 根文件系统改用ubifs 使用suqashfs + overlayfs(ubifs) 方案实现根目录可写,但是ubifs 会占用大量的空间存放元数据,造成空间浪费。 理论上,UBIFS 可直接作为根文件系统,其稳定性和可压缩性足够保证安全和提高空间利用率。 警告 请谨慎使用,UBIFS 作为根文件系统只是理论安全,全志暂无量产方案佐证。 ubifs 在Utilities->mtdutils 页面中使能mtd-utils-mkfs.ubifs 执行cconfigs ,修改跳转目录下的env-XXX.cfg 把rootfstype 值改为
(ubi0:7): Mounting in unauthenticated mode [ 3.409453] UBIFS (ubi0:7): background thread "ubifs_bgt0 _7" started, PID 101 [ 3.489026] UBIFS (ubi0:7): recovery needed [ 3.602963] UBIFS (ubi0:7): recovery completed [ 3.608155] UBIFS (ubi0:7): UBIFS: mounted UBI device 0, volume 7, name "rootfs_data" [ (ubi0:8): Mounting in unauthenticated mode [ 3.785754] UBIFS (ubi0:8): background thread "ubifs_bgt0 _8" started, PID 130 [ 3.877253] UBIFS (ubi0:8): recovery needed [ 3.938029] UBIFS (ubi0:8): recovery
对于ubi nand来说,tina系统默认使用squashfs+ubifs来获得一个可读写的overlay,其中squashfs就依赖于块设备,但对于ubi nand来说,提供给squashfs的ubiblock 此时尝试基于可读写的overlay创建文件,利用ubifs上的文件来作为swap,测试发现mkswap可以成功,但是并不能swapon。 (2)不使用tina squashfs+overlay的做法,直接使用mkfs.ubifs制作一个可读可写的rootfs,内核关闭readonly-ubi块的配置,让系统可以顺利创建出可读可写的ubiblock
mmcblk1p65 mount_block_root: 如果root_device_name前三个字符是“ubi”或者“mtd”,则调用mount_block_root进行挂载根文件系统,这里主要是针对ubifs 这一种文件系统进行特殊处理,因为ubifs根文件系统对应cmdline的参数一般是:ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs ,而其他文件系统一般是root overlay/upper,workdir=/overlay/work) #overlayfs 有关volume 和 driver相关说明如下: volume volume 用于描述一个分区(块设备),但与ubifs case FS_DEADCODE: return jffs2_switch(v); case FS_EXT4: case FS_F2FS: case FS_JFFS2: case FS_UBIFS rootfs_data的分区,返回对应的volume对象 volume_identify(v) 识别rootfs_data分区的文件系统类型,如果是FS_EXT4 FS_F2FS FS_JFFS2 FS_UBIFS
bin)、设备树镜像、sys_config配置文件合并生成boot_package.fex文件;将Linux内核镜像(boot.img)转化为boot.fex文件;将文件系统镜像文件转化为rootfs-ubifs.fex 最后将boot0_sdcard.fex、boot0_nand.fex、boot0_spinor.fex、boot_package.fex、boot.fex、rootfs-ubifs.fex等文件,打包生成 /build.sh buildroot_rootfs编译完成后,生成文件系统镜像文件"out/t113_i/tlt113-evm-nand/buildroot/rootfs.ubifs"和"out/t113
jffs2 /dev/mtdblock1 /mnt; 将块设备直接挂在成jffs2格式 tar zxvf rootfs.ta.gz -C /mnt umount /dev/mtdblock1 7、ubifs 文件系统 无排序区块图像文件系统,是用于固态硬盘存储设备上,UBIFS 支持 write-back, 其写入的数据会被cache, 直到有必要写入时才写到flash, 大大地降低分散小区块数量并提高I /O效率 mkfs.ubifs –m 2048 –c 2048 –e 126976 –r rootfs –o rootfs.bin 将rootfs制作成ubifs镜像文件rootfs.bin并拷贝到/tftpboot
and int test timer_test1- do a timer and int test ubi - ubi commands ubifsload- load file from an UBIFS filesystem ubifsls - list files in a directory ubifsmount- mount UBIFS volume ubifsumount- unmount UBIFS
timehist; 改进回写管理; 支持 Intel Cache Allocation Technology; 控制组添加 BPF 网络过滤器; 实验性的 MD raid5 回写缓存和 FAILFAST 支持; UBIFS
UBIFS简介 UBIFS 是诺基亚工程师在塞格德大学的帮助下开发的一种新的闪存文件系统。 在某种程度上,UBIFS 可以被视为 JFFS2 文件系统的下一代。 UBIFS工作在UBI卷之上,不能在MTD设备之上运行,也不能在block设备上运行,因为ubifs的设计就是raw flash设备之上的文件系统。 这里为了便于理解,提到了一点ubusfs的概念,本文将着重介绍ubi,ubifs不是本文的重点内容。 UBI和UBIFS的关系如下图所示: UBI PEB 和 LEB 以W25N01GV这款NAND Flash为例 (size 128MB, page size 2048, block size 128K option 说明 备注 mode 固定为ubi 必填 image 使用的ubifs镜像文件 静态卷必须指定ubifs镜像文件 vol_id 卷ID 不填则自动分配 vol_size 卷大小 不填则自动分配一个能够容纳当前镜像的最小值