好久之后写的第一篇文章。
mac空间满了于是直接格式化掉了重置了,文件备份还在nas里,于是想直接给取出来。
0x01 编译安装
这里我们要用到两个binary,分别是‣,用来把sparsebundle挂在成一个dmg,以及‣,用来把dmg里的APFS备份卷挂载出来。
但是似乎这两个都没有现成的包可以用,于是我们需要手动安装。
首先安装依赖
sudo apt update
sudo apt-get install pkg-config libfuse-dev fuse # for sparsebundle-fs
sudo apt install fuse libfuse3-dev bzip2 libbz2-dev cmake gcc-c++ git libattr1-dev zlib1g-dev # for apfs-fuse 然后找源码/编译:
git clone --depth=1 https://github.com/torarnv/sparsebundlefs.git
cd sparsebundlefs
sudo make install
cd ..
git clone --depth=1 https://github.com/sgan81/apfs-fuse.git
cd apfs-fuse
git submodule init # ?这里是不是能直接用--recusive了?
git submodule update
mkdir build
cd build
cmake ..
sudo make install
cd .. 0x02 挂载
首先你需要找到nas上用来存放sparsebundle的地方,我用的是飞牛所以是在/vol1/@timemachine 下面。
mkdir -p "mnt_sparsebundle" "mnt_apfs"
sparsebundlefs /vol1/@timemachine/HUAWEI\ Matebook\ Pro.sparsebundle ./mnt_sparsebundle
ls -l mnt_sparsebundle 这个时候能看到这里面有一个sparsebundle.dmg ,接下来用apfs-fuse来挂载sparsebundle.dmg
apfs-fuse ./mnt_sparsebundle/sparsebundle.dmg ./mnt_apfs 这个时候就能在./mnt_apfs/root下面看到
- `2026-04-03-094221.previous`
- `2026-04-03-094221.backup`
- `backup_manifest.plist` 这样的几个备份了,进去看看也能找到正确的文件。
0x03 切换特定快照
其实也可以只挂在某一个快照。需要用apfsutil查看Snapshots。
apfs-fuse \
-o snap=1769 \
"./mnt_sparsebundle/sparsebundle.dmg" \
"./mnt_apfs" 最后找到文件,用rsync或者cp直接取出来就好。