2014-09-05 18:42:15 chenngua 阅读数 86
【基本介绍】
这里我们使用dd命令来测试硬盘的读写速度
dd - convert and copy a file


【基本操作】
dd用于复制,从if读出,写到of。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。
#纯写
# time dd if=/dev/zero of=/var/test bs=8k count=1000000
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB) copied, 52.5749 seconds, 156 MB/s

real 0m55.841s
user 0m0.507s
sys 0m15.706s

#纯读
# time dd if=/var/test of=/dev/null bs=8k count=1000000
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB) copied, 49.0088 seconds, 167 MB/s

real 0m49.025s
user 0m0.559s
sys 0m6.383s

#读写
# time dd if=/var/test of=/tmp/test bs=8k count=1000000
125000+0 records in
125000+0 records out
8192000000 bytes (8.2 GB) copied, 129.239 seconds, 63.4 MB/s

real 2m9.251s
user 0m0.114s
sys 0m21.494s

【参考】
[url]http://blog.csdn.net/feng4656/article/details/11054595[/url]
2015-10-30 09:38:47 u013359794 阅读数 5913

现有linux系统,由硬盘sda运行,想将其整体拷贝至硬盘sdb,并由sdb启动系统,如何做?

两种方案,第一种方案tar命令压缩拷贝;第二种方案,linux dd命令直接拷贝。

1、第一种方案,tar压缩备份恢复

tar压缩备份后,在恢复时,需修改引导分区,修改GRUB,详见网址:http://www.cnblogs.com/hanyulcf/archive/2010/06/10/backuplinux.html。

限于时间,本人未亲测第一方案,应该可行。

2、第二种方案,dd命令整盘复制

dd命令,无脑的按字节复制方式,不仅复制数据,而且复制分区和UUID等信息。具体操作如下。

在Linux上,一块硬盘或者一个分区都由一个目录表示,一般存在于系统根目录的/dev/之下。例如/dev/hda代表你的第一块IDE硬盘,/dev/sdb代表第二块SCSI硬盘,/dev/fd0代表系统的软盘驱动器等等。同样每块硬盘上的分区也有独特的目录名,例如/dev/hda1表示你第一块硬盘上的第一个分区(至于这个分区上有什么东西在进行备份操作的时候并不重要)。

2.1. 磁盘克隆
也就是把整个硬盘复制一份。当然你首先需要在计算机上在接上一块新硬盘,并让系统识别。例如这块硬盘可能被识别为/dev/sdb,原有硬盘叫/dev/sda.然后你可以在linux命令行上简单地执行:
dd if=/dev/sda of=/dev/sdb
对就这么简单,此命令完成后,你的第二块硬盘上将有一个和第一块硬盘一模一样的副本,也是可以启动的。因为dd操作就是简单的按字节复制,什么分区表啊,MBR啊统统照搬。
当然你也可以做一些微调,来定制一下克隆操作。例如你可能希望把硬盘上的内容全部备份到一个磁盘文件中,而不是另一块新硬盘,你可以
dd if=/dev/sda of=~/disk1.img
之后,disk1.img就是备份好的磁盘映像文件,你可以复制或转移到其他介质也可以压缩一下:
gzip disk1.img #generates disk1.img.gz
或者在创建磁盘映像文件的同时就执行压缩:
dd if=/dev/sda | gzip > disk.img.gz
dd if=/dev/sda | bzip2 > disk.img.bz2

不错吧!ghost的功能都有了。

2.2.分区克隆
如果我们不想克隆整块磁盘,只想把某些存放数据的分区备份一下,你会需要克隆一个分区。正如预备知识所述,分区在linux下也是一个文件。例如
dd if=/dev/sda1 of=~/part1.img
将把第一块磁盘的第一个分区备份到名为part1.img的文件中。
也可以进行分区复制:
dd if=/dev/hda1 of=/dev/hda3
将把分区一原样复制到分区3.

