Skip to content

磁盘管理

磁盘信息

diskutil - 磁盘工具

bash
diskutil list                   # 列出所有磁盘
diskutil info disk0             # 磁盘信息
diskutil info disk0s1           # 分区信息
diskutil listFilesystems        # 支持的文件系统
diskutil activity               # 磁盘活动

system_profiler - 系统信息

bash
system_profiler SPStorageDataType   # 存储信息
system_profiler SPSerialATADataType # SATA 信息
system_profiler SPDiagnosticsDataType  # 诊断信息

df - 磁盘空间

bash
df                              # 显示磁盘使用
df -h                           # 人类可读格式
df -T                           # 显示文件系统类型
df -i                           # 显示 inode 使用
df -x tmpfs                     # 排除文件系统
df /                            # 指定路径

du - 目录大小

bash
du                              # 显示目录大小
du -h                           # 人类可读格式
du -sh /path                    # 显示总大小
du -h -d 1                      # 显示一层深度
du -ah                          # 显示所有文件
du -sh *                        # 当前目录各文件大小
du -h --exclude="*.log"         # 排除文件

磁盘分区

diskutil 分区操作

bash
diskutil partitionDisk disk0 1 JHFS+ "Macintosh HD" 100%
diskutil partitionDisk disk0 2 JHFS+ "Macintosh HD" 50% JHFS+ "Data" 50%
diskutil eraseDisk JHFS+ "NewDisk" disk0
diskutil eraseVolume JHFS+ "NewVolume" disk0s1
diskutil deletePartition disk0s1
diskutil resizeVolume disk0s1 100g
diskutil splitPartition disk0s1 2 JHFS+ "Part1" 50% JHFS+ "Part2" 50%

文件系统类型

类型说明
JHFS+日志式 HFS+
HFS+HFS+
APFSApple File System
ExFAT扩展 FAT
FAT32FAT32
NTFSNTFS(只读)

gpt - GPT 分区

bash
gpt -r show disk0               # 显示分区表
gpt create disk0                # 创建 GPT 分区表
gpt destroy disk0               # 销毁分区表
gpt add -t hfs disk0            # 添加分区
gpt remove -i 2 disk0           # 删除分区
gpt label -i 2 disk0 "Label"    # 设置标签

文件系统

格式化磁盘

bash
diskutil eraseDisk APFS "Macintosh HD" disk0
diskutil eraseDisk JHFS+ "Macintosh HD" disk0
diskutil eraseDisk ExFAT "USB" disk0
diskutil eraseDisk FAT32 "USB" disk0
diskutil eraseVolume APFS "Volume" disk0s1

APFS 特性

bash
diskutil apfs list              # 列出 APFS 容器
diskutil apfs create disk0s1 "Macintosh HD"  # 创建 APFS 容器
diskutil apfs createVolume disk1 "Volume" 100g  # 创建 APFS 卷
diskutil apfs deleteVolume disk1s2  # 删除 APFS 卷
diskutil apfs resizeContainer disk1 500g  # 调整容器大小
diskutil apfs changeVolumeRole disk1s2 T    # 设置卷角色

APFS 卷角色

角色说明
N
S系统卷
B预启动卷
R恢复卷
VVM 卷
T临时卷

磁盘检查与修复

磁盘验证

bash
diskutil verifyVolume /         # 验证卷
diskutil verifyVolume disk0s1   # 验证指定卷
diskutil verifyDisk disk0       # 验证磁盘

磁盘修复

bash
diskutil repairVolume /         # 修复卷
diskutil repairVolume disk0s1
diskutil repairDisk disk0       # 修复磁盘

fsck - 文件系统检查

bash
fsck_hfs -fy /dev/disk0s1       # 检查 HFS+
fsck_apfs -y /dev/disk0s1       # 检查 APFS
fsck_exfat -y /dev/disk0s1      # 检查 ExFAT
fsck_msdos -y /dev/disk0s1      # 检查 FAT

需要在单用户模式或恢复模式下运行。

磁盘挂载

挂载操作

bash
diskutil mount disk0s1          # 挂载卷
diskutil mountDisk disk0        # 挂载整个磁盘
diskutil unmount disk0s1        # 卸载卷
diskutil unmountDisk disk0      # 卸载整个磁盘
diskutil unmount force disk0s1  # 强制卸载
mount                           # 显示已挂载
mount -t apfs                   # 显示 APFS 挂载

挂载选项

bash
mount -o ro /dev/disk0s1 /mnt   # 只读挂载
mount -o noexec /dev/disk0s1 /mnt  # 禁止执行
mount_apfs /dev/disk0s1 /mnt    # 挂载 APFS
mount_hfs /dev/disk0s1 /mnt     # 挂载 HFS+

磁盘映像

hdiutil - 磁盘映像工具

创建映像

bash
hdiutil create -size 10g -type SPARSE -fs HFS+ -volname "Backup" backup.sparseimage
hdiutil create -size 10g -type UDIF -fs HFS+ -volname "Data" data.dmg
hdiutil create -srcfolder /path/to/folder -fs HFS+ -volname "Archive" archive.dmg
hdiutil create -srcfolder /path/to/folder -encryption AES-256 -fs HFS+ secure.dmg
hdiutil create -size 10g -type SPARSEBUNDLE -fs HFS+ -volname "TimeMachine" backup.sparsebundle

