栏目头部广告

DD命令压测、备份与还原磁盘一文详解

一、DD命令介绍

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

参数说明:

  • if=文件名:输入文件名,默认为标准输入。即指定源文件。
  • of=文件名:输出文件名,默认为标准输出。即指定目的文件。
  • ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
  • obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
  • bs=bytes:同时设置读入/输出的块大小为bytes个字节。
  • cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
  • skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
  • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
  • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  • conv=<关键字>

convfdatasync系统决定何时写入data
fsync系统决定何时写入meta+data
flag(分为 iflag(读模式) 和 oflag(写模式))dsync每接收到一次 IO, 就写一次data
sync(跳过hdd缓存)每接收到一次 IO, 就写一次meta+data
direct(跳过内存缓存)绕过系统高速缓存, 系统决定落盘

1.1 /dev/zero

/dev/zero,是一个输入设备,可用它来初始化文件。该设备无穷尽地提供0,可以使用任何需要的数目,因此可以用来测试纯写速度

1.2 /dev/null

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。可以用来测试纯读速度

二、磁盘读写测试

2.1 测试磁盘写能力

[root@10-60-24-95 ~]# time dd if=/dev/zero of=/data/testw.dbf bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 16.6643 s, 246 MB/s

real	0m16.691s
user	0m0.085s
sys	0m1.891s

2.2 测试磁盘的读能力

[root@10-60-24-95 ~]# time dd if=/dev/vdb of=/dev/null bs=4k count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 2.53905 s, 161 MB/s

real	0m2.540s
user	0m0.008s
sys	0m0.159s

2.3 测试磁盘同时读写能力

[root@10-60-24-95 ~]# time dd if=/dev/vdb of=/testrw.dbf bs=4k count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 4.69953 s, 87.2 MB/s

real	0m4.767s
user	0m0.011s
sys	0m0.397s

2.4 测试纯写入性能

[root@10-60-24-95 ~]# cd /data/
[root@10-60-24-95 data]# dd if=/dev/zero of=testw bs=8k count=10000 oflag=direct
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 3.07226 s, 26.7 MB/s

2.5 测试纯读取性能

# 创造一个2G的可读文件
[root@10-60-24-95 data]# dd if=/dev/zero of=testr bs=10M count=200
200+0 records in
200+0 records out
2097152000 bytes (2.1 GB) copied, 2.88613 s, 727 MB/s

# 测试纯读速度
[root@10-60-24-95 data]# dd if=testr of=/dev/null bs=8k count=10000 iflag=direct
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 3.07104 s, 26.7 MB/s

三、磁盘备份与恢复

3.1 备份整块磁盘

注:备份系统vda1到vdb磁盘。

[root@10-60-24-95 ~]# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  20G  0 disk /data
vda    253:0    0  20G  0 disk 
└─vda1 253:1    0  20G  0 part /
[root@10-60-24-95 ~]# dd if=/dev/vda of=/data/vda-backup.disk
41943040+0 records in
41943040+0 records out
21474836480 bytes (21 GB) copied, 157.193 s, 137 MB/s

[root@10-60-24-95 ~]# ll -h /data/
total 20G
-rw-r--r-- 1 root root 20G Jul 13 15:09 vda-backup.disk

3.2 挂载查看dd备份的文件

(1)新建挂载点

[root@10-60-63-128 ~]# mkdir /mnt/backup

(2)计算偏移量

[root@10-60-63-128 ~]# fdisk -l -u -C 1 /data/vda-backup.disk

Disk /data/vda-backup.disk: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000acb44

                Device Boot      Start         End      Blocks   Id  System
/data/vda-backup.disk1   *        2048    41943039    20970496   83  Linux

image.png

注:偏移量为2048*512=1048576

(3)挂载copy数据

# 数据copy到中转机
[root@10-60-24-95 ~]# scp /data/vda-backup.disk root@10.60.63.128


# 首次挂载报错坏块
[root@10-60-63-128 ~]# mount -o loop,offset=1048576 /data/vda-backup.disk /mnt/backup
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
       
# 修复磁盘
[root@10-60-63-128 ~]# yum install xfsprogs-devel -y
[root@10-60-63-128 ~]# xfs_repair /data/vda-backup.disk 

[root@10-60-63-128 ~]#  mount -o loop,offset=1048576 /data/vda-backup.disk /mnt/backup
mount: mount /dev/loop0 on /mnt/backup failed: Structure needs cleaning

[root@10-60-63-128 ~]# xfs_repair -L /dev/loop0
Phase 1 - find and verify superblock...
superblock read failed, offset 0, size 524288, ag 0, rval 0

fatal error -- Success

# 再次执行挂载
[root@10-60-24-95 ~]# mount -o loop,offset=1048576 /data/vda-backup.disk /mnt/backup

[root@10-60-63-128 ~]# ll /mnt/backup/
total 440016
lrwxrwxrwx.  1 root root         7 May 25  2019 bin -> usr/bin
dr-xr-xr-x.  5 root root      4096 Jul 13 14:32 boot
drwxr-xr-x.  2 root root         6 May 25  2019 data
drwxr-xr-x.  2 root root         6 May 25  2019 dev
drwxr-xr-x. 83 root root      8192 Jul 13 14:32 etc
drwxr-xr-x.  2 root root         6 Apr 11  2018 home
lrwxrwxrwx.  1 root root         7 May 25  2019 lib -> usr/lib
lrwxrwxrwx.  1 root root         9 May 25  2019 lib64 -> usr/lib64
drwxr-xr-x.  2 root root         6 Apr 11  2018 media
drwxr-xr-x.  2 root root         6 Apr 11  2018 mnt
drwxr-xr-x.  2 root root         6 May 29  2019 opt
drwxr-xr-x.  2 root root         6 May 25  2019 proc
dr-xr-x---.  7 root root       201 Jul 13 14:49 root
drwxr-xr-x.  2 root root         6 May 25  2019 run
lrwxrwxrwx.  1 root root         8 May 25  2019 sbin -> usr/sbin
drwxr-xr-x.  2 root root         6 Apr 11  2018 srv
drwxr-xr-x.  2 root root         6 May 25  2019 sys
-rw-r--r--   1 root root  40960000 Jul 13 14:41 test.dbf
-rw-r--r--   1 root root 409600000 Jul 13 14:47 testrw.dbf
drwxrwxrwt.  8 root root       188 Jul 13 15:06 tmp
drwxr-xr-x. 13 root root       155 May 25  2019 usr
drwxr-xr-x. 20 root root       282 May 25  2019 var

作者:UStarGao
链接:https://www.starcto.com/storage_scheme/299.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

加载中~
文章详情页广告

随便看看

底部广告
`