热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux中在不破坏磁盘的情况下使用dd命令

今天小编就为大家分享一篇关于Linux中在不破坏磁盘的情况下使用dd的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

无论你试图从即将坏掉的存储驱动器抢救数据,将归档备份到远程存储,还是在别处对活动分区制作一份完美副本,都要知道如何安全可靠地复制驱动器和文件系统。幸好,有dd这款简单而强大的镜像复制工具,而且历史悠久。在这方面没有比它更出色的工具了。

dd命令的解释

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2

参数注释:

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。

2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。

3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. cOnv=conversion:用指定的参数转换文件。

ascii:转换ebcdic为ascii

ebcdic:转换ascii为ebcdic

ibm:转换ascii为alternate ebcdic

block:把每一行转换为长度为cbs,不足部分用空格填充

unblock:使每一行的长度都为cbs,不足部分用空格填充

lcase:把大写字符转换为小写字符

ucase:把小写字符转换为大写字符

swab:交换输入的每对字节

noerror:出错时不停止

notrunc:不截短输出文件

sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

为驱动器和分区制作完美副本

如果你研究足够深入,可以用dd执行各种任务,但它最出色的功能就是让你可以玩转分区。当然,可以使用tar甚至scp来复制整个文件系统,办法就是从一台计算机复制文件,然后将它们原封不动地粘贴到另一台计算机上新安装的Linux。但是,由于那些文件系统归档不是完整的镜像,它们需要在两头都运行主机操作系统作为基础。

另一方面,使用dd可以为几乎任何数字化内容制作逐字节对应的完美镜像。但是在你开始将分区从一个地方复制到另一个地方,有必要提一下:“dd代表磁盘破坏者”这句盛传于Unix管理员当中的老话有一定道理。即使在dd命令中输错哪怕一个字符,都会立即永久地清除整个驱动器的宝贵数据。是的,确保输入无误很重要。

切记:在按下回车键调用dd之前,务必要考虑清楚!

dd的基本操作

我们已对你作了必要的警告,先从简单的方面开始入手。假设你想为被指定为/dev/sda的整个磁盘的数据创建一个精确镜像。你已插入了空的驱动器(理想情况下容量与/dev/sda系统一样大)。语法很简单:if =定义源驱动器,of =定义保存数据的文件或位置:

# dd if=/dev/sda of=/dev/sdb

下一个例子将创建/dev/sda驱动器的.img归档,将其保存到用户帐户的主目录中:

# dd if=/dev/sda of=/home/username/sdadisk.img

那些命令创建了整个驱动器的镜像。你还可以专注于驱动器中的单个分区。下一个例子执行该操作,还使用bs设置一次复制的字节数(本例中是4096个字节)。调整bs值可能会影响dd操作的整体速度,但理想的设置将取决于你的硬件配置文件及其他考量因素。

# dd if=/dev/sda2 of=/home/username/partition2.img bs=4096

恢复起来很简单:实际上只要将if的值和of的值反过来。在本文中,if=对应你想要恢复的镜像,of=对应你想要写入镜像的目标驱动器:

# dd if=sdadisk.img of=/dev/sdb

还可以在一个命令中同时执行创建操作和复制操作。比如说,该例子将使用SSH创建远程驱动器的压缩镜像,并将生成的归档保存到本地计算机:

# ssh username@54.98.132.10 "dd if=/dev/sda | gzip -1 -" | dd of=backup.gz

你应该始终测试归档,确认它们是否正常可用。如果它是你创建的启动驱动器,将它插入到计算机,看看是否正常启动。如果它是普通的数据分区,挂载它以确保文件存在且可以正常访问。

用dd擦除磁盘

多年前,我有个朋友为其政府负责海外大使馆的安保工作。他曾告诉我,他监管的每个大使馆都配有政府发放的一把锤子。为什么?万一大使馆遇到什么危险,可以使用这把锤子砸烂所有硬盘。

那为什么不删除数据呢?你不是在开玩笑吧?众所周知,从存储设备删除含有敏感数据的文件实际上删除不了数据。如果时间够充裕、动机够强烈,可以从几乎任何数字介质找回几乎任何数据,那些被砸得稀巴烂的数字介质除外。

然而,你可以使用dd让不法分子极难搞到你的旧数据。这个命令将花一些时间在/dev/sda1分区的每个角落上创建数百万个0:

# dd if=/dev/zero of=/dev/sda1

但它可以变得更好。使用/dev/urandom文件作为来源,你可以使用随机字符写入到磁盘:

# dd if=/dev/urandom of=/dev/sda1

监控dd操作

由于磁盘或分区归档可能要花很长时间,你可能需要为命令添加进度监控工具。安装Pipe Viewer(Ubuntu上执行sudo apt install pv),并将其插入到dd。使用pv,最后一个命令看起来像这样:

# dd if=/dev/urandom | pv | dd of=/dev/sda1
4,14MB 0:00:05 [ 98kB/s] [   <=>         ]

厌烦了备份和磁盘管理?有了dd,你不会有太多的借口。它用起来其实不难,不过要小心。祝你好运!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接


推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • PHP 时间与日期工具类:星座、干支、生肖的实现
    本文介绍了一个PHP时间与日期工具类,涵盖了时区设置、有效日期和时间检查、星座、干支、生肖计算等功能。该工具类特别适用于需要处理中国农历及西方星座的应用场景。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
author-avatar
cc晨晨V_842
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有