zoukankan      html  css  js  c++  java
  • 在linux上用dd命令实现ghost功能

    转自:http://blog.jobbole.com/90978/

    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操作系统,打开命令行,执行如下命令:

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

    -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系统,打开命令行,执行:

    查看硬件的分区情况。

    然后执行:

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

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

    完成后,拔掉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 生成压缩的镜像文件,可以执行命令:

    还原时,可以执行下列命令:

    提醒:

    如果你把镜像恢复到另一台计算机上,你可能会发现你的网卡是eth1,而不是eth0。这是因为/etc/udev/rules.d/70-persistent-net.rules文件把你做镜像的计算机的网卡作为eth0登记了。

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

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

    注意:

    最好在dd生成镜像之前,先umount所有 if和of 设备的分区。这样可以确保在dd的过程中文件系统没有被改变。

    在完成dd(生成镜像和恢复镜像)后,执行sudo sync,确保数据被真正写入到硬盘上。

    另外,如果你想要对整个硬盘进行备份和恢复,而不是只备份和恢复部分分区,那么就请把dd命令中的 count=[fdisk命令中最大的end数+1]   去掉。bs=512也可以去掉。

    转自:http://blog.jobbole.com/90978/

  • 相关阅读:
    正经学C#_循环[do while,while,for]:[c#入门经典]
    Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常
    asp.net core 获取当前请求的url
    在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be
    用orchard core和asp.net core 3.0 快速搭建博客,解决iis 部署https无法登录后台问题
    System.Data.Entity.Core.EntityCommandExecution The data reader is incompatible with the specified
    初探Java设计模式3:行为型模式(策略,观察者等)
    MySQL教程77-CROSS JOIN 交叉连接
    MySQL教程76-HAVING 过滤分组
    MySQL教程75-使用GROUP BY分组查询
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/5606975.html
Copyright © 2011-2022 走看看