Mac 磁盘备份恢复基本操作
创建日期:2015-06-05 15:57:57

作用:制作各种启动U盘,备份系统镜像,备份文档数据,克隆硬盘等

查看设备块

先通过diskutil确认U盘的设备块

diskutil list

显示信息

/dev/disk0
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *251.0 GB   disk0
1:                        EFI EFI                     209.7 MB   disk0s1
2:          Apple_CoreStorage                         250.1 GB   disk0s2
3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:                  Apple_HFS Macintosh HD           *248.4 GB   disk1
                             Logical Volume on disk0s2
                             F5A4D026-CAB5-4793-9895-5F01854F7A48
                             Unencrypted
/dev/disk2
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:     FDisk_partition_scheme                        *7.7 GB     disk2
1:             Windows_FAT_32 MENG                    7.6 GB     disk2s1

上面显示的是我本机的磁盘设备,disk0disk1是自带硬盘(disk0是恢复和引导分区,disk1是主要分区),disk2是U盘设备。

卸载设备

在通过dd命令写U盘的时候需要unmount,注意不能在finder里推出U盘,那样的话整个设备块也卸载了。

diskutil unmountDisk /dev/disk2

显示信息

Unmount of all volumes on disk1 was successful

写入设备镜像

sudo dd if=/data/CentOS-7-x86_64-DVD-1503-01.iso of=/dev/disk2 bs=1024

Mac下显示dd命令进度

Linux一般会向USR1发送kill信号来即时的显示dd当前进度,Mac下发了信号真的就把ddkill掉了(当时我就哭了,传了接近一个小时)

查了一下资料,可以先使用brew安装pv,之后使用以下的命令来实现进度条的显示:

pv -cN source < /data/CentOS-7-x86_64-DVD-1503-01.iso | dd of=/dev/disk2 bs=4m

PS:需要切换到root用户执行

sudo -i

其他注意事项

bs=1024是块的大小,后面的数值大,写的速度相对块一点

具体多少我不是太清楚,开始查的参考资料都是1024,也有2M,《Mac OS X下显示dd命令进度》一文中用的是4M

备份整块硬盘(磁盘克隆)

Mac中硬盘是disk0,disk1,disk2,disk3...

这里假设要备份的磁盘为/dev/disk2,新磁盘为/dev/disk3

dd if=/dev/disk2 of=/dev/disk3

PS:记得执行sudo -iroot权限执行

备份到一个磁盘文件

dd if=/dev/disk2 of=~/disk2.img

压缩磁盘镜像

gzip disk1.img #generates disk1.img.gz

创建压缩磁盘映像文件

dd if=/dev/sda | gzip > disk.img.gz

dd if=/dev/sda | bzip2 > disk.img.bz2

分区克隆

Mac中硬盘及分区表示方法为

disk0    disk0s2  disk1    disk2s1  disk3    
disk0s1  disk0s3  disk2    disk2s2  disk3s1

克隆第三块硬盘第一分区到第四块硬盘第一分区中

dd if=/dev/disk2s1 of=/dev/disk3s1

备份第三块硬盘第一块分区到名为part1.img的文件中

dd if=/dev/disk2s1 of=~/part1.img

镜像文件恢复磁盘或分区

把保存在disk1.img中的映像恢复到第一块磁盘

dd if=disk1.img of=/dev/sda

把保存在part1.img中的映像恢复到第一块硬盘的第二个分区

dd if=part1.img of=/dev/hda2

PS:无论备份还是恢复,都需要保证of指向的文件或磁盘空间要大于if指向的内容,因为是按字节复制,如果没有足够的空间去存储内容,备份自然会失败。

参考资料

在Mac下制作Linux启动U盘

Mac OS X下显示dd命令进度

Linux下显示dd命令的进度

Linux中dd命令详解

Mac启动U盘怎么制作