问题标签 [hfs+]

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 投票
0 回答
63 浏览

macos - FSEvent API 不保留文件/文件夹删除的大小写/规范化

我正在使用 FSEvents API 来检测备份应用程序的文件系统更改。/应用程序在 ROOT ( ) 路径上创建一个 FSEvent 流。现在,如果 sombody 通过具有不同大小写/规范化的 shell 删除文件,问题就开始了。假设文件夹 (/Users/bob) 包含一个名为的文件a.txt并且用户使用 删除它A.TXT,在这种情况下,事件将针对路径/Users/bob/A.TXT而不是/Users/bob/a.txt.

此时备份应用程序对删除文件的情况(在 HFS+ 和 APFS 下)一无所知。从 10.13 开始,APFS 是 Mac 设备的默认文件系统,它保留了文件的规范化。因此,在 APFS 下问题变得更加复杂,因为应用程序对已删除文件的规范化也一无所知。在开发人员文档中,我找不到有关此的详细信息。理想情况下,删除事件应保留文件的大小写和规范化。

对此的任何见解表示赞赏。

0 投票
1 回答
66 浏览

macos - 确定哪个应用程序正在从 Mac OS 过滤器方案驱动程序中读取或写入数据

我想学习开发 Mac OS 过滤方案驱动程序,我正在使用 Mac OS X Internals 一书中的 SimpleCryptoDisk 示例应用程序的修改版本。我使用的来源是here

作为下一个目标,我想修改它以跟踪哪些应用程序正在执行读取和写入,并最终打印出每个应用程序读取和写入的字节数。

我在 read() 调用中看到有一个指向客户端 (* IOService) 的指针,但是我还没有找到从该对象获取任务/进程的任何方法。我正在考虑调用 API 来确定当前进程,但由于此代码在 KEXT(在内核中)中运行,我认为这不会帮助我识别用户级进程。

我在那里找到了一个名为 newUserClient() 的 IOServer API,其中包含 task_t,我认为它足以让我以某种方式获得应用程序名称。但是我不确定如何将此调用与 read() 调用联系起来。

通常我只是在实验上尝试一堆东西,但由于我在内核中工作,所以我想一开始要小心行事,避免把事情搞砸。因此,如果有人可以给我任何提示以获取读取或写入的进程名称,那就太好了。

0 投票
0 回答
46 浏览

macos - 学习编写 Mac OS 过滤方案驱动程序的推荐资源

我正在尝试创建一个 Mac OS 过滤器驱动程序,但不确定最好的最新资源。

在线“Mac OS X Internals: A Systems Approach (paperback)”一书有一些章节,但它们似乎是 10 多年前的版本。亚马逊上有一个更新的版本(列为 2016 年出版),但是我看到那本书的评级说有几百页,还有几个章节丢失。

有谁知道这本书的最新纸质(或 E)版本是否包含有关在 Mac OS X 中制作过滤器方案驱动程序的详细信息?

有人还指出 KauthORama 示例代码是一种资源,但它似乎最后一次更新是在大约 5 年前。

最近有没有人真正制作过过滤器方案驱动程序,如果有的话,你建议什么资源?

更新:我收到了出版商关于上述书籍的回复。2016年它被做成平装书,分成两本书,但内容是2006年的。所以我怀疑它在13年后会有那么有用。他们说作者不想更新内容。

0 投票
1 回答
209 浏览

macos - 尝试创建和挂载新的 HFS 卷时出错(为了测试过滤方案驱动程序)

我正在尝试测试一个实现过滤器方案的 IO 套件示例应用程序。有关上下文,请参见此处的第10.7.10节。由于源代码很难剪切和粘贴(当我尝试时出现错误),我使用的是来自这里的源代码。

在该页面的最后一个图 (1038) 中,它包含一系列用于创建和安装新 HFS 卷的步骤。这个想法是看到 KEXT 正在工作并进行加密。我已经构建了示例 KEXT 并对其进行了测试,但是当我进行“打开”调用时,我总是收到“无法安装的文件系统”错误。我已验证 KEXT 已正确加载。

如果我删除“-partitionType”,我可以正常操作卷(尽管这不涉及 KEXT)。

有人可以建议这里可能出了什么问题吗?

我对图 1038 脚本的部分困惑是在打开之前运行的“分离”命令。它对我来说失败了,但我不确定这是否是导致它失败后“打开”的原因,或者是无关的。

更新:问题最初针对未加载 KEXT 的情况。自从我让它工作后,我改变了它以反映 KEXT 的情况,无论如何这更重要。

UPDATE2:似乎最终 kext 正在卸载(可能崩溃)。有时它似乎在“开放”的时候左右,有时在之后。我尝试添加像 IOLog("CSD: init") 这样的语句,但它们都没有出现在系统日志或控制台日志中。寻找我还能如何分类这个(不需要单独的机器)。