2.3. 从镜像文件恢复磁盘或分区
很简单,把上面命令中,of和if指向的文件名互换一下即可实现恢复。例如
dd if=disk1.img of=/dev/sda
把保存在disk1.img中的映像恢复到第一块磁盘
dd if=part1.img of=/dev/hda2
把保存在part1.img中的映像恢复到第一块硬盘的第二个分区

最后,需要注意一点是,无论备份还是恢复,都需要保证 of 指向的文件或磁盘空间要大于 if 指向的内容,因为是按字节复制如果没有足够的空间去存储内容,备份自然会失败。

注:

该方案,如果备份硬盘大于原硬盘,由于分区表也被复制,会出现硬盘空间闲置或无法全部发现的问题,解决方案:首先,我使用命令sudo dd if=/dev/sda1 of=/dev/sdb1 然后运行sudo e2fsck -f /dev/sdb1 再 sudo resize2fs /dev/sdb1 然后成功挂载分区 过程完毕............只有3条命令

参考连接:http://blog.sina.com.cn/s/blog_6a717d640101a9kf.html

http://www.linuxde.net/2013/03/12928.html

3、查看复制进度

复制# dd if=/dev/sdb of=/dev/sdd

另开启一个终端,查询dd进程号

#ps -auxe | grep dd或

#ps -ef|grep dd
取得dd命令的进程号
#kill -USR1 dd进程号
记录了993665+0 的读入
记录了993665+0 的写出
508756480字节(509 MB)已复制,239.29 秒,2.1 MB/秒

参考:http://blog.163.com/zhengzeng2@126/blog/static/46135848201243013350578/


4、问题解决

4.1、dd后硬盘分区挂载失败,bad option,bad superblock,bda fs

将最后一个分区重新分区,然后格式化,格式命令:mkfs.ext4 -T -c  -L EPIPHAN_DATA /dev/sdb5




2014-05-13 20:36:25 archord 阅读数 6699
只拷贝前120GB:
120GB=128MB * 938=64MB*1875
sudo dd if=/dev/sdb of=/dev/sdc conv=notrunc bs=128MB count=938
sudo dd if=/dev/sdb of=/dev/sdc conv=notrunc bs=64MB count=1875
count为bs的次数

