linux dd指令

ghost和g4l

安装操作系统,速度太慢,整个过程太冗长乏味了。

安装过程中,需要回答若干问题,系统需要安装无数个软件,创建和写入无数的文件。因为涉及到大量的文件定位和读写,速度一定是快不起来的。

Windows下我们常常使用ghost系统来备份和刻录操作系统。ghost可以clone整个系统的镜像,然后在新的电脑上恢复,相当简单。用ghost系统安装操作系统比使用安装光盘安装系统要快捷多了,也不需要回答任何问题了。

那么,我们能不能用ghost来备份和恢复Linux系统呢。

答案是不行。因为ghost只能识别很少的老旧Linux文件系统,也无法识别grub和LILO等引导加载程序。

其实,Linux下也有ghost工具,最著名的有g4l—ghostForLinux。

用了一下ghostForLinux。如果是整个磁盘的复制和恢复,还算简单。但是,我试了半天,也没办法实现对一个或者几个分区的恢复。

g4l,还是太弱了,无法满足我的要求!

神奇的fdisk和dd命令

深深的苦恼中,灵光乍现:神奇的ghost的原理是什么呢?不就是数据复制吗?Linux下的dd命令不就是最强大的数据复制工具!

既然如此,我为什么要使用g4l这样复杂的工具呢?一条dd命令不就可以帮我实现任意复杂的镜像复制和恢复的需求了吗?管他是grub,还是ext4,btrfs,FAT32,NTFS...dd面前众生平等。

进入Linux操作系统,打开命令行,执行如下命令:

 sudo  fdisk -u -l

可以查看所有磁盘上的所有分区的尺寸和布局情况。

-u,让start和end中数字的单位是512字节,也就是一个sector扇区的大小。

假设我有一个/dev/sda磁盘,有100GB大小。我安装了一个Ubuntu操作系统。使用了如下分区:

/dev/sda1 5GB

/dev/sda2 1GB 扩展分区

/dev/sda5 1GB 扩展分区

/dev/sda2是所有扩展分区,它的大小和/dev/sda5重合。

/dev/sda1是ext4格式的文件系统。用于安装ubuntu操作系统。

/dev/sda5是swap格式的文件系统,作为交换分区。

如果我用弱智的g4l工具制作系统的镜像,就需要备份整个磁盘100GB,而不是我需要的6GB。

g4l也可以单独备份分区,但是在恢复时,就需要在目标计算机上安装好grub,并进行了适当的分区。很麻烦!

我这里,可以使用一条dd命令就生成6GB的镜像。然后可以在任意硬盘大于6GB的计算机上恢复出完整的系统,包括MBR和3个分区sda1,sda2,sda5。

具体步骤

找一个U盘,安装UbuntuLive Cd系统。【具体如何制作U盘启动的UbuntuLive CD,可以参考Ubuntu官方网站的帮助。】

UbuntuLive Cd和WindowsPE系统类似,是光盘/U盘引导的Ubuntu操作系统,不需要安装就可以直接使用。

U盘启动,进入盘上的Ubuntu系统,打开命令行,执行:

 sudo  fdisk -u -l /dev/sda

查看硬件的分区情况。

然后执行:

dd   bs=512 count=[fdisk命令中最大的end数+1] if=/dev/sda of=/ghost.img

这样,就可以把我需要的分区数据全部copy到ghost.img文件中。镜像制作完成了!

然后,我们就可以把U盘插到其他系统上,用U盘启动,进入UbuntuLiveCD,打开命令行,执行如下命令:

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

完成后,拔掉U盘,启动计算机,就可以看到我们的Linux系统已经安装完毕了!

注意:

       不要直接在计算机上用本地磁盘启动系统后执行dd命令生成本地磁盘的镜像。而应该使用livecd启动计算机。

        因此计算机运行时会对系统盘产生大量写操作。 直接对运行中的系统盘生成的镜像,在恢复到其他硬盘上时,很可能会无法启动!

 

 

一样适用于非Linux操作系统

在linux上用dd命令实现系统镜像备份和恢复,是不是很简单呢?

对于Windows系统,甚至Mac等等任意系统,其实都可以用dd命令实现系统镜像的备份和恢复。

因为,Linux的fdisk命令能够识别任意系统下的分区格式。fdisk并不关系分区上的文件系统,甚至有无文件系统都不关心。fdisk总是可以报告分区占用了哪些扇区。

dd命令也不关心磁盘的文件系统格式,它只是简单地按照要求从指定的位置,复制多少字节数据而已。

dd命令实现镜像备份和恢复,比Ghost软件简单和强大多了。使用ghost软件,依然需要用户进行复杂而危险的磁盘分区操作。

而使用fdisk和dd这两条命令,一切都免了!

压缩和解压缩

可能我们需要备份的分区很大,使用dd命令生成的镜像文件也就很大。存储和传输这些镜像不太方便。  我们也可以使用压缩程序压缩生成的镜像文件。 这里,我选择使用gzip程序,配合dd命令一起使用。

