dd持续写入 linux

2012-12-12 09:24:59 catoop 阅读数 1542
Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置。当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
Linux中的所有命令(包括函数)都是采用的系统时钟设置。在Linux中,用于时钟查看和设置的命令主要有date、hwclock。
1、date
名称 : date
使用权限 : 所有使用者
使用方式 :
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 :
date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
时间方面 :
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00-23)
%I : 小时(01-12)
%k : 小时(0-23)
%l : 小时(1-12)
%M : 分钟(00-59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00-60)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun-Sat)
%A : 星期几 (Sunday-Saturday)
%b : 月份 (Jan-Dec)
%B : 月份 (January-December)
%c : 直接显示日期与时间
%d : 日 (01-31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001-366)
%m : 月份 (01-12)
%U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0-6)
%W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000-9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数
参数 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行,再
显示目前日期: #date '+%T%n%D'
显示月份与日数: date '+%B %d'
显示日期与设定时间(12:34:56): #date --date '12:34:56'
注意 :当你不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。
当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
例子:修改日期时间
在命令行输入:
Date:显示当前时间 Fri Aug 3 14:15:16 CST 2007
date –s:按字符串方式修改时间
可以只修改日期,不修改时间,输入: date -s 2007-08-03
只修改时间,输入:date -s 14:15:00
同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:
#date -s "2007-08-03 14:15:00"
2、查看硬件时间
# hwclock
设置硬件时间
# hwclock -set -date="07/07/06 10:19" (月/日/年 时:分:秒)
3、硬件时间和系统时间的同步
按照前面的说法,重新启动系统,硬件时间会读取系统时间,实现同步,但是在不重新启动的时候,需要用hwclock命令实现同步。
硬件时钟与系统时钟同步:
# hwclock --hctosys(hc代表硬件时间,sys代表系统时间)
系统时钟和硬件时钟同步:(让系统的时间同步到硬件时钟)
# hwclock –systohc
2017-04-04 10:17:55 master5512 阅读数 55036

首先在 Linux 系统中打开终端,确认 U 盘路径:

sudo fdisk -l

格式化 U 盘,为了格式化首先需要 umount U 盘:
/dev/sdb 是我的 U 盘设备。

sudo umount /dev/sdb*

格式化 U 盘:

sudo mkfs.vfat /dev/sdb -I

使用 dd 命令,格式如下:

sudo dd if=xxx.iso of=U盘路径

完整示例:

sudo dd if=~/images/ubuntu.iso of=/dev/sdb

向 sdb 磁盘写入位于~/images目录下的 ubuntu.iso 镜像文件 输完上述DD命令后回车执行,系统就开始制作启动盘了,期间终端命令窗口不会有任何反馈,但能通过U盘运行指示灯看到U盘在进行读写操作,这个过程可能持续5、6分钟才完成。当看到终端命令窗口有返回消息即制作完成。

