本帖最后由 linioe 于 2023-9-19 15:31 编辑
我有一台3代CPU的笔记本,得益于OCLP,一直能追最新版系统。但是有的时候打完补丁后无法进入系统(例如用0.6.8正式版可以进系统,但是想用最新的0.6.9开发版就开机跑码重启)。
以前这种情况我都得重装系统,很是麻烦。因为OCLP是有撤销补丁的功能的,所以尝试参考OCLP源码获得帮助,得到了下面的办法。
在此声明,我只在自己的三代CPU,系统Ventura和Sonoma上进行了测试,理论上支持3-6代CPU核显和博通网卡补丁。
此方法可以在Recovery下或者别的系统下使用(最好是Recovery下使用,因为不同的系统命令效果可能不同,我只在Ventura和Sonoma进行了测试。别说没有Recovery,除了恢复方式安装的想要安装都得进Recovery)
1.进入Recovery,打开实用工具 --> 终端
2.找到要撤销补丁的分区标识:diskutil list
-bash-3.2# diskutil list /dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *120.0 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_APFS Container disk3 119.8 GB disk0s2
/dev/disk1 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +1.2 GB disk1 1: Apple_APFS Container disk2 1.2 GB disk1s1
/dev/disk2 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +1.2 GB disk2 Physical Store disk1s1 1: APFS Volume macOS Base System 945.0 MB disk2s1 2: APFS Volume Preboot 81.3 MB disk2s2
/dev/disk3 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +119.8 GB disk3 Physical Store disk0s2 1: APFS Volume Macintosh HD - 数据 24.9 GB disk3s1 2: APFS Volume Preboot 10.4 GB disk3s2 3: APFS Volume Recovery 3.0 GB disk3s3 4: APFS Volume Ventura - 数据 16.6 GB disk3s4 5: APFS Volume Macintosh HD 15.3 GB disk3s5 6: APFS Volume Ventura 9.3 GB disk3s7 7: APFS Volume Sonoma - 数据 13.9 GB disk3s8 8: APFS Volume Applications 1.9 GB disk3s9 9: APFS Volume Sonoma 10.0 GB disk3s10 10: APFS Volume VM 1.1 GB disk3s11
例如我这里想要撤销Sonoma分区的补丁,就是disk3s10(注意不要选择Sonoma - 数据,要选Sonoma,不要选带数据那个;另外这个名字不一定是系统版本的名称,要取决于你自己取的名字,例如有的人用macos或者Macintosh)。
3.卸载这个分区:diskuitl unmount diskXsY
-bash-3.2# diskutil unmount disk3s10 Volume Sonoma on disk3s10 unmounted 由于系统默认的挂载方式是只读的,不能进行下一步操作,所以需要先卸载再以适当的方式挂载。
这里的diskXsY就是上一步找到的标识,我这里就是disk3s10。
注意这里如果卸载错了也不要紧,重启后系统会自动挂载,只要继续卸载上一步找到的分区就行。
注意命令的结果,要卸载成功才能进行后续操作。
4.创建临时挂载点:mkdir dir
-bash-3.2# mkdir dir 默认是在/var/root下创建dir文件夹,在别的地方创建也行,但是后续使用要注意路径
使用ls命令查看是否创建成功
-bash-3.2# ls .bash_history Desktop Downloads dir .forward Documents Library
5.挂载要撤销补丁的分区:mount -o nobrowse -t apfs diskXsY dir
-bash-3.2# mount -o nobrowse -t apfs disk3s10 dir
这里的diskXsY就是第2步找到的标识,我这里就是disk3s10。
通过命令ls dir查看挂载是否成功
-bash-3.2# ls dir .VolumeIcon.icns Users opt .file Volumes private .vol bin sbin Applications cores tmp Library dev usr System etc var 6.预检查分区:diskutil info diskXsY
-bash-3.2# diskutil info disk3s10 Device Identifier: disk3s10 Device Node: /dev/disk3s10 Whole: No Part of Whole: disk3
Volume Name: Sonoma Mounted: Yes Mount Point: /System/Volumes/Data/private/var/root/dir
...
APFS Snapshots are defined upon this APFS Volume. Snapshot list: Snapshot UUID: 68FEEBDB-4C03-45E5-B957-B82869F95009 Name: com.apple.os.update-2EC73C0A30C4B87F8DA7553A83D8D5A028BEA8C7939287594B2C906F0C309D55 XID: 7924228 Snapshot UUID: 1A88BED2-CE3F-497B-B0B4-8781A33ECED5 Name: com.apple.bless.1F7F6042-D9F0-41E5-A0B5-93CA8592676B XID: 8041363 这里的diskXsY就是第2步找到的标识,我这里就是disk3s10。
查看结果应该有一个或多个Name开头为com.apple.bless的快照,最后一个就是要撤销的快照。有一个Name开头为com.apple.os.install或com.apple.os.update的快照,这个是最初没打补丁之前的快照。如果没有上述的两种快照,那么可能是别的方式更改的快照(例如直接删除了最基础的快照,这样撤销后会导致没有快照无法开机或者干脆就无法撤销快照),此方法可能不适用。
7.撤销补丁:bless --mount dir --bootefi --last-sealed-snapshot
-bash-3.2# bless --mount dir --bootefi --last-sealed-snapshot
如果第4步在别的地方创建的挂载点,那么命令中替换dir
此命令没有返回结果,如果有结果则是失败了的失败原因
8.清理补丁残留
三代CPU:
rm -rf dir/Library/Extensions/AppleIntelFramebufferCapri.kext
rm -rf dir/Library/Extensions/AppleIntelHD4000Graphics.kext
四代CPU:
rm -rf dir/Library/Extensions/AppleIntelFramebufferAzul.kext
rm -rf dir/Library/Extensions/AppleIntelHD5000Graphics.kext
五代CPU:
rm -rf dir/Library/Extensions/AppleIntelBDWGraphicsFramebuffer.kext
rm -rf dir/Library/Extensions/AppleIntelBDWGraphics.kext
六代CPU:
rm -rf dir/Library/Extensions/AppleIntelSKLGraphicsFramebuffer.kext
rm -rf dir/Library/Extensions/AppleIntelSKLGraphics.kext
9.重启:reboot
备注:
(1)在别的系统下也可以完成上述操作,如果执行命令提示没有权限,则在命令前加上sudo即可。
(2)理论上Non-Metal补丁(Nvidia Tesla、Maxwell、Pascal,AMD TeraScale 1、TeraScale 2,Intel Ironlake、Sandy Bridge),Nvidia Kepler补丁,AMD GCN 1-3、Polaris、Vega补丁都可以用,但是我没有测试过,不确定除了撤销快照还要进行哪些操作(源码中是有一些命令的),各位可以研究一下。
|