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=<关键字>
conv | fdatasync | 系统决定何时写入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
注:偏移量为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云平台推荐
随便看看
- 2021-02-28Linux账户风险和安全策略
- 2021-04-16MySQL innodb_buffer_pool_size参数优化
- 2022-05-27MongoDB慢查询日志之Profiling配置
- 2022-09-15MySQL自增ID相关设置
- 2022-07-13极简了解Ceph存储架构