UPDATE3:下面是我尝试启动 KEXT 时的输出。有很多警告,但由于我禁用了签名检查,我认为它仍在加载。我还看到它是通过 kextstat 加载的。

另一个奇怪的事情是我在“ioreg”的输出中没有看到这个 KEXT 的任何迹象,也没有看到来自 IOLog() 的任何打印语句。

UPDATE4:我调整了 plist 中的捆绑 ID 使其匹配,现在它没有给出“无法找到的名称”错误:

更新5:

现在,每次我加载 KEXT 然后执行“hdiutil attach -nomount /tmp/crypto.dmg”(在创建 /tmp/crypto.dmg 之后)时,我的操作系统都会崩溃。

很明显我的 KEXT 现在正在运行,但由于某种原因,我仍然没有在任何地方看到 IOLog() 语句。必须查看系统日志,看看是否有任何迹象表明它崩溃了。

UPDATE6:我已经能够获得象征性的内核恐慌,但它指向不同的 KEXT(我认为我也没有源代码)。下面是它的相关部分。

我尝试使用相同测试 KEXT 的另一个版本(此处)而不进行任何更改(我已经删除了 IOLog() 语句,因为它们没有出现)。

我看到一个注释,这是在 Mac OS 10.6 上测试的,但是有没有人让这个样本在 10.13.16 (High Sierra) 上工作?

UPDATE7:我放弃了尝试使用 SimpleCryptoDisk.cpp 测试应用程序并从头开始,一次添加一点代码。我已经取得了一些成功(驱动程序启动并且我可以看到日志记录),尽管我还没有任何工作。

如果我被困在这个问题上,我可能会发布另一个问题,但我会继续将 pmdj 的答案标记为正确,因为他回答了我原来的问题。

但是,如果有人知道适用于 High Sierra 的 SimpleCryptoDisk 的修改版本,我仍然想知道。

0 投票
1 回答
801 浏览

mount - 如何在 Linux 中创建和挂载文件作为 HFS+ 文件系统进行读写?

我正在尝试挂载一个充当读/写 HFS+ 文件系统的文件。我正在使用基于 Arch linux 的发行版,所以我安装了 hfsprogs 和 hfsutils。在基于 debian 的发行版中,hfsprogs 应该足够了。

我创建了一个这样的 8G 文件:

然后我做了格式化:

之后,当我尝试挂载文件时,我得到:

Parted 显示可以抵消它:

我还尝试将 fdisk 与创建 sun 分区表的文件一起使用,但这也无济于事。您能帮我创建 HFS+ rw 文件系统作为文件吗?

0 投票
1 回答
462 浏览

macos - RPi 上的 Netatalk,导致 Hfs+ 驱动器在 RPi 上只读且未安装在 macOS 上

背景

我试图使用创建netatalk,按照这里的教程。一些版本信息:Time CapsuleRaspberry Pi 3

  • netatalk 3.1.12
  • macOS 10.14.5
  • 树莓派 4.19.50-v7+

问题和发现

在到达教程的最后一部分并且能够连接过来之后afp://,我意识到该卷是只读的。

只读

没有必要的许可

我重新阅读教程并意识到我没有做第一步,因为驱动器已经是HFS +。我的猜测是正常工作ignore ownership on this volume必不可少的。netatalk

结果/症状列表

  • [✔︎] 可以连接过来afp://
  • [✔︎] 可以挂载外置硬盘RPi
  • [] 安装的驱动器RPiread-only
  • [] 某些目录无法读取,既不RPi也不通过afp://
    • cp导致cp: cannot open 'filename' for reading: Permission denied
  • [] 无法在 macOS 上挂载外部驱动器
  • [] 卷在 macOS 上是只读的afp://

使用的配置

/etc/fstab

/etc/netatalk/afp.conf

/etc/nsswitch.conf

/etc/avahi/services/afpd.service

尝试修复

  • macOS 挂载不起作用
  • macOS 强制挂载不起作用
  • macOS guidiskutil first aid无法
  • macOS cli diskVerify 无法挂载和停止
  • macOS cli diskRepair 无法挂载并停止
  • RPi fsck 似乎无法解决问题
  • RPi fsck.hfsplus 似乎无法解决问题

问题和方向

该驱动器能够以只读方式安装,并在 RPi 上进行一些禁止访问,数据可能是安全的。目前,该驱动器拒绝在 macOS 上挂载,因此我无法使用 macOS 启用ignore ownership on this volume.

为什么卷(HFS+,在 macOS 上创建和使用)在教程之后可以在 RPi 上挂载,之后在 macOS 上变得无法挂载?

给出症状,是否有任何关键步骤导致此(除了不检查ignore ownership on this volume)?

是否有一些曲目作为解决方案?到:

  1. 在 macOS 上安装驱动器,这允许我修复权限并备份数据

  2. 修复 RPi 的权限,因此备份并通过afp://

或者,有什么更好的建议来克服这些障碍。