折腾服务器或者是专业的服务器运维都会遇到迁移数据或磁盘的情况。Linux下就提供了非常简单且强大的dd
命令,它可以拯救即将损坏磁盘的数据、远程备份或者进行完整的分区拷贝。
岩兔站整理了一下dd
命令的简单用法,与大家分享一下。
为什么使用dd
如果是复制或备份数据,可以使用tar
或者scp
命令,但是通常的文件复制仅限于在多台正常运行的linux系统之内。使用dd
命令,可以做到字节对字节的复制,所以在正式开始操作之前,一定要注意拼写,因为一条错误的语句很可能会将整个系统毁掉。
注意:如果命令中包含dd
,在执行之前一定要再次确认每一个字母,避免拼写出错。
基础语法
下面可以开始简单的试用一下dd
命令。
复制磁盘
比如你想将磁盘/dev/sda
完整的复制,首先需要准备一个新的磁盘空间,如:/dev/sdb
。使用dd
命令时需要包含if=
表示源磁盘,和of=
表示目标磁盘。所以命令如下:
# dd if=/dev/sda of=/dev/sdb
创建img镜像
将分区创建为镜像,并存储于/home
目录下
# dd if=/dev/sda of=/home/sdadisk.img
创建分区镜像
上述都是复制整个磁盘,如果只想复制某个分区,如:/dev/sda2
,也是完全没问题。
同时可以使用bs
参数,规定一次拷贝的字节数,如:bs=4096
。合理使用bs
参数可以优化dd
执行速度,bs
的合理范围要参考本机的性能进行具体设置。
# dd if=/dev/sda2 of=/home/partition2.img bs=4096
还原镜像
还原镜像也很简单,原理与创建镜像相同,只需颠倒if=
和of=
两个参数的内容即可,如:
dd if=sdadisk.img of=/dev/sdb
异地备份
可以通过与SSH
命令组合,进行异地服务器磁盘的备份。如将远端服务器1.2.3.4的磁盘/dev/sda
备份至本地bakup.gz
# ssh username@1.2.3.4 "dd if=/dev/sda | gzip -1 -" | dd of=backup.gz
成功备份的磁盘要注意测试。如果是可引导磁盘可将其还原至新计算机,尝试是否能正常启用。如果是普通数据盘,挂载后能正常读取。
覆写磁盘
更换磁盘时,如果原磁盘包含有敏感数据,处理起来就要小心了,因为所有删除甚至格式化的内容都有可能使用技术手段进行还原。
有人说最妥善最简单的方法是用锤子抹盘。但这样做未免有点太浪费了,使用dd
命令即可完全抹盘。
使用0填充整个硬盘:
# dd if=/dev/zero of=/dev/sda1
或者,使用随机数填充整个硬盘,效果更佳:
# dd if=/dev/urandom of=/dev/sda1
监视进程
根据磁盘大小,dd运行过程可能会耗时很长,如果想要在执行过程中查看进度,需要使用pv
工具。
首先安装pv
工具
Ubuntu/debian # sudo apt install pv 或CentOS # sudo yum install pv
然后运行dd
命令,效果如下
# dd if=/dev/urandom | pv | dd of=/dev/sda1 4,14MB 0:00:05 [ 98kB/s] [ <=> ]
参考资料:https://opensource.com/article/18/7/how-use-dd-linux(英文)
dd抹盘这招很机智啊233
是啊,跟大佬学的