ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
使用dd这个linux命令可以创建一定大小文件。 ### 常用参数 if =输入文件(或设备名称)。 of =输出文件(或设备名称)。 ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。 skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。 seek = blocks 跳过写入缓冲区开头的obs*blocks块。 bs = bytes 同时设置读/写缓冲区的字节数(等于设置obs和obs)。 ## 实例: ### 1 创建一个100M的空文件 ``` dd if=/dev/zero of=hello.txt bs=100M count=1 ``` ### 2 数据备份与恢复 #### 2.1 整盘数据备份与恢复 将本地的/dev/hdx整盘备份到/dev/hdy ``` dd if=/dev/hdx of=/dev/hdy ``` #### 2.2 将/dev/hdx全盘数据备份到指定路径的image文件: ``` dd if=/dev/hdx of=/path/to/image ``` #### 2.3 将备份文件恢复到指定盘: ``` dd if=/path/to/image of=/dev/hdx ``` #### 2.4 备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径 ``` dd if=/dev/hdx | gzip > /path/to/image.gz ``` 将压缩的备份文件恢复到指定盘 ``` gzip -dc /path/to/image.gz | dd of=/dev/hdx ``` ### 3 利用netcat远程备份 在源主机上执行此命令备份/dev/hda ``` dd if=/dev/sdb1 | nc -l 1234 ``` 在目的主机上执行此命令来接收数据并写入/dev/hdc: ``` nc 127.0.0.1 1234 | dd of=/dev/sdb ``` ### 4 备份MBR #### 4.1 备份: 备份磁盘开始的512Byte大小的MBR信息到指定文件: ``` dd if=/dev/hdx of=/path/to/image count=1 bs=512 ``` #### 4.2 恢复: 将备份的MBR信息写到磁盘开始部分: ``` dd if=/path/to/image of=/dev/hdx ``` #### 5 增加Swap分区文件大小 创建一个足够大的文件(此处为256M): ``` dd if=/dev/zero of=/swapfile bs=1024 count=262144 ``` 把这个文件变成swap文件: ``` mkswap /swapfile ``` 启用这个swap文件: ``` swapon /swapfile ``` 在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行: ``` /swapfile swap swap defaults 0 0 ``` ### 6 磁盘管理 #### 6.1 得到最恰当的block size 通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小: ``` 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 ``` #### 6.2 测试硬盘读写速度 通过两个命令输出的执行时间,可以计算出测试硬盘的读/写速度: ``` dd if=/root/1Gb.file bs=64k | dd of=/dev/null dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000 ``` #### 6.3 修复硬盘 当硬盘较长时间(比如一两年年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。下面的命令有可能使这些数据起死回生。且这个过程是安全,高效的。 ``` dd if=/dev/sda of=/dev/sda ``` #### 6.4 销毁磁盘数据 利用随机的数据填充硬盘: ``` dd if=/dev/urandom of=/dev/hda1 ``` 在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。 ### 文件切割与合并 要切割的大文件为DGJD,共98336321字节,则: ``` dd if=dgjd of=zz1 bs=1 count=20000000 dd if=dgjd of=zz2 bs=1 count=20000000 skip=20000000 dd if=dgjd of=zz3 bs=1 count=20000000 skip=40000000 dd if=dgjd of=zz4 bs=1 count=20000000 skip=60000000 dd if=dgjd of=zz5 bs=1 count=18336321 skip=80000000 ``` 其中IF(INPUT FILENAME)是要切割的大文件名,OF(OUTPUTFILENAME)是切割后的子文件名,BS是指明以多少字节作为一个切割记录单位,COUNT是要切割的单位记录数,SKIP是说明切割时的起点,单位同样以BS设定值为准。通过上述五条指令就将DGJD大文件切割成为4个2千万字节、1个18336321字节的子文件。要注意的是SKIP的值不能错。由此也不难看出,DD切割是“非损耗”式的切割,并且支持从任意位置开始的任意大小的切割。 要将生成的ZZ1、ZZ2、ZZ3、ZZ4四个子文件组装为XDGJD,则: ``` dd if=zz1 of=xdgjd bs=1 count=20000000 dd if=zz2 of=xdgjd bs=1 count=20000000 seek=20000000 dd if=zz3 of=xdgjd bs=1 count=20000000 seek=40000000 dd if=zz4 of=xdgjd bs=1 count=20000000 seek=60000000 dd if=zz5 of=xdgjd bs=1 count=18336321 seek=80000000 ``` 其中SKIP参数改为SEEK参数,指明组装的新大文件XDGJD每次的开始位置是从文件头开始多少字节。如果缺省,则组装从文件头开始,显然这不是我们每次都希望的,所以需用SEEK参数明确指出开始位置。通过以上5个指令,即可将5个子文件重新组装为一个大文件。将切割后生成的子文件重新用FTP传送,结果有的能够顺利传送,有的仍然导致网络瘫痪,不怕,继续切割,切成每个一千万字节,再传,OK!成功传送!