2019-07-15 16:32:00 weixin_30652897 阅读数 27

  在LInux系统的使用过程中,有时候会遇到诸如某个磁盘分区的大小不够用了,导致其下的文件系统不能正常写入数据。亦或者是系统swap分区太小,不够用或者不满足条件而导致的其他一系列问题。如果我们系统上挂载的有富余的磁盘空间,这样就简单多了,直接在现成的磁盘上划出一个分区,格式化并挂载就完事了。但是也有些时候限于条件,没有富余的磁盘空间,怎么办的呢?我们可以在现有的系统中,看看有没有其他分区的空间比较大,并且分出去一部分后,仍然不影响改分区系统的正常使用。如果存在这种情况,就可以实现间接的扩展磁盘空间了。

  1,我们需要先在有富余空间的磁盘分区上创建一个大文件,文件的大小根据你的实际需要和所要划出空间分区实际大小来决定。创建大文件,可以使用如下3个命令:

    1.1 dd

      创建大文件首选的会是dd命令,dd是 device driver 的缩写,可以用来读取设备、文件中的内容,并原封不动地复制到指定位置。因此dd本质上是copy一个文件副本,

    它强制你编写每个数据块,并初始化文件内容,但是初始化会占用大量的I / O时间,因此使用dd命令创建大文件的速度是比较缓慢的。使用dd创建大文件的命令如下:

      dd if=/dev/zero of=/home/disk0 bs=2G count=1

    这个命令将在/home根目录下创建一个名为disk0的空文件,其中用到了如下四个选项:

      if=文件名:指定输入文件名或者设备名,如果省略“if=文件名”,则表示从标准输入读取。

      of=文件名:指定输出文件名或者设备名,如果省略“of=文件名”,则表示写到标准输出。

      bs:指定单个文件的块block大小。

      count:想要创建文件的个数。

    1.2 fallocate

      fallocate的功能是为文件预分配物理空间,而不是生成一个空洞文件,fallocate分配的空间在磁盘的扇区上是连续的,它减少后续写入和读取文件时的磁盘寻道开销;

    并且是迅速直接占用空间,而不是想空洞文件那样“假装”战=占有那么多空间,这样就可以保证随着磁盘空间的使用,而不会出现该段磁盘空间不足。由于fallocate

    并不是标准的posix接口,并不是所有的文件系统都是支持的,目前主流的ext4和xfs都是可以的。

      fallocate -l 20G /home/disk00

      -l:--length,指定分配文件的长度,即文件的大小;

      disk00:所分配文件名称

    1.3 truncate

      truncate和lseek是将文件的末尾位置“扩展到”一个固定位置而生成的一个空洞文件,也即是稀疏文件。该文件并不占用实际磁盘空间,只是逻辑上看起来那么大而已。

    使用ls -l命令可以查看其逻辑大小,即你希望分配的大小。使用du命令可以看到其实际占用的磁盘空间大小。使用od -c命令可以看到文件中间是用“\0”填充的。

      truncate -s 10G /home/disk000

      -s:指定文件的大小

  2,将第一步中得到的大文件进行格式化并挂载到文件系统

    由上述可知,如果所要分配的文件大小不大,比如2G以下,我们可以优选dd命令,当文件大小非常大时,就可以使用fallocate了,由于truncate命令生成的文件并不是看起

  来那么大,如果非必要,我们还是尽量不选它。

    比如我们使用dd或者fallocate创建一个1G大小的文件:
    dd -if=/dev/zero of=/home/disk00 bs=1024 count=1000000

    fallocate -l 1G /home/disk00

    2.1 扩展一般的文件系统空间

      2.1.1 格式化

      以格式化为ext4文件系统为例

      mkfs.ext4 /home/disk00       ----执行该命令后,系统会提示“disk00 is not a block special device”,直接输入“y”确认继续就行。

      2.1.2 挂载到文件系统

      由于disk00并不是一个block device,所以挂载到文件系统时并不能像普通磁盘分区、格式化后那样直接挂在,我们需要用到loop伪设备。在执行loop挂载前,我们需要

    确认系统中有哪些loopback设备,并且那些是已经被使用的。

      确认系统中有那些loopback设备:

        ls -l /dev/loop*

      确认那些loopback是已经被使用的:

        cat /proc/mount

      确认上述两个事项后,就可以执行如下挂在命令:

        mount -o loop=/dev/loop0 /home/disk00 /opt/backup_DB

        -o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统

      2.1.3 将挂载关系写入/etc/fstab,防止系统重启后挂载关系丢失。

        echo "/home/disk00 /opt/backup_DB ext4 defaults,loop 0 0" >> /etc/fstab

    2.2 挂载交换分区

      2.2.1 格式化,将其变成一个swap文件

        mkswap /home/disk00

      2.2.2 启用这个swap文件

        swapon /home/disk00

      2.2.3 写入/etc/fstab,在系统重启时能够自动挂载

        echo "/home/disk00 swap swap defaults 0 0" >> /etc/fstab

  3,操作实例

    下面以我一个项目中的实际操作为例进行说明:

    我们的MySQL数据库安装在/home分区下,该分区大小为3.5T,由于我们没有外挂磁阵,也没有独立的备份服务器,所以只能将数据库的备份存放在本地,遵循备份和原始

  数据不能放在同一分区,我们把备份放在了/opt分区,该分区大小为50G。我们库目前大小为12G,每天产生的数据量为350-400M之间,每两周数据总量大致增加1G。备份策

  略是每周一全备,然后周二到周日都是基于周一的全备进行增量(这样的目的是恢复时方便)。备份的保留策略是全备保留3周,之前的全备进行删除;每周的增量在下一周一

  全备前打包压缩转移到/home/old_DB_backup下。由于数据量不断增多,大概到每周的周六时/opt的占用量就已经达到接近90%了,所以我们考虑将/opt下暂时存放增量备份的

  目录进行单独挂载一个分区进行扩容,减轻/opt分区的空间压力,方案操作如下:

    3.1 由于/home分区的目录非常大,所以选取/home分区做为分割对象。考虑到后续数据量增加,给予30G空间扩展:

      fallocate -l 30G /home/old_DB_backup/backup_disk/disk0_in

    3.2 我们的文件系统为ext4,所以将改数据文件格式化为ext4

      mkfs.ext4 /home/old_DB_backup/backup_disk/disk0_in

    3.3 挂载到待增加独立空间的增量备份目录

      mount -o loop=/dev/loop0 /home/old_DB_backup/backup_disk/disk0_in /opt/DB_backup/incremental_backup

    3.4 挂载关系写入/etc/fstab

      echo "/home/old_DB_backup/backup_disk/disk0_in /opt/DB_backup/incremental_backup ext4 defaults,loop, 0 0" >> /etc/fstab

