问题标签 [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.
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 下问题变得更加复杂,因为应用程序对已删除文件的规范化也一无所知。在开发人员文档中,我找不到有关此的详细信息。理想情况下,删除事件应保留文件的大小写和规范化。
对此的任何见解表示赞赏。
macos - 确定哪个应用程序正在从 Mac OS 过滤器方案驱动程序中读取或写入数据
我想学习开发 Mac OS 过滤方案驱动程序,我正在使用 Mac OS X Internals 一书中的 SimpleCryptoDisk 示例应用程序的修改版本。我使用的来源是here。
作为下一个目标,我想修改它以跟踪哪些应用程序正在执行读取和写入,并最终打印出每个应用程序读取和写入的字节数。
我在 read() 调用中看到有一个指向客户端 (* IOService) 的指针,但是我还没有找到从该对象获取任务/进程的任何方法。我正在考虑调用 API 来确定当前进程,但由于此代码在 KEXT(在内核中)中运行,我认为这不会帮助我识别用户级进程。
我在那里找到了一个名为 newUserClient() 的 IOServer API,其中包含 task_t,我认为它足以让我以某种方式获得应用程序名称。但是我不确定如何将此调用与 read() 调用联系起来。
通常我只是在实验上尝试一堆东西,但由于我在内核中工作,所以我想一开始要小心行事,避免把事情搞砸。因此,如果有人可以给我任何提示以获取读取或写入的进程名称,那就太好了。
macos - 学习编写 Mac OS 过滤方案驱动程序的推荐资源
我正在尝试创建一个 Mac OS 过滤器驱动程序,但不确定最好的最新资源。
在线“Mac OS X Internals: A Systems Approach (paperback)”一书有一些章节,但它们似乎是 10 多年前的版本。亚马逊上有一个更新的版本(列为 2016 年出版),但是我看到那本书的评级说有几百页,还有几个章节丢失。
有谁知道这本书的最新纸质(或 E)版本是否包含有关在 Mac OS X 中制作过滤器方案驱动程序的详细信息?
有人还指出 KauthORama 示例代码是一种资源,但它似乎最后一次更新是在大约 5 年前。
最近有没有人真正制作过过滤器方案驱动程序,如果有的话,你建议什么资源?
更新:我收到了出版商关于上述书籍的回复。2016年它被做成平装书,分成两本书,但内容是2006年的。所以我怀疑它在13年后会有那么有用。他们说作者不想更新内容。
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 的修改版本,我仍然想知道。
mount - 如何在 Linux 中创建和挂载文件作为 HFS+ 文件系统进行读写?
我正在尝试挂载一个充当读/写 HFS+ 文件系统的文件。我正在使用基于 Arch linux 的发行版,所以我安装了 hfsprogs 和 hfsutils。在基于 debian 的发行版中,hfsprogs 应该足够了。
我创建了一个这样的 8G 文件:
然后我做了格式化:
之后,当我尝试挂载文件时,我得到:
Parted 显示可以抵消它:
我还尝试将 fdisk 与创建 sun 分区表的文件一起使用,但这也无济于事。您能帮我创建 HFS+ rw 文件系统作为文件吗?
macos - RPi 上的 Netatalk,导致 Hfs+ 驱动器在 RPi 上只读且未安装在 macOS 上
背景
我试图使用创建netatalk
,按照这里的教程。一些版本信息:Time Capsule
Raspberry Pi 3
- netatalk 3.1.12
- macOS 10.14.5
- 树莓派 4.19.50-v7+
问题和发现
在到达教程的最后一部分并且能够连接过来之后afp://
,我意识到该卷是只读的。
我重新阅读教程并意识到我没有做第一步,因为驱动器已经是HFS +。我的猜测是正常工作ignore ownership on this volume
必不可少的。netatalk
结果/症状列表
- [✔︎] 可以连接过来
afp://
- [✔︎] 可以挂载外置硬盘
RPi
- [] 安装的驱动器
RPi
是read-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 gui
diskutil 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
)?
是否有一些曲目作为解决方案?到:
在 macOS 上安装驱动器,这允许我修复权限并备份数据
修复 RPi 的权限,因此备份并通过
afp://
或者,有什么更好的建议来克服这些障碍。