一个盘到多个盘的拷贝:
dd if=image.bin | tee >(dd of=/dev/sdc) | dd of=/dev/sdh
进度条dd with progress bar and statistics
dd if=/dev/source | pv -s $(pv -s $(blockdev –getsize64 /dev/source) | tee >(dd of=/dev/dest1) | dd of=/dev/dest2

部分拷贝问题修复:
对于GPT格式的硬盘,如果只拷贝前面的部分,则会漏掉backup gpt table,出现下面的错误:
the backup gpt table is corrupt
小盘向大盘拷贝,使用parted命令查看硬盘时,会自动修复gpt备份表。
等大小的盘拷贝,parted不会自动修复,需要使用gdisk命令:
sudo gdisk /dev/sda
然后分别执行:x(专家模式) e(将gpt备份表写到硬盘尾部) w(写入到磁盘)y(yes)


查看UUID:
ls -l /dev/disk/by-uuid
blkid /dev/sda1

改变UUID:
tune2fs /dev/sdbX -U random

其他相关命令:
partprobe 通知内核分区表已经改变
dcfldd 直接支持一个盘到多个盘的拷贝
guymager 是将 dd 与 dcfldd 命令转换为图形化接口
PyFlag 是一个使用 python 语言编写的硬盘分析工具
partimage 分区备份压缩
rsync 数据镜像远程备份工具
ddrescue, gddrescue硬盘数据恢复工具


链接

2016-11-26 14:33:16 mao0514 阅读数 5169

一个去年的老本,500G硬盘,空间各种捉急,准备迁移到公司的台式机上,却发现Linux上迁移环境没有Windows下那么方便,只能复制整块硬盘了。

从公司拿了一块1T的硬盘,插入移动硬盘盒(淘宝上搞的一个移动硬盘盒,40元),加电识别,格式化,开始硬盘复制。

市面上针对数据备份的软件不计其数,我们不讨论他们的优缺点。但是如果你正在使用Linux(其实如果你没有使用Linux,而是通过一些 Linux live CD来启动计算机,我想也是一样的),那么恭喜你,你可以简单地使用系统命令“dd”来完成磁盘克隆,分区克隆或者磁盘或分区到磁盘镜像的复制。一般情况 下,这几个任务已经可以满足你日常工作的需要了。
先说明几个概念,在Linux上,一块硬盘或者一个分区都由一个目录表示,一般存在于系统根目录的/dev/之下。例如/dev/hda代表你的第一块 IDE硬盘,/dev/sdb代表第二块SCSI硬盘,/dev/fd0代表系统的软盘驱动器等等。同样每块硬盘上的分区也有独特的目录名,例如/dev /hda1表示你第一块硬盘上的第一个分区(至于这个分区上有什么东西在进行备份操作的时候并不重要)。

1. 磁盘克隆
也就是把整个硬盘复制一份。当然你首先需要在计算机上在接上一块新硬盘,并让系统识别。例如这块硬盘可能被识别为/dev/sdb,原有硬盘叫/dev/sda. 然后你可以在linux命令行上简单地执行:
dd if=/dev/sda of=/dev/sdb
对就这么简单,此命令完成后,你的第二块硬盘上将有一个和第一块硬盘一模一样的副本,也是可以启动的。因为dd操作就是简单的按字节复制,什么分区表啊,MBR啊统统照搬。
当然你也可以做一些微调,来定制一下克隆操作。例如你可能希望把硬盘上的内容全部备份到一个磁盘文件中,而不是另一块新硬盘,你可以
dd if=/dev/sda of=~/disk1.img
之后,disk1.img就是备份好的磁盘映像文件,你可以复制或转移到其他介质也可以压缩一下:
gzip disk1.img #generates disk1.img.gz
或者在创建磁盘映像文件的同时就执行压缩:
dd if=/dev/sda | gzip > disk.img.gz
dd if=/dev/sda | bzip2 > disk.img.bz2

不错吧!ghost的功能都有了。

2.分区克隆
如果我们不想克隆整块磁盘,只想把某些存放数据的分区备份一下,你会需要克隆一个分区。正如预备知识所述,分区在linux下也是一个文件。例如
dd if=/dev/sda1 of=~/part1.img
将把第一块磁盘的第一个分区备份到名为part1.img的文件中。
也可以进行分区复制:
dd if=/dev/hda1 of=/dev/hda3
将把分区一原样复制到分区3.

3. 从镜像文件恢复磁盘或分区
很简单,把上面命令中,of和if指向的文件名互换一下即可实现恢复。例如
dd if=disk1.img of=/dev/sda
把保存在disk1.img中的映像恢复到第一块磁盘
dd if=part1.img of=/dev/hda2
把保存在part1.img中的映像恢复到第一块硬盘的第二个分区

最后,需要注意一点是,无论备份还是恢复,都需要保证 of 指向的文件或磁盘空间要大于 if 指向的内容,因为是按字节复制 如果没有足够的空间去存储内容,备份自然会失败。

2015-12-22 10:00:04 a515983690 阅读数 348

要从服务器A上拷贝系统到服务器B

先最好把A上面的进程都关闭,我是直接把A重启了。

然后把B上的硬盘拆入服务器A中。  sda是A上原来的硬盘,sdc是B上拔下来的硬盘

执行命令:dd dd if=/dev/sda of=/dec/sdc

1T的大小,拷贝了将近6个小时,有点慢,可能东西有点多。

把硬盘sdc拔下插回服务器B中。

登录,修改/etc/hosts  , /etc/hostname , /etc/network/interface 修改内网IP和主机名。即可。



遇到的问题:由于NFS的问题开机启动不了。

解决:开启进入选择 ubuntu  recovery mode ,然后选择root 进入系统命令行。

修改/etc/fstab  。由于权限问题,所以要先执行  mount -o remount,rw /  来重新挂载根目录后就能写了。

把NFS的设置注释后 reboot 即可进入系统

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