问题标签 [ubifs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
516 浏览

linux - 如何使用版本 5 创建 ubifs?

我想使用 linux 4.10 及更高版本支持的加密 UBIFS。我使用 linux 4.18.4 进行测试。我做的一切都很好,当我使用 fscryptctl 设置加密策略时,我得到了这个错误:

UBIFS 错误 (ubi0:0 pid 1400): ubifs_enable_encryption: 加密需要 on-flash 格式版本 5。

我找到了在内核中打印错误消息的地方,我尝试打印 UBIFS 版本的当前版本,我得到的版本是 4。

修改代码后,我收到以下错误消息:

UBIFS 错误(ubi0:0 pid 1400):ubifs_enable_encryption:加密需要 on-flash 格式版本 5,当前是版本 4。

所以,这意味着内核需要版本 5 进行加密,但我使用版本 4。而且我需要一个工具来制作带有版本的 UBIFS。

目前,我使用从http://www.linux-mtd.infradead.org/下载的 mtd-utils-2.0.2来构建 ubifs 映像。它使 UBIFS 具有版本 4。

我已经通过谷歌搜索了许多有关 UBIFS 版本的信息,但一无所获。

有谁知道如何使用版本 5 创建 UBIFS?

0 投票
1 回答
357 浏览

linux - 我们是否需要在 UBIFS 中同步父目录以进行原子*和*持久文件更新

这是原子文件更新的典型众所周知的方法:

一般来说,如果我们还想要持久性(即保证版本的文件在崩溃时可用),那么我们还需要调用fsync父目录。

问:UBIFS 也需要这个吗?文档说:

可以为目录调用 fsync() - 它同步目录 inode 元数据。[...]

对目录的 fdatasync() 调用在 UBIFS 中是“无操作”,并且所有更改目录条目的 UBIFS 操作都是同步的。

如果我没看错,后者(“所有更改目录条目的 UBIFS 操作都是同步的”)似乎暗示fsync不需要调用父目录。然而,我的测试似乎表明并非如此。我是误读了文档,还是这些信息过时了?

0 投票
1 回答
141 浏览

linux - 如何为 SSD 闪存驱动器安装 UBIFS 文件系统?

我有 SSD 闪存驱动器。所以我想让一台新机器使用UBIFS文件系统。

我怎样才能做到这一点?使用 Ubuntu 桌面 17.0 没有此文件系统的选项。

还有一个问题,对于新的文件系统,我的机器能比 ext2、FAT... 文件系统运行得更快吗?因为它们不是为优化闪存驱动器而设计的。

谢谢~

0 投票
0 回答
70 浏览

c - 如何在 C 中为启用了动态数据压缩的 UBIFS 文件系统检索正确的文件系统指标?

语境

我正在使用启用了动态数据压缩的 UBIFS 文件系统。我需要在 C 代码中获取正确的文件系统指标(总、已用、可用空间)。

尝试了什么

我使用statvfscall 成功检索了指标,但注意到返回的值好像数据从未压缩过。在sync(8)从命令行调用并再次调用 C 代码后,返回了正确的值,因此在 C 代码中我包含了对sync(2)right before的调用statvfs。再次调用修改后的 C 代码仍会返回带有值的指标,就好像数据未压缩一样。然后我之前尝试进行系统调用system("sync")statvfs但仍然返回了不正确的度量值。只有在等待 10 秒或通过显式sync(8)调用后,返回的文件系统指标才是正确的。

问题

sync(2)1)为什么之前调用或system("sync")在C代码中调用statvfssync(8)从命令行调用之间存在这种差异?

2) 如何在 C 代码中将挂起/缓存的数据提交到磁盘,以便后续statvfs调用返回正确的文件系统指标?

0 投票
0 回答
509 浏览

linux-kernel - 如何在 SELinux 的 UBIFS 中启用扩展属性?

我正在尝试chcon在 UBIFS 根文件系统上运行 SELinux 命令,但我得到了chcon: failed to change context of '/' to 'system_u:object_r:root_t': Operation not supported. 我了解 SELinux 需要文件系统支持扩展属性。对于 Linux kernel <3.4,CONFIG_UBIFS_FS=y默认为 UBIFS 启用扩展属性。

