dd命令安装linux_dd命令安装linux启动盘 - CSDN
  • Linux 下的dd命令详解

    2020-04-03 15:52:41
    一、dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数注释: 1. if=文件名:输入文件名...

    一、dd命令的解释

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

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

    参数注释:

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

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

    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应用实例

    1.将本地的/dev/hdb整盘备份到/dev/hdd

    #dd if=/dev/hdb of=/dev/hdd

    2.将/dev/hdb全盘数据备份到指定路径的image文件

    #dd if=/dev/hdb of=/root/image

    3.将备份文件恢复到指定盘

    #dd if=/root/image of=/dev/hdb

    4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

    #dd if=/dev/hdb | gzip > /root/image.gz

    5.将压缩的备份文件恢复到指定盘

    #gzip -dc /root/image.gz | dd of=/dev/hdb

    6.备份与恢复MBR

    备份磁盘开始的512个字节大小的MBR信息到指定文件:

    #dd if=/dev/hda of=/root/image count=1 bs=512

       count=1指仅拷贝一个块;bs=512指块大小为512个字节。

    恢复:

    #dd if=/root/image of=/dev/had

    将备份的MBR信息写到磁盘开始部分

    7.备份软盘

    #dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)

    8.拷贝内存内容到硬盘

    #dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)  

    9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件

    #dd if=/dev/cdrom(hdc) of=/root/cd.iso

    10.增加swap分区文件大小

    第一步:创建一个大小为256M的文件:

    #dd if=/dev/zero of=/swapfile bs=1024 count=262144

    第二步:把这个文件变成swap文件:

    #mkswap /swapfile

    第三步:启用这个swap文件:

    #swapon /swapfile

    第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:

    /swapfile    swap    swap    default   0 0

    11.销毁磁盘数据

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

    注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

    12.测试硬盘的读写速度

    #dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

    #dd if=/root/1Gb.file bs=64k | dd of=/dev/null

    通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

    13.确定硬盘的最佳块大小:

    #dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

    #dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

    #dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

    #dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

    通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。

    14.修复硬盘:

    #dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda

    当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。

    15.利用netcat远程备份

    #dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234

    在源主机上执行此命令备份/dev/hda

    #netcat -l -p 1234 | dd of=/dev/hdc bs=16065b

    在目的主机上执行此命令来接收数据并写入/dev/hdc

    #netcat -l -p 1234 | bzip2 > partition.img

    #netcat -l -p 1234 | gzip > partition.img

    以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。

    将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值)

    echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

    三、/dev/null和/dev/zero的区别

    /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!

    /dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

    /dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。

    #if=/dev/zero of=./test.txt bs=1k count=1
    #ls –l

    total 4
    -rw-r--r--    1 oracle   dba          1024 Jul 15 16:56 test.txt

    #find / -name access_log  2>/dev/null

    3.1使用/dev/null 

    把/dev/null看作"黑洞", 它等价于一个只写文件,所有写入它的内容都会永远丢失.,而尝试从它那儿读取内容则什么也读不到。然而, /dev/null对命令行和脚本都非常的有用

    禁止标准输出

    #cat $filename >/dev/null

    文件内容丢失,而不会输出到标准输出.

    禁止标准错误

    #rm $badname 2>/dev/null

    这样错误信息[标准错误]就被丢到太平洋去了

    禁止标准输出和标准错误的输出

    #cat $filename 2>/dev/null >/dev/null

    如果"$filename"不存在,将不会有任何错误信息提示;如果"$filename"存在, 文件的内容不会打印到标准输出。

    因此,上面的代码根本不会输出任何信息。当只想测试命令的退出码而不想有任何输出时非常有用。

    #cat $filename &>/dev/null

    这样其实也可以, 由 Baris Cicek 指出

    自动清空日志文件的内容

    l Deleting contents of a file, but preserving the file itself, with all attendant permissions(from Example 2-1 and Example 2-3): 

    #cat /dev/null > /var/log/messages
    #  : > /var/log/messages   有同样的效果, 但不会产生新的进程.(因为:是内建的)
    #cat /dev/null > /var/log/wtmp

    隐藏cookie而不再使用

    特别适合处理这些由商业Web站点发送的讨厌的"cookies"

    #if [ -f ~/.netscape/cookies ]  # 如果存在则删除.
    #then
    #rm -f ~/.netscape/cookies
    #fi
    #ln -s /dev/null ~/.netscape/cookies

    现在所有的cookies都会丢入黑洞而不会保存在磁盘上了.

    3.2使用/dev/zero

    像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到。 /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件。

    用/dev/zero创建一个交换临时文件

    #!/bin/bash

     # 创建一个交换文件.

     ROOT_UID=0 # Root 用户的 $UID 是 0.

     E_WRONG_USER=65 # 不是 root?

     FILE=/swap

     BLOCKSIZE=1024

     MINBLOCKS=40

     SUCCESS=0

     # 这个脚本必须用root来运行.

     if [ "$UID" -ne "$ROOT_UID" ]

       then

       echo; echo "You must be root to run this script."; echo

       exit $E_WRONG_USER

     fi

     blocks=${1:-$MINBLOCKS} # 如果命令行没有指定,

     #+ 则设置为默认的40块.

     # 上面这句等同如:

     # --------------------------------------------------

     # if [ -n "$1" ]

     # then

     # blocks=$1

     # else

     # blocks=$MINBLOCKS

     # fi

     # --------------------------------------------------

     if [ "$blocks" -lt $MINBLOCKS ]

     then

     blocks=$MINBLOCKS # 最少要有 40 个块长.

     fi

     echo "Creating swap file of size $blocks blocks (KB)."

     dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零写入文件.

     mkswap $FILE $blocks # 将此文件建为交换文件(或称交换分区).

     swapon $FILE # 激活交换文件.

     echo "Swap file created and activated."

     exit $SUCCESS 

    关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device)或"安全地" 删除一个文件

    例子创建ramdisk

    #!/bin/bash

     # ramdisk.sh

     # "ramdisk"是系统RAM内存的一段,

     #+ 它可以被当成是一个文件系统来操作.

     # 它的优点是存取速度非常快 (包括读和写).

     # 缺点: 易失性, 当计算机重启或关机时会丢失数据.

     #+ 会减少系统可用的RAM.

     # 10 # 那么ramdisk有什么作用呢?

     # 保存一个较大的数据集在ramdisk, 比如一张表或字典,

     #+ 这样可以加速数据查询, 因为在内存里查找比在磁盘里查找快得多.

     E_NON_ROOT_USER=70 # 必须用root来运行.

     ROOTUSER_NAME=root

     MOUNTPT=/mnt/ramdisk

     SIZE=2000 # 2K 个块 (可以合适的做修改)

     BLOCKSIZE=1024 # 每块有1K (1024 byte) 的大小

     DEVICE=/dev/ram0 # 第一个 ram 设备

     username=`id -nu`

     if [ "$username" != "$ROOTUSER_NAME" ]

     then

        echo "Must be root to run \"`basename $0`\"."

        exit $E_NON_ROOT_USER

     fi

       if [ ! -d "$MOUNTPT" ] # 测试挂载点是否已经存在了,

     then #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了

        mkdir $MOUNTPT #+ 因为前面已经建立了.

     fi

     dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE

       # 把RAM设备的内容用零填充.                                               

       # 为何需要这么做?

     mke2fs $DEVICE # 在RAM设备上创建一个ext2文件系统.

     mount $DEVICE $MOUNTPT # 挂载设备.

     chmod 777 $MOUNTPT # 使普通用户也可以存取这个ramdisk.

     # 但是, 只能由root来缷载它.

     echo "\"$MOUNTPT\" now available for use."

     # 现在 ramdisk 即使普通用户也可以用来存取文件了.

     # 注意, ramdisk是易失的, 所以当计算机系统重启或关机时ramdisk里的内容会消失.

     # 拷贝所有你想保存文件到一个常规的磁盘目录下.

     # 重启之后, 运行这个脚本再次建立起一个 ramdisk.

     # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会正确工作.

     # 如果加以改进, 这个脚本可以放在 /etc/rc.d/rc.local,

     #+ 以使系统启动时能自动设立一个ramdisk.

     # 这样很合适速度要求高的数据库服务器.

     exit 0

    展开全文
  • dd命令安装Linux

    2019-06-29 20:39:47
    无人值守安装(Kickstart),又称全自动安装,其工作原理是,创建一个名为 ks.cfg 的文件记录 Linux 系统在安装过程中需要人工干预填写的各种参数,当安装过程中出现要填写参数时,安装程序会自行去 ks.cfg 文件中...

    面对大批量服务器的安装,人们往往热衷于选择“无人值守安装”的方式,而此方式需要对服务器进行过多的配置,并不适合初学者。

     

    无人值守安装(Kickstart),又称全自动安装,其工作原理是,创建一个名为 ks.cfg 的文件记录 Linux 系统在安装过程中需要人工干预填写的各种参数,当安装过程中出现要填写参数时,安装程序会自行去 ks.cfg 文件中查找合适的参数,如果没找到,还是需要手工干预。因此,在 ks.cfg 文件涵盖安装过程所有可能需要填写的参数的前提下,安装者只需要告诉安装程序 ks.cfg 文件的位置,就可实现全自动安装。

    本节介绍使用 dd 命令实现硬盘复制,间接实现安装 Linux 系统的方法,此方式类似 Windows 下用 GHOST 软件进行硬盘克隆。

    首先,我们先来系统了解一下  dd 命令。

    对于初学者来说,本节内容可在掌握常用 Linux 命令后再行学习。

    Linux dd 命令是什么

    dd 命令是用来复制文件的命令,它可以用指定大小的数据块复制一个文件,并在复制的同时进行指定的转换。简单地理解,dd 命令可用于进行两块硬盘之间的复制(完整复制出一块和原系统盘一样的硬盘)。

    dd 命令的格式如下:

    [root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数

    选项:

    • if=输入文件:指定源文件或源设备;
    • of=输出文件:指定目标文件或目标设备;
    • bs=字节数:指定一次输入/输出多少字节,即把这些字节看作一个数据块;
    • count=个数:指定输入/输出多少个数据块;

    【例 1】

      [root@localhost ~]# dd if=/dev/zero of=/root/testfile bs=1k count=100000  #创建一个100MB大小的文件testfile,/dev/zero是一个输入设备,可以使用它来初始化文件,该设备无穷尽地输出0,可以理解为向testfile中不停地写0,直到写满100MB;

    【例 2】

      [root@localhost ~]# dd if=/dev/sda of=/dev/sdb  #把第一块硬盘中的数据复制到第二块硬盘中

    【例 3】

      [root@localhost ~]# dd if=/dev/hda of=/root/image  #把第一块硬盘中的数据复制到image文件中

    使用 dd 命令复制硬盘,需满足以下两个前提条件:

    1. 需要批量复制的服务器硬件配置一致。通常,采购服务器都是批量采购的,服务器的配置都是一样的。
    2. 复制硬盘的时候,需要手工更换被复制盘。服务器上一般都是 SCSI 硬盘,SCSI 硬盘支持热插拔,而且不需要拆卸机箱,更换被复制盘非常方便。

    实际上,笔者当年维护大批量服务器时采用的就是 dd 复制,而不是无人值守安装。

    dd命令安装Linux详细步骤

    通过以上的学习我们知道,使用 dd 命令安装 Linux,实际上就是硬盘之间的完整拷贝,其实现过程如下:

    1. 把母盘插入服务器的第一个硬盘插口,把被复制盘插入服务器的第二个硬盘插口,注意不要插反。
    2. 执行复制命令 dd if=/dev/sda of=/dev/sdb。在 dd 命令中,if 指定复制源,of 指定复制目标。/dev/sda 代表第一块 SCSI 盘,/dev/sdb 代表第二块 SCSI 盘。这条命令会把第一块硬盘中的数据完整地复制到第二块硬盘中。

    经过以上两步,即可实现将服务器之间的复制。那么,此方法的效率如何呢?由于复制的速度和服务器的配置及安装软件的多少相关,因此每台服务器的复制时间约为15〜25分钟,效率还可以接受。

    选择无人值守安装的方式,也要受到服务器端配置和网络带宽的影响,而且硬盘复制也可以多台服务器同时操作。

    推荐学习目录:dd命令安装Linux

    展开全文
  • Linux安装操作系统环境有很多种方法,今天就在这里列举些。系统高手勿喷(可能还有新的装机技术)! Kickstart+HTTP+DHCP+TFTPpxe+kickstartcobber+pxe(http+ftp+dhcp)Windows部署服务统一安装win和linux操作...

    Linux安装操作系统环境有很多种方法,今天就在这里列举些。系统高手勿喷(可能还有新的装机技术)!

    • Kickstart+HTTP+DHCP+TFTP
    • pxe+kickstart
    • cobber+pxe(http+ftp+dhcp)
    • Windows部署服务统一安装win和linux操作系统
    • 使用raid磁盘阵列技术进行磁盘同步对拷(前提硬件环境相同)
    • 使用VM、qemu等虚拟化软件进行镜像格式转换
    • 使用云服务商提供的控制面板进行操作系统的镜像导入这导出
    • Linux系统克隆为iso镜像盘(类似win gost)

    无人值守安装linux
    目前业界普遍采用的解决方案是通过网络方式安装并结合自动答应文件,来实现无人值守安装linux,这种安装方式需要我们配置至少一台安装服务器,所有需要安装系统的客户端可以通过网络的方式连接服务器端启动安装程序,根据服务器中存放的自动应答文件实现大规模自动安装部署系统,整体的环境拓扑结构图如图所示(图画的比较简陋,请多多包容)


    这种无人值守安装linux的解决方案需要提前部署一台包含DHCP,TFTP,NFS,等服务的安装服务器
    安装部署流程:

    1. 客户端bios中设置通过网络启动 

    2.客户端启动后就会广播寻找DHCP服务器,如果找到该服务器即可以向该服务器申请获得包括ip地址在内的网络参数等。通过DHCP获取tftp的位置,当客户端找到tftp的位置后就可以重tftp服务器上下载启动文件到客户端的内存并启动,最终实现无盘启动。

    3.在启动中设置kickstart文件共享位置,这样客户端启动后可以自动寻找kickstart文件 实现无人值守安装linux(ps:kickstart文件事先要共享以及Cobbler也不错哦)。

    【注意】使用PXE批量部署时,有一个缺陷,即只能安装单一的操作系统(同一个版本,仅用一个kickstart文件)。但是在实际环境中,不同功能的服务器需要部署不同的环境,而cobbler正好满足了这一需求。cobbler基于python开发,是对PXE的二次封装,且提供了CLI和Web的管理形式,使得操作和管理更加简便。cobbler的实现与PXE类似,也需要tftp,httpd,dhcp这些服务。使用yum即可完成cobbler的安装,在安装的同时也会自动安装tftp和httpd服务,dhcp服务需要自行安装。

    cobbler的部署非常简单,首先添加distro,或直接导入光盘镜像,然后为某一个distro添加kickstart文件,一个distro可有多个kickstart文件,以实现同一版本的操作系统部署多个不一样的环境。

    流程图如下:

    wKiom1dVcY-hFnHdAACjR3rNiLg920.jpg-wh_50

    用惯Windows的朋友,转向类Unix系统的时候可能都会想到Ghost镜像与恢复,Ghost镜像不仅可以在系统出了问题时恢复系统到正常状态,还能快速实现系统的重新安装,所以多数用过的朋友都会在Windows系统安装后做个Ghost镜像。那么,Linux/Unix下能实现快速镜像和恢复吗?

    答案是肯定的。

    开源系统默认安装了一个dd工具命令,dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。下面是dd命令的一些说明,这在我们使用它做系统镜像恢复之前必须了解、明白:


    dd命令的解释

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

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

    参数:

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

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

    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应用实例。

    1. 将本地的/dev/hdb整盘备份到/dev/hdd

    1. dd if=/dev/hdb of=/dev/hdd
    复制代码
    2. 将/dev/hdb全盘数据备份到指定路径的image文件
    1. dd if=/dev/hdb of=/root/image
    复制代码
    3. 将备份文件恢复到指定盘
    1. dd if=/root/image of=/dev/hdb
    复制代码
    4. 备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
    1. dd if=/dev/hdb | gzip > /root/image.gz
    复制代码
    5. 将压缩的备份文件恢复到指定盘
    1. gzip -dc /root/image.gz | dd of=/dev/hdb
    复制代码
    6. 备份磁盘开始的512个字节大小的MBR信息到指定文件
    1. dd if=/dev/hda of=/root/image count=1 bs=512
    复制代码
    count=1指仅拷贝一个块;bs=512指块大小为512个字节。

    恢复:
    1. dd if=/root/image of=/dev/hda
    复制代码
    7. 备份软盘
    1. dd if=/dev/fd0 of=disk.img count=1 bs=1440k
    复制代码
    (即块大小为1.44M)

    8. 拷贝内存内容到硬盘
    1. dd if=/dev/mem of=/root/mem.bin bs=1024
    复制代码
    (指定块大小为1k) 

    9. 拷贝光盘内容到指定文件夹,并保存为cd.iso文件
    1. dd if=/dev/cdrom(hdc) of=/root/cd.iso
    复制代码
    10. 增加swap分区文件大小

    第一步:创建一个大小为256M的文件:
    1. dd if=/dev/zero of=/swapfile bs=1024 count=262144
    复制代码
    第二步:把这个文件变成swap文件:
    1. mkswap /swapfile
    复制代码
    第三步:启用这个swap文件:
    1. swapon /swapfile
    复制代码
    第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
    1. /swapfile swap swap default 0 0
    复制代码
    11. 销毁磁盘数据
    1. dd if=/dev/urandom of=/dev/hda1
    复制代码
    注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

    12.测试硬盘的读写速度
    1. dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
    2. dd if=/root/1Gb.file bs=64k | dd of=/dev/null
    复制代码
    通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

    13.确定硬盘的最佳块大小:
    1. dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
    2. dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
    3. dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
    4. dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
    复制代码
    通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。

    14.修复硬盘:
    1. dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
    复制代码
    当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。并且这个过程是安全、高效的。

    这里说点儿“题外话”:

    /dev/null和/dev/zero的区别 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/zero,是一个输入设备,你可你用它来初始化文件。 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/zero,是一个输入设备,你可你用它来初始化文件。

    /dev/null——它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 /dev/zero——该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。 

    $ if=/dev/zero of=./test.txt bs=1k count=1
    $ ls -l 
    total 4 -rw-r–r– 1 oracle dba 1024 Jul 15 16:56 test.txt

    eg,
    1. find / -name access_log  2>/dev/null
    复制代码
    使用/dev/null 把/dev/null看作”黑洞”. 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.


    ghostg4l

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

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

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


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

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


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

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


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


    神奇的fdiskdd命令

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


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


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

          sudo  fdisk -u -l

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

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

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

    /dev/sda1 5GB

    /dev/sda2 1GB扩展分区

    /dev/sda5 1GB扩展分区

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

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

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

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

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


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



    具体步骤

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

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


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

          sudo  fdisk -u -l /dev/sda

           查看硬件的分区情况。


    然后执行:


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

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



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

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

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

    注意:

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

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



    一样适用于非Linux操作系统

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


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

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

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

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

          而使用fdiskdd这两条命令,一切都免了!


    压缩和解压缩

            可能我们需要备份的分区很大,使用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。   就不会造成你在恢复后的计算机上无法上网的问题了。


    注意:
         最好在dd生成镜像之前,先umount所有 if和of 设备的分区。这样可以确保在dd的过程中文件系统没有被改变。
         在完成dd(生成镜像和恢复镜像)后,执行sudo sync,确保数据被真正写入到硬盘上。    
      
          另外,如果你想要对整个硬盘进行备份和恢复,而不是只备份和恢复部分分区,那么就请把dd命令中的 count=[fdisk命令中最大的end+1]   去掉。bs=512也可以去掉。

    Linux系统克隆为iso镜像盘(类似win gost)

    1、简介

      Mondo Rescue(以下简称Mondo)可以说是Linux 下的Ghost,它可以将你的系统像照相一样备份至磁带,CD-R,CD-RW,NFS或硬盘分区。Mondo广泛支援LVM,RAID,ext2, ext3, JFS, XFS,ReiserFS,VFAT等。这个软件可以让大家一步一步地将Linux系统备份出来,一旦今后出了问题,只要用创建好的MondoCD将系统还原至上次备份时的状态即可。
    与Ghost相似,在进行备份的使用,应把应用与数据的备份分开处理。也就是说,使用Mondo来备份系统的基本应用配置,生产数据使用资料备份的方式处理,如定时备份到磁带等。

    2、前期准备

      备份前,先把需要部署的应用都安装和配置完成。然后,重新改系统,挂载需要备份的分区,停止已经启动的应用,建议把系统保留在“干净”的状态下进行备份的工作。备份时的方式有多种,建议先备份到本地磁盘上。所以,需要在本地准备一个空闲空间,可足够存放后续备份的光盘镜像。

    3、安装软件

      centos7:

        ftp://ftp.mondorescue.org/centos/7/x86_64/

      制作repo源或者将将以下软件下载:

        mindi-busybox-1.21.1-1.centos7.x86_64.rpm
        mindi-3.0.2-1.centos7.x86_64.rpm
        perl-IO-Interface-1.05-2.el7.x86_64.rpm
        perl-Module-ScanDeps-1.10-3.el7.noarch.rpm
        perl-MondoRescue-3.2.2-1.centos7.noarch.rpm
        perl-Net-IPv4Addr-0.10-6.el7.noarch.rpm
        perl-ProjectBuilder-0.14.4-1.centos7.noarch.rpm

        buffer-1.19-8.centos7.x86_64.rpm
        afio-2.5-1.centos7.x86_64.rpm
        mondo-3.2.2-1.centos7.x86_64.rpm

      软件包或者repo源准备完成后:

        repo源:yum install mindi mindi-busybox mondo

        软件包(在软件下载目录执行):yum localinstall mindi mindi-busybox mondo

    4、开始克隆操作

      mondoarchive

      选择备份到本地硬盘:

      

      选择备份路径:

        

      选择压缩率:

      

      如果系统比较庞大,为方便今后刻录光盘,可把镜像分块,在这里输入每个镜像光盘的大小:
      (一般,CD最大700MB,DVD最大4300MB)
      
      镜像的名称:
      
      需备份的路径:
      (“/”表示系统全系统,后面可排除某些目录)
      
      需排除在外的目录,这些目录不会备份到光盘镜像中:
      (通常都是一些临时目录和资料数据目录)
      
      这里,需要您确认创建备份镜像后,是否进行校验:
      
      需要您确认是否标准的Linux 核心,“Yes”即可:
      
      确认后,开始备份:  
      
      先后收集今后Mindi启动必须的文件信息,如BusyBox等:
      
      进行备份:
      
      完成:
      
      请留意最后的日志信息:

      引用
      # mondoarchive
      nitializing...
      See /var/log/mondoarchive.log for details of backup run.
      Checking sanity of your Linux distribution
      Done.
      Execution run ended; result=0
      Type 'less /var/log/mondoarchive.log' to see the output log


      结果:

      引用
      # ll -h /var/cache/mondo/qktest-1.iso
    -  rw-r--r-- 1 root root 2.1G 05-25 15:00 /var/cache/mondo/qktest-1.iso

    5、完成

      /var/cache/mondo/qktest-1.iso为克隆完成的iso镜像

    6、恢复

      挂载镜像安装系统

      

      boot:nuke再输入回车

    其实现在技术更新很快不在是以前的单机物理机时代,虚拟化、集群技术和云计算的出现,大大缩短了我们的业务生产周期。

    • 镜像的导入和导出。例如阿里和亚马逊需要OSS和s3的存储
    • VMspahre直接进行两个虚拟机或者虚拟机to物理的的克隆
    • 直接在购买虚拟机然后配置好环境直接在控制台里存为镜像以便下次直接购买同样的配置


    展开全文
  • 无人值守安装(Kickstart),又称全自动安装,其工作原理是,创建一个名为 ks.cfg 的文件记录 Linux 系统在安装过程中需要人工干预填写的各种参数,当安装过程中出现要填写参数时,安装程序会自行去 ks.cfg 文件中...

    面对大批量服务器的安装,人们往往热衷于选择“无人值守安装”的方式,而此方式需要对服务器进行过多的配置,并不适合初学者。

     

    无人值守安装(Kickstart),又称全自动安装,其工作原理是,创建一个名为 ks.cfg 的文件记录 Linux 系统在安装过程中需要人工干预填写的各种参数,当安装过程中出现要填写参数时,安装程序会自行去 ks.cfg 文件中查找合适的参数,如果没找到,还是需要手工干预。因此,在 ks.cfg 文件涵盖安装过程所有可能需要填写的参数的前提下,安装者只需要告诉安装程序 ks.cfg 文件的位置,就可实现全自动安装。

    本节介绍使用 dd 命令实现硬盘复制,间接实现安装 Linux 系统的方法,此方式类似 Windows 下用 GHOST 软件进行硬盘克隆。

    首先,我们先来系统了解一下  dd 命令。

    对于初学者来说,本节内容可在掌握常用 Linux 命令后再行学习。

    Linux dd 命令是什么

    dd 命令是用来复制文件的命令,它可以用指定大小的数据块复制一个文件,并在复制的同时进行指定的转换。简单地理解,dd 命令可用于进行两块硬盘之间的复制(完整复制出一块和原系统盘一样的硬盘)。

    dd 命令的格式如下:

    [root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数

    选项:

    • if=输入文件:指定源文件或源设备;
    • of=输出文件:指定目标文件或目标设备;
    • bs=字节数:指定一次输入/输出多少字节,即把这些字节看作一个数据块;
    • count=个数:指定输入/输出多少个数据块;

    【例 1】

      [root@localhost ~]# dd if=/dev/zero of=/root/testfile bs=1k count=100000  #创建一个100MB大小的文件testfile,/dev/zero是一个输入设备,可以使用它来初始化文件,该设备无穷尽地输出0,可以理解为向testfile中不停地写0,直到写满100MB;

    【例 2】

      [root@localhost ~]# dd if=/dev/sda of=/dev/sdb  #把第一块硬盘中的数据复制到第二块硬盘中

    【例 3】

      [root@localhost ~]# dd if=/dev/hda of=/root/image  #把第一块硬盘中的数据复制到image文件中

    使用 dd 命令复制硬盘,需满足以下两个前提条件:

    1. 需要批量复制的服务器硬件配置一致。通常,采购服务器都是批量采购的,服务器的配置都是一样的。
    2. 复制硬盘的时候,需要手工更换被复制盘。服务器上一般都是 SCSI 硬盘,SCSI 硬盘支持热插拔,而且不需要拆卸机箱,更换被复制盘非常方便。

    实际上,笔者当年维护大批量服务器时采用的就是 dd 复制,而不是无人值守安装。

    dd命令安装Linux详细步骤

    通过以上的学习我们知道,使用 dd 命令安装 Linux,实际上就是硬盘之间的完整拷贝,其实现过程如下:

    1. 把母盘插入服务器的第一个硬盘插口,把被复制盘插入服务器的第二个硬盘插口,注意不要插反。
    2. 执行复制命令 dd if=/dev/sda of=/dev/sdb。在 dd 命令中,if 指定复制源,of 指定复制目标。/dev/sda 代表第一块 SCSI 盘,/dev/sdb 代表第二块 SCSI 盘。这条命令会把第一块硬盘中的数据完整地复制到第二块硬盘中。

    经过以上两步,即可实现将服务器之间的复制。那么,此方法的效率如何呢?由于复制的速度和服务器的配置及安装软件的多少相关,因此每台服务器的复制时间约为15〜25分钟,效率还可以接受。

    选择无人值守安装的方式,也要受到服务器端配置和网络带宽的影响,而且硬盘复制也可以多台服务器同时操作。

    展开全文
  • 原标题: Linux下使用dd命令制作启动盘 原链接: https://www.dreamoftime0.com/2018/09/25/linux%e4%b8%8b%e4%bd%bf%e7%94%a8dd%e5%91%bd%e4%bb%a4%e5%88%b6%e4%bd%9c%e5%90%af%e5%8a%a8%e7%9b%98/ ...
  • dd命令备份Linux系统

    2019-01-25 11:42:26
    本文提供有关使用dd命令备份Linux系统的6个实例。 dd是一个功能强大的UNIX工具,由Linux内核的makefile进行引导映像,它也可以用来复制数据。 例 1:备份整个硬盘 使用dd命令备份整个硬盘。在这个例子中,源硬盘的...
  • Linuxdd命令详解

    2016-11-23 16:56:17
    一、dd命令dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2参数注释:if=文件名:输入文件名,缺省为标准输入。...
  • 本文提供有关使用dd命令备份Linux系统的6个实例。 dd是一个功能强大的UNIX工具,由Linux内核的makefile进行引导映像,它也可以用来复制数据。 例 1:备份整个硬盘 使用dd命令备份整个硬盘。在这个例子中,源硬盘...
  • Linux命令dd

    2019-06-16 22:47:41
    dd命令用来复制文件,并根据参数将数据转换和格式化。 2.格式 dd [options] 3.[opitions]主要参数 if=文件名:输入文件名,缺省为标准输入。即指定源文件。 of=文件名:输出文件名,缺省为标准输出。即指定...
  • DD命令备份Linux系统

    2017-02-24 15:48:50
    其实Linux使用dd命令备份系统就是Ghost,类似于window的Ghost版本。    进入Linux操作系统,打开命令行,执行如下命令:  sudo fdisk -u -l  可以查看所有磁盘上的所有分区的尺寸和布局情况。 ...
  • linux dd命令 源代码

    2020-07-29 14:21:28
    个人写的一个linux dd命令,可能会有错误,希望有兴趣的可以交流交流!!!
  • dd命令测试linux磁盘读写速度 1、先熟悉两个特殊的设备: (1)/dev/null:回收站、无底洞。 (2)/dev/zero:产生字符。 2、测试磁盘写能力 time dd if=/dev/zero of=/testw.dbf bs=4k count=100000 因为/dev/...
  • Linux 下的dd命令使用详解(摘录) 一、dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数...
  • 今天同学告诉我可以在linux下使用dd命令来制作U盘启动,方便快捷,试了一下,确实很好用。废话补多说,具体内容:  先去官网下载一个镜像,我下的是ubuntu-12.04-desktop-amd64.iso文件。需要一个足够大的U盘。  ...
  • linux下显示dd命令的进度: dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000 想要查看上面的dd命令的执行进度,可以使用下面几种方法: 比如:每5秒输出dd的进度 方法一: watch -n 5 pkill -...
  • 经常使用dd命令制作linux系统盘,相当方便迅速。但是用了这么久,突然就想,要是能够知道dd现在的进度该多好,于是查了查,果然找到了。 刻盘的时候,我们先在一个shell中使用dd,比如我们把Arch Linux的镜像刻到...
  • 首先在 Linux 系统中打开终端,确认 U 盘路径:sudo fdisk -l使用 dd 命令,格式如下:sudo dd if=xxx.iso of=U盘路径完整示例:sudo dd if=~/...输完上述DD命令后回车执行,系统就开始制作启动盘了,期间终端命令窗
  • dd 命令拷贝linux系统

    2017-05-27 17:00:11
    Linux系统如果想做备份还原,使用ghost的时候经常出现问题,后来发现可以直接使用dd命令完成硬盘的克隆和还原.当拷贝完硬盘后,就可以拿这个硬盘放到其它设备上跑了。也就是完成了“烧写”了。 实际操作中,最好使用...
  • dd命令Linux发行版非常简单的备份工具。 “dd”工具简单的拷贝标准输入到标准输出,在512字节块读取。 dd 命令是Linux发行版非常简单的备份工具。该“dd”工具简单的拷贝标准输入到标准输出,在512字节块读取。 ...
  • linux dd命令查看进度

    2019-01-04 15:23:20
    linux下显示dd命令的进度: dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000 想要查看上面的dd命令的执行进度,可以使用下面几种方法: 比如:每5秒输出dd的进度 方法一: watch -n 5 pkill -USR1...
1 2 3 4 5 ... 20
收藏数 119,538
精华内容 47,815
关键字:

dd命令安装linux