设备文件zero与null
一、/dev/zero
在Linux系统中,/dev/zero 是一个特殊的设备文件,可以无显示的无限输入文件,当读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。这就代表zero可以作为一个无限写入硬盘的文件。关于设备文件基础知识,请见前面一篇文章《常用设备文件介绍》
常见有两种用法:
①用它提供的字符流来覆盖信息。
②用它产生一个特定大小的空白文件。
例如:BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。
示例:清空分区数据(请慎重使用!并且把重要数据备份到其它硬盘!)
# 请不要执行下列代码,除非你确信要清空分区上的全部数据!
dd if=/dev/zero of=/dev/<destinationpartition>
本机操作步骤如下(再次提醒:请不要在企业生产环境的系统中进行以下操作练习!避免造成数据丢失!):
##显示本机分区信息
[root@0xfffff~]# fdisk -l
Disk/dev/sda: 77.8 GB, 77860500992 bytes
255heads, 63 sectors/track, 9466 cylinders
Units= cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 650 5116702+ 83 Linux
/dev/sda3 651 3200 20482875 83 Linux
/dev/sda4 3201 9729 52444192+ 5 Extended
/dev/sda5 3201 5750 20482843+ 83 Linux
/dev/sda6 5751 7025 10241406 83 Linux
/dev/sda7 7026 8300 10241406 83 Linux
/dev/sda8 8301 8555 2048256 82 Linux swap / Solaris
/dev/sda9 8556 8810 2048256 83 Linux
/dev/sda10 8811 8872 497983+ b W95 FAT32
##查看分区挂载情况:
[root@0xfffff~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 4956316 558664 4141820 12% /
/dev/sda9 1984016 35988 1845616 2% /tmp
/dev/sda7 9920592 153820 9254704 2% /home
/dev/sda5 19840892 2156872 16659880 12% /usr
/dev/sda6 9920592 153940 9254584 2% /usr/local
/dev/sda3 19840924 229748 18587036 2% /var
/dev/sda1 101086 24746 71121 26% /boot
tmpfs 967188 0 967188 0% /dev/shm
##分区/dev/sda10没有挂载上目录,新建目录挂载
[root@0xfffff~]# mkdir /tmp/vfat32
[root@0xfffff~]# mount /dev/sda10 /tmp/vfat32/
##查看分区内文件信息,目录中有很多文件,备份出到其他目录
[root@0xfffff~]# ll /tmp/vfat32/
total18880
-rw-r--r--1 root root 69815 Dec 20 2010 config-2.6.18-238.el5
drwxr-xr-x2 root root 1024 Nov 13 12:46 grub
-rw-------1 root root 2632985 Nov 12 23:39initrd-2.6.18-238.el5.img
-rw-r--r--1 root root 3056744 Nov 12 23:50initrd-2.6.18-238.el5kdump.img
drwx------2 root root 12288 Nov 13 07:33lost+found
-rw-r--r--1 root root 112421 Dec 20 2010 symvers-2.6.18-238.el5.gz
-rw-r--r--1 root root 979708 Dec 20 2010 System.map-2.6.18-238.el5
-rw-r--r--1 root root 10485760 Nov 19 20:49 testing.img
-rw-r--r--1 root root 1888084 Dec 20 2010 vmlinuz-2.6.18-238.el5
##备份好分区中数据后,进行以下操作(慎重!)
[root@0xfffff~]# dd if=/dev/zero of=/dev/sda10
##再次查看分区数据
[root@0xfffff~]# ll /tmp/vfat32/
total0
##结果分区数据全部清空!
示例:创建一个空白文件
创建一个名为'goodbar'大小为1 MiB的文件,以"0"填充:
dd if=/dev/zero of=goodbar count=1024 bs=1024
[root@0xfffff ~]# ddif=/dev/zero of=goodbar count=1024 bs=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0150271seconds, 69.8 MB/s
[root@0xfffff ~]# llgoodbar
-rw-r--r-- 1 root root 1048576 Dec 13 21:20goodbar
[root@0xfffff ~]# filegoodbar
goodbar: data #goodbar文件显示为数据文件
二、输入与输出流
Linux有几种输入输出流,它们分别与几个数字有如下的对应关系:
0-标准输入流(stdin)
1-标准输出流(stdout)
2-标准错误流(stderr)
> 代表重定向到哪里
示例
[root@0xfffff ~]# echo"test123.com" > ~/test123.txt
[root@0xfffff ~]# cat test123.txt
test123.com
默认的重定向动作是针对stdout(1)的,比如”ls -l > result”就等价于”ls -l 1 > result”。
示例
[root@0xfffff~]# echo "hao123.com " 1>~/hao123.txt
[root@0xfffff~]# cat hao123.txt
hao123.com
”2>&1″的意思就是将stderr重定向至stdout,并一起在屏幕上显示出来。
三、/dev/null
在Linux系统中代表空设备文件,可以理解为windows下的垃圾桶。所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。
示例
[root@0xfffff ~]# cat hao123.txt>/dev/null # 文件内容不会输出到标准输出。
[root@0xfffff ~]#
[root@0xfffff ~]# cat ha123123.txt2>/dev/null #没有这文件,但是错误信息不会输出。 [root@0xfffff ~]#
四、测试服务器硬盘的读写性能
安装完linux系统,几个硬盘亦在RAID模式下,这时需要测试硬盘IO性能,那就可用/dev/zero和/dev/null及命令dd测试一下。一般这个测试记录是在服务器开始部署与后期性能优化方面重要的参考依据!并且会记录存档的。
示例
①测试纯写速度,通过dd命令将/dev/zero中的无限0x00写到文件中。
##在/var目录下创建一个test文件
[root@0xfffff ~]# cd /var
[root@0xfffff var]# touch test
[root@0xfffff var]#time dd if=/dev/zero of=/var/test bs=2k count=1000000
下图结果:写速每秒44.4M,2G用了46秒
②再来测试纯读速度,我们还是利用dd命令
[root@0xfffff var]# time dd if=/var/test of=/dev/null bs=2k count=1000000
下图结果:读速为每秒68MB,2G用了30秒。
③再来测试读写速度,在/usr下创建一个test1文件,用dd命令往/usr/test1中写入/var/test中的数据。
下图结果:读写速度为每秒17.3MB,2G用了58.6秒
这个测试数据的信息量可逐步不断加大(依据服务器的用途),新服务器一般都会记录保存,便于在后期运维过程的比对。
典故:以前在职于XXX公司,来一批服务器(9台),同样的系统和安装方式(无人值守安装),硬件标配说明一样!我的前辈们发现其中两台的测试数据相差太多,把服务器换货后,测试正常!