2019-11-27 21:43:08 weixin_40083227 阅读数 42

在制作U盘启动的时候,有时候需要用dd命令写入U盘.

sudo dd if=./manjaro-deepin-18.0.2-stable-x86_64.iso of=/dev/sdc bs=4M
sudo watch kill -USR1 $(pgrep ^dd)

查看硬盘情况

df -h
##df -h                      
文件系统        容量  已用  可用 已用% 挂载点
dev              32G     0   32G    0% /dev
run              32G  1.4M   32G    1% /run
/dev/nvme0n1p1  938G  194G  696G   22% /
tmpfs            32G   90M   32G    1% /dev/shm
tmpfs            32G     0   32G    0% /sys/fs/cgroup
tmpfs            32G   82M   32G    1% /tmp
/dev/nvme0n1p2  455M   18M  437M    4% /boot/efi
tmpfs           6.3G   28K  6.3G    1% /run/user/1000
/dev/nvme1n1p2  234G   11G  212G    5% /run/media/andrew/ebbbb5d2-99ae-4e7c-855f-eb44554ecadd
/dev/sda4       113G   54G   59G   48% /run/media/andrew/9A3402873402671B
/dev/sdb        120G   45G   76G   37% /run/media/andrew/USB3.0

查看硬盘分区

sudo fdisk -l
Disk /dev/nvme0n1:953.89 GiB,1024209543168 字节,2000409264 个扇区
磁盘型号:HS-SSD-C2000                            
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:9F2B628D-7951-40D7-B172-BBAEFFA299F6

设备             起点       末尾       扇区   大小 类型
/dev/nvme0n1p1 933888 2000397701 1999463814 953.4G Linux 文件系统
/dev/nvme0n1p2   2048     933887     931840   455M Microsoft 基本数据

分区表记录没有按磁盘顺序。


Disk /dev/nvme1n1:238.49 GiB,256060514304 字节,500118192 个扇区
磁盘型号:SAMSUNG MZVLW256HEHP-00000              
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:DE2A08FE-1B0B-6041-8F6E-93205335DCED

设备              起点      末尾      扇区  大小 类型
/dev/nvme1n1p1    2048   1026047   1024000  500M EFI 系统
/dev/nvme1n1p2 1026048 500118158 499092111  238G Linux 文件系统


Disk /dev/sda:113 GiB,121332826112 字节,236978176 个扇区
磁盘型号:APPLE SSD SD0128
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:6151D0C2-B64E-405D-A17C-12F529F48388

设备          起点      末尾      扇区   大小 类型
/dev/sda1     2048   1085439   1083392   529M Windows 恢复环境
/dev/sda2  1085440   1288191    202752    99M EFI 系统
/dev/sda3  1288192   1320959     32768    16M Microsoft 保留
/dev/sda4  1320960 236976127 235655168 112.4G Microsoft 基本数据


Disk /dev/sdb:120 GiB,128849018880 字节,251658240 个扇区
磁盘型号:Flash Disk      
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00000000


Disk /dev/sdc:30 GiB,32212254720 字节,62914560 个扇区
磁盘型号:Flash Disk      
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00000000

设备       启动  起点     末尾     扇区 大小 Id 类型
/dev/sdc1  *    16128 62914559 62898432  30G  c W95 FAT32 (LBA)



重新制作文件系统

sudo mkfs -t fat /dev/sdc

格式化完成

mkexfatfs 1.3.0
Creating... done.
Flushing... done.
File system created successfully.
2017-02-24 15:48:50 u013896064 阅读数 2858

神奇的fdiskdd命令

其实Linux使用dd命令备份系统就是Ghost,类似于window的Ghost版本。

 

       进入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。   就不会造成你在恢复后的计算机上无法上网的问题了。

2019-03-04 15:54:42 zyy1659949090 阅读数 622

无人值守安装可以解决大批量服务器的安装,但是服务器端配置实在过于麻烦,并不适合新手使用。有没有更简单的大批量服务器安装方法,类似 Windows 下的用 GHOST 软件进行硬盘克隆?

答案是有的,在 Linux 下可以使用强大的 dd 命令实现硬盘复制。对于初学者来说,本节内容可在掌握常用 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命令复制硬盘有两个前提条件。
第一,需要批量复制的服务器硬件配置一致。我们采购服务器一般都是批量采购的,所以服务器的配置都是一样的,这应该不是问题。
第二,复制硬盘的时候,需要手工更换被复制盘。服务器上一般都是SCSI硬盘,SCSI硬盘支持热插拔,而且不需要拆卸机箱,更换被复制盘非常方便。

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

  1. 把母盘插入服务器的第一个硬盘插口,把被复制盘插入服务器的第二个硬盘插口,注意不要插反。

  2. 执行复制命令。
    dd if=/dev/sda of=/dev/sdb