gzip参数:

-c 表示输出到stdout

-d  表示解压缩

-1 表示最快压缩

-9 表示最好压缩

默认使用的是-6压缩级别。

要使用 dd 和 gzip 生成压缩的镜像文件,可以执行命令: #   dd   bs=512
count=[fdisk命令中最大的end数+1] if=/dev/sda | gzip -6 > /ghost.img.gz

还原时,可以执行下列命令: gzip -dc /ghost.img.gz.gz | dd of=/dev/sda

提醒:

如果你把镜像恢复到另一台计算机上,你可能会发现你的网卡是eth1,而不是eth0。这是因为

/etc/udev/rules.d/70-persistent-net.rules   文件把你做镜像的计算机的网卡作为eth0登记了。

如果你的网络脚本对eth0进行了处理,而没有对eth1进行处理,那么不修改网络脚本,你可能就无法上网了。

也许你会希望在做镜像之前,先删除 /etc/udev/rules.d/70-persistent-net.rules 文件。这样你恢复镜像时,网卡的名字就是eth0。   就不会造成你在恢复后的计算机上无法上网的问题了。

linux dd指令

时间: 2024-10-16 07:51:54

linux dd指令的相关文章

linux dd 命令详解

1 磁盘管理 1.1 dd 1.1.1 功能说明 读取,转换并输出数据. 1.1.2 语法 dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version] 1.1.3 补充说明 dd可从标

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file 输入文件名,缺省为标准输入. of=file 输出文件名,缺省为标准输出. ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节). obs=b

Linux dd——备份命令

Linux学习笔记之备份命令dd 功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换.可以用该命令实现DOS下的diskcopy命令的作用.先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成 diskcopy的功能.需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉.系统默认使用标准输入文件和标准输出文件. 语法:dd [选项] if =输入文件(或设备名称). of =输出文件(或设备名称). ibs = bytes 一次读取

linux dd

使用dd这个linux命令可以创建一定大小文件. linux创建文件命令:dd命令把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换.语法:CODE:[Copy to clipboard]dd [选项]QUOTE:if =输入文件(或设备名称).of =输出文件(或设备名称).ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数.skip = blocks 跳过读入缓冲区开头的ibs*blocks块.obs = bytes 一次写入bytes字节,即写 入

Linux DD命令

if =输入文件(或设备名称). ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数. obs = bytes 一次写入bytes字节,即写 入缓冲区的字节数. cbs = bytes 一次转换bytes字节. conv = ASCII 把EBCDIC码转换为ASCII码. conv = ibm 把ASCII码转换为alternate EBCDIC码. conv = ublock 把固定们转换成变动位 conv = lcase 把字母由大写变为小写. conv = swab 交

Linux shell 指令

Linux shell指令运行的原理: Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)" ,但我们一般用户,不能直接使用kernel.而是通过 kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通.shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核.反馈结果在通过内核运行出结果,通过shell解析给用户. ls指令 -a 列出目录下的所有文件,包括以.开头的隐含文件. cd命令

Linux基本指令

1.Linux常用的查找命令 在Linux下经常会使用到两个查找命令grep和find.其中grep命令常用作包含某个字符串的文件:而find常用于查找匹配制定文件名的文件. grep命令 其实grep命令是Linux当中一个非常强大的搜索工具,这里之作简单的做简单的字符串匹配查找的相关介绍,大牛勿喷呀,方便日后查阅写给自己的. grep 要查找的字符串 查找路径 要查找的文件列表(用空格隔开) 参数     //grep查找字符串的格式 常用参数:-R 递归查找 -n 显示匹配的文件行号 eg

Linux相关指令

Linux相关指令 1.find文件搜索功能 find [目录列表] [匹配参数] [匹配标准] -name :按文件名称进行搜索 -group :按文件所属组进行搜索 -user :按文件拥有者进行搜索 例1:以-name作为搜索条件进行搜索 例2:以-group作为搜索条件进行搜索 例3:以-user作为搜索条件进行搜索 2.df磁盘相关指令 df :查看磁盘信息 -l :locate缩写,查看本地磁盘信息 -h :以1024进制显示磁盘空间 -H :以1000进制显示磁盘空间 -T :显示

Linux压缩指令

1.windows系统和Linux系统的压缩文件只有zip格式的是通用的 2.windows系统可以解压几乎所有的Linux压缩格式 3.Linux压缩指令 gzip 指令 格式: gzip 压缩的文件名 说明: 压缩后的文件名自动叫做 原文件名.gz gzip只能压缩.解压缩文件,不能操作目录,操作不保留源文件  gzip –d 或者 gunzip解压缩 tar 指令 格式: 压缩 tar –zcvf 压缩后名称 压缩的文件或目录 解压 tar –zxvf 解压的文件名 说明: 压缩后的文件名