我从这里读到xattr应该自动启用而无需额外的挂载选项。

扩展属性 如果启用了相应的配置选项,UBIFS 支持扩展属性(不需要额外的挂载选项)。它支持用户、可信和安全名称空间。但是,没有实现访问控制列表 (ACL) 支持。

注意,当前 mkfs.ubifs 忽略扩展属性并且不将它们写入目标文件系统映像。

我正在使用 Yocto 构建图像,并添加xattr到 DISTRO_FEATURES 中。我在这里想念什么?

0 投票
1 回答
2574 浏览

arm - 使用 QEMU 安装 ubi 映像时出现问题

我正在尝试使用qemu模拟nand flash,并使用它在虚拟机上安装现有的ubifs映像。

我添加了一个nand设备和一个mtd类型的驱动器,得到以下命令:

我无法访问data.ubi可能是因为以下警告:

“警告:没有设备的孤立驱动器”

如何正确将ubi映像添加到nand设备?

0 投票
1 回答
1158 浏览

linux-kernel - bootlin 内核无法从 UBIFS 启动

遵循bootlin 嵌入式 linux 课程并面临一个问题(类似于UBI layout volume not found但我的问题比原来的问题更远)

我正在创建 rootfs 和数据卷映像:

然后通过配置 ubinize 所有这些东西:

然后通过 tftp 加载图像:

试了好几次内核还是在启动时中断,你能指点什么是错的吗?

升级版:

所以当前状态 rootfs 问题:

如果我从 sdcard 启动 linux,mtd 设备也没有安装,只有内核出现在某个级别,但仍然存在问题:

<<<< 我也尝试过 5 作为内核参数

我想知道仍然是内核参数作为 UBI_IOCATT: Invalid argumentSuggest 还是 UBIFS 本身的格式错误?

0 投票
0 回答
160 浏览

linux - 如何从 NAND 转储中检索损坏的块?

我有一个损坏的 ubifs 分区:

我已经用 nanddump utils 转储了相关的 mtd,我怎样才能找到哪个 PEB 与损坏的 LEB 相关?

0 投票
0 回答
960 浏览

linux-kernel - ubiattach 失败,坏块太多

我试图从 NAND 芯片中读取固件,并提取其程序和数据进行分析。

从网上我了解到,您必须创建一个 UBI 设备,并将您的图像文件写入它,然后您才能将它安装到您的系统。

描述

首先,我从 FLASH 芯片中读取了一个 bin 文件。binwalk我明白了。

从它的输出文件中,我找到了这个ubi 图像文件。

关于NAND芯片的一些信息:

然后我尝试安装它,如下所示:

“test_file”的大小是0x10044000,所以我只删除了最后的0x4000字节,然后ubiformat再次尝试。

我做了一些研究发现,在这个 UBI 图像中,有很多块,每个块都包含数据和 OOB。

最后一个命令失败的原因是因为它0x55424923在错误的位置搜索0x20000,因为 OOB,0x55424923实际上是在0x21000,所以我认为也许从“this_file_dd”中删除所有 OOB 部分可能会起作用。bash 命令和测试如下。

删除所有 OOB 后,比较 2 个文件,发现 OOB 已被删除。

再说一次,关于糟糕的 UBI 魔法ubiformat的另一个错误。

使用 ghex 修复了 EB-1074 中错误的 EC 标头,ubiformat同样,同一块的 CRC 不正确。

修复 CRC 并ubiformat再次启用 ubi 和ubiattachmtd0,但出现另一个错误。

我是否dmesg找到了这条消息。

但我不知道如何解决这个问题,所以我只是从文件中删除块 1074。

然后ubiformat再次附加,但还有另一个错误。

查了一下dmesg发现这个,这个是我不知道怎么办的地方,不知道怎么弄了这么多坏块。

我阅读了官方文件,它说只有在 2 senerios 一个块才会被标记为坏。一种是当对eraseblock的写操作失败时,UBI会将数据从bad EB移动到good EB,并做一些测试来确认bad EB是不是真的坏了;或者当擦除操作出现 EIO 错误时,EB 将立即被标记为坏块。我不确定是什么原因导致了这么多坏块。

我的问题

  • 在进行中,我的命令做错了吗?如果没有,如何修复这个 UBI 映像以便我可以读取它的程序和数据?
  • 还有其他方法可以从这个 UBI 图像文件中获取程序和数据吗?