在 dd 命令中,if 指定复制源,of 指定复制目标。/dev/sda 代表第一块 SCSI 盘,/dev/sdb 代表第二块 SCSI 盘。这条命令会把第一块硬盘中的数据完整地复制到第二块硬盘中。

就这么简单!比无人值守安装痛快多了吧?那么它的效率如何呢?复制的速度和服务器的配置及安装软件的多少相关,不过笔者当年大批量复制服务器时,每台服务器的复制时间为15〜25分钟,效率还可以接受。无人值守安装也要受到服务器端配置和网络带宽的影响,而且硬盘复制也可以多台服务器同时操作。

在 Linux 中,除光盘安装、U 盘安装、无人值守安装和 dd 复制安装之外,还有其他的安装方式吗?答案是当然有,比如网络安装方式。网络安装方式比较简单,但是这种安装方式需要在每台客户端服务器上进行手工配置,如果是大批量安装,那么工作量也很大。

2019-07-24 11:18:17 weixin_44983653 阅读数 33

dd

dd 命令主要是用于复制文件并对原文件的内容进行转换和格式化处理。
dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。但是不推荐,如果需要备份oracle裸设备,可以使用rman备份,或使用第三方软件备份,使用dd的话,管理起来不太方便。

使用方法

# dd : onvert and copy a file
# dd if=/PATH/FROM/SRC of=/PATH/TO/DEST 
	bs=#:block size, 复制单元大小;
	count=#:复制多少个bs;

# of=file       写到所命名的文件而不是到标准输出
# if=file       从所命名文件读取而不是从标准输入
# bs=size       指定块大小(既是是ibs也是obs)
# ibs=size      一次读size个byte
# obs=size      一次写size个byte
# cbs=size      一次转化size个byte
# skip=blocks   从开头忽略blocks个ibs大小的块
# seek=blocks   从开头忽略blocks个obs大小的块
# count=n       只拷贝n个记录
# conv          用指定的参数转换文件

转换参数

# conv=conversion[,conversion...] 用指定的参数转换文件

转换参数:
# ascii      转换 EBCDIC 为 ASCII
# ebcdic     转换 ASCII 为 EBCDIC
# lcase      把大写字符转换为小写字符
# ucase      把小写字符转换为大写字符
# nocreat    不创建输出文件
# noerror    出错时不停止
# notrunc    不截短输出文件
# sync       把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
# Fdatasync   写完成前,物理写入输出文件

示例:有一个大于2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读
取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开
始的位置,替换128Bytes,实现如下:

# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

备份

# dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy

# dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件

# dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

恢复

# dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘

# gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘

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

# 修复硬盘
	dd if=/dev/sda of=/dev/sda

得到最恰当的block size

通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小。

# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
# dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
# dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
oot@leemumu ~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 2.70139 s, 379 MB/s
[root@leemumu ~]# dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
500000+0 records in
500000+0 records out
1024000000 bytes (1.0 GB) copied, 1.54546 s, 663 MB/s
[root@leemumu ~]# dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
250000+0 records in
250000+0 records out
1024000000 bytes (1.0 GB) copied, 0.926358 s, 1.1 GB/s

测试硬盘读写速度

# 测试硬盘写速度
	dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
	
# 测试硬盘读速度
	dd if=/root/1Gb.file bs=64k | dd of=/dev/null
[root@leemumu ~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 2.70979 s, 378 MB/s
[root@leemumu ~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null
15625+0 records in
15625+0 records out
1024000000 bytes (1.0 GB) copied, 3.96314 s, 258 MB/s
2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 3.96319 s, 258 MB/s

其它用法

# 磁盘拷贝
	dd if=/dev/sda of=/dev/sdb

# 备份MBR
	# /dev/sda 前512字节就是MBR,前446字节是BOOTLOADER
	dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

# 破坏MBR中的bootloader
	# 一般用于验证bootloader修复实验
	dd if=/dev/zero of=/dev/sda bs=256 count=1

# 拷贝内存资料到硬盘
	dd if=/dev/mem of=/root/mem.bin bs=1024
	将内存里的数据拷贝到root目录下的mem.bin文件
	
# 从光盘拷贝iso镜像
	dd if=/dev/cdrom of=/root/cd.iso
	拷贝光盘数据到root文件夹下,并保存为cd.iso文件
	
# 销毁磁盘数据
	dd if=/dev/urandom of=/dev/sda1
	利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,
	/dev/sda1将无法挂载,创建和拷贝操作无法执行

特殊设备

Linux上有两个特殊设备:

# /dev/null: 数据黑洞
# /dev/zero:吐零机

linux dd命令

阅读数 125

没有更多推荐了,返回首页