挂载映像

bash
hdiutil attach image.dmg        # 挂载映像
hdiutil attach -readonly image.dmg  # 只读挂载
hdiutil attach -mountpoint /mnt image.dmg  # 指定挂载点
hdiutil attach -stdinpass image.dmg  # 从标准输入读取密码

卸载映像

bash
hdiutil detach /dev/disk2       # 卸载映像
hdiutil detach /Volumes/Backup
hdiutil eject /dev/disk2        # 弹出

转换映像

bash
hdiutil convert image.dmg -format UDRW -o output.dmg  # 转换格式
hdiutil convert image.dmg -format UDZO -o compressed.dmg  # 压缩
hdiutil convert image.dmg -format UDBZ -o compressed.dmg  # bzip2 压缩
hdiutil imageinfo image.dmg     # 查看映像信息
hdiutil resize -size 20g image.sparseimage  # 调整大小
hdiutil compact image.sparseimage  # 压缩稀疏映像

映像格式

格式说明
UDRO只读
UDCO压缩(ADC)
UDZO压缩(zlib)
UDBZ压缩(bzip2)
UDRW读写
UDTODVD/CD 主
UDSP稀疏
UDSB稀疏包

磁盘加密

FileVault

bash
fdesetup status                 # 查看 FileVault 状态
fdesetup enable                 # 启用 FileVault
fdesetup disable                # 禁用 FileVault
fdesetup list                   # 列出授权用户
fdesetup add -usertoadd user    # 添加用户
fdesetup remove -user user      # 移除用户
fdesetup changerecovery -personal  # 更改个人恢复密钥
fdesetup showdeferralinfo       # 显示延迟信息

加密磁盘映像

bash
hdiutil create -size 10g -encryption AES-256 -fs HFS+ -volname "Secure" secure.dmg
hdiutil create -srcfolder /path/to/folder -encryption AES-256 -fs HFS+ secure.dmg

磁盘克隆

asr - Apple Software Restore

bash
sudo asr restore --source /Volumes/Source --target /Volumes/Dest --erase
sudo asr restore --source image.dmg --target /Volumes/Dest --erase
sudo asr restore --source /Volumes/Source --target /Volumes/Dest --erase --noverify

使用 hdiutil 克隆

bash
hdiutil create -srcfolder /Volumes/Source -fs HFS+ -volname "Clone" clone.dmg
hdiutil attach clone.dmg

磁盘性能

测试磁盘速度

bash
diskutil info disk0 | grep "Solid State"
time dd if=/dev/zero of=/tmp/test bs=1m count=1000  # 写测试
time dd if=/tmp/test of=/dev/null bs=1m            # 读测试
rm /tmp/test

iostat - I/O 统计

bash
iostat                          # I/O 统计
iostat 1                        # 每秒刷新
iostat -c 5                     # 刷新5次
iostat -d disk0                 # 指定磁盘
iostat -w 2                     # 2秒刷新

磁盘清理

安全擦除

bash
diskutil secureErase 0 disk0    # 快速擦除
diskutil secureErase 1 disk0    # 单次覆盖
diskutil secureErase 2 disk0    # 3次覆盖
diskutil secureErase 3 disk0    # 7次覆盖
diskutil secureErase freespace 0 /  # 擦除空闲空间

安全擦除级别:

  • 0: 快速擦除
  • 1: 单次覆盖(随机数据)
  • 2: 3次覆盖(DoD 5220.22-M)
  • 3: 7次覆盖(DoD 5220.22-M ECE)
  • 4: 35次覆盖(Gutmann)

清理缓存

bash
sudo rm -rf /Library/Caches/*
rm -rf ~/Library/Caches/*
sudo periodic daily weekly monthly

外部设备

查看设备

bash
diskutil list external          # 列出外部磁盘
system_profiler SPUSBDataType   # USB 设备
system_profiler SPFireWireDataType  # FireWire 设备
system_profiler SPThunderboltDataType  # Thunderbolt 设备

弹出设备

bash
diskutil eject disk1            # 弹出磁盘
diskutil unmountDisk disk1 && diskutil eject disk1
drutil eject                    # 弹出光驱

Time Machine

tmutil - Time Machine 工具

bash
tmutil status                   # 查看状态
tmutil destinationinfo          # 查看目标
tmutil setdestination /Volumes/Backup  # 设置目标
tmutil startbackup              # 开始备份
tmutil stopbackup               # 停止备份
tmutil latestbackup             # 最新备份
tmutil listbackups              # 列出备份
tmutil deletebackup /path/to/backup  # 删除备份
tmutil local snapshot           # 创建本地快照
tmutil listlocalsnapshots /     # 列出本地快照
tmutil deletelocalsnapshots /   # 删除本地快照

磁盘工具 GUI

bash
open /System/Applications/Utilities/Disk\ Utility.app

下一步学习