转载于:https://www.cnblogs.com/Clonglegs/p/11189714.html

2015-08-28 12:16:55 g975291783 阅读数 8155


在windowns中制作U盘启动盘的方法大家应该都知道,那就是使用UltraISO(软碟通)。使用方法很简单,也很方便。


在linux系统中制作U盘启动盘就不需要额外安装软件了,只需要使用 cat 或者 dd 命令,就可以了!


制作启动盘之前需要先确定U盘的位置,使用命令:sudo fdisk -l

一般电脑只有一块硬盘的话,那么U盘的位置一般就是 /dev/sdb


方法1:使用cat命令

cat 读取文件输出到屏幕(标准输出),使用这个cat命令+linux系统的重定向,就可以将ISO文件内容写入到U盘了。

格式:

sudo cat ./Downloads/kali-2.0.iso > /dev/sdb


方法2:使用dd命令

dd 转换文件格式并拷贝文件。这个命令可以将一个输入文件的格式进行转换,然后将转换后的文件拷贝到制定位置。

只是制作启动盘的话,并不需要转换格式,所以这个命令用起来也很简单。

常用参数:

if=输入文件

of=输出文件

bs=每次拷贝文件块的大小,一般可以使用2M或者4M,数字越大,拷贝速度越快,但是受到U盘写速的限制。

所以这个命令用起来是这样的,格式:

sudo dd if=./Downloads/kali-2.0.iso of=/dev/sdb bs=2M


在windows中使用UltraISO制作启动盘的时候,会有进度条显示进度,但是在linux默认不能显示进度,所以如果镜像很大的话,会感到很无力有木有~


在linux可以这么做:

再开一个终端,然后使用下面的任意一条命令

1:

watch -n 5 pkill -USR1 ^dd$
2:

watch -n 5 killall -USR1 dd
3:

while killall -USR1 dd; do sleep 5; done
4:

while (ps auxww |grep " dd " |grep -v grep |awk '{print $2}' |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done

然后在dd命令的终端中就会看到复制的进度,包括已复制大小,持续时间,写入速度


参考地址:

http://blog.csdn.net/longerzone/article/details/12941727

http://www.dbainfo.net/show-progress-of-dd-command.htm



2016-12-14 14:19:47 csdnDAO 阅读数 2375
开发过程中会经常使用基于虚拟机技术的虚拟服务器来进行环境搭建和程序调试,由于虚拟服务器的底层磁盘是建立在分布式文件系统之上的,如果分布式文件系统或磁盘硬件出现故障,会直接影响集群的运行速度和稳定性。所以,测试系统磁盘的读写性能就成为了系统环境准备和验证的一个重要环节。

测试原理:
使用Linux命令向磁盘中写入1G测试数据,记录写入数据的时间及每秒的平均写入数据量,根据这两个数据对服务器进行横向比较。

测试硬盘纯粹写入的命令为:
time dd if=/dev/zero of=/test.dbf bs=64k count=16k
这条命令会在磁盘根目录创建一个名为test.dbf的文件,并持续向文件中写入数据,写入完成后会通过time命令计算总的写入时间,以及每秒写入的数据量。

试硬盘纯粹读的命令为:
time dd if=/test.dbf of=/dev/null bs=64k count=16k
这条命令会从test.dbf文件中读取数据,并将数据写入/dev/null,并不产生磁盘写操作,所以测试结果可以视为纯粹读取所消耗的时间。
测试结果如下:
记录了2048+0 的读入
记录了2048+0 的写出
134217728字节(134 MB)已复制,6.92152 秒,19.4 MB/秒
记录了2048+0 的读入
记录了2048+0 的写出
134217728字节(134 MB)已复制,0.0453842 秒,3.0 GB/秒