工具和版本

  • 卡利 2020.3
  • mtd-utils 2.1.1
0 投票
0 回答
500 浏览

encryption - 关于在 ubifs 上使用 fscrypt 与 ext4 的差异的问题

我正在开发一个可以在多个平台上运行的嵌入式 Linux 项目。一个使用 e.MMC 进行存储,另一个使用 NAND 闪存。我想加密所有文件系统(主要是为了防止有人拆下闪存芯片并将它们放入阅读器中)。我想尝试并尽可能在这两种硬件类型上保持一种通用方法。两者之间的一大区别是磨损均衡是在 e、MMC 的硬件中,而对于 NAND,我将使用 UBI。

对于根文件系统,我正在考虑使用使用 dm-crypt 保护的 squashfs。对于 NAND 设备,我已经尝试过了,我可以在 ubiblock 之上分层 dm-crypt,然后使用设备映射器加载 squashfs。这很好地映射到 e.MMC 世界,唯一的区别是设备映射器位于 gpt 分区而不是 ubiblock 设备上。

我的挑战是其他读/写文件系统。我想在只读根和数据分区之上安装一个覆盖文件系统。我希望这两个也被加密。我一直在研究 fscrypt 如何帮助我。(我相信 dm-crypt 不适用于 ubifs)。

对于 e.MMC 上的文件系统,我将使用 ext4 和 NAND ubifs。文档说这两个都支持 fscrypt。我很难找到有关如何将其与 ubifs 一起使用的详细文档(ext4 有更多),但我认为在每个文档的实现方式之间存在一些差异,我希望那些了解更多以确认这一点。

在 NAND 方面,我只能通过使用 fscryptctl 工具(https://github.com/google/fscryptctl )而不是功能更全面的 fscrypt 工具( https://github.com/google )来使其工作/fscrypt )。这是按照我在补丁中找到的将 fscrypt 支持添加到 mkfs.ubifs 的说明:

https://patchwork.ozlabs.org/project/linux-mtd/cover/20181018143718.26298-1-richard@nod.at/

这似乎使用提供的密钥加密分区上的所有文件。当我在 ext4 上查看 fscrypt 时,您似乎无法做到这一点。根目录本身不能加密,只有子目录。在这里阅读: https ://www.kernel.org/doc/html/v4.17/filesystems/fscrypt.html它说:

“请注意,ext4 文件系统不允许对根目录进行加密,即使它是空的。想要用一个密钥加密整个文件系统的用户应该考虑改用 dm-crypt。”

所以这是不同的。似乎使用 ubifs 我不能像在 ext4 中那样对子目录应用加密。这里的 README.md https://github.com/google/fscryptctl给出了一个使用 ext4 的例子。这会加密一个名为 test 的子目录。我看不到如何使用 ubifs 做同样的事情。有人可以帮助我吗?

我一直在使用 NANDSIM 内核模块进行测试。这篇文章的最后是一个用于构建加密覆盖 ubifs 文件系统的脚本。如您所见,mkfs.ubifs 直接获取密钥,并且似乎将其应用于分区上的所有文件。您不能将策略应用到任何子目录,因为它们已经加密。

我想使用用户空间 fscrypt 工具提供的其他一些功能,例如保护器(所以我不需要直接使用主密钥)。但是,我看不到任何方法可以让用户空间 fscrypt 工具在 ubifs 上设置加密。用户空间 fscrypt 命令在分区的根目录中创建一个 .fscrypt 目录来存储有关策略和保护程序的信息。这似乎更适合根本身未加密的 ext4 实现。

当我尝试使用“fscrypt setup”设置未加密的 ubifs 时,我遇到了麻烦,因为制作标准 ubifs 似乎创建了 v4 ubifs 格式版本,而不是所需的 v5。这意味着“fscrypt encrypt”命令失败。(在 dmesg 输出中可以看到这样的错误

有没有办法让 mkfs.ubifs 创建一个未加密的 v5 格式文件系统?还是 v5 意味着加密?

这是我使用 fscryptctl 工具创建加密 ubifs 的脚本:

注意我一直在 5.4 内核上使用 mtd-utils v2.1.2。