




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
存储是系统的最底层,非常重要,如何选择最合适自己存储呢?梳理下知识点,以备后用 1. 存储应用的场景,了解自己的应用需求、预算及数据使用特点 2. 了解存储的相关知识 3. 选择存储应注意的要素 4. 存储的使用和维护1. 存储应用的场景,了解自己的应用需求、预算及数据使用特点要清楚存储是应用在OLAP还是OLTP?对存储的性能,安全性要求如何?预算是多少?预计未来2-5年的业务增长趋势?中端存储可以提供高响应速度,在磁盘数量相同的条件下,不会比高端存储差多远(但高端存储的扩展能力,可靠性非常强)2.了解存储的相关知识磁盘: 一个IO的访问,大致分为三个步骤,第一是磁头到指定的磁道(寻道),第二是等待需要读取的数据随盘片旋转到磁头(延迟),第三是读取数据。相比较前两个时间,读取数据的时间可以忽略不计,所以一个IO的响应时间等于寻道时间+延迟时间决定(ssd固态硬盘除外,它的存储方式不一样),寻道时间由于是机械的动作,所以很难得到大幅度提高,但是可以通过提高磁盘转速来提高延迟时间。所以转速越高的盘,可以承载更多的IOPS。磁盘的IOPS由磁盘的转速决定,比如15000RPM的磁盘,一般可以承受150个IOPS。和存储相关的三个性能参数:IOPS,吞吐量,响应时间吞吐量: 吞吐量,则由磁盘的转速和接口决定,转速决定了内部传输率,接口则决定了外部传输率,很明显前者肯定低于后者。常见的接口有ATA,SCCI,SATA,SAS,FC等等。FC接口一般在高端存储中比较常见,而SAS和SATA多在服务器或者中低端存储中常见。 影响吞吐量的因素稍微复杂些,由磁盘的数量和存储的架构决定,当磁盘到达一定的数量后,吞吐量主要受限于存储的架构。比如某高端存储,吞吐量最大就是 1.4GB,这是由它内部的架构所决定的。另外还要注意存储与主机的接口,比如HBA卡,有4Gb和2Gb(这里是bit,而不是Byte),一般主机和存储都配有多块HBA卡IOPS: 对于一个存储系统来说,IOPS主要决定于cache的算法,以及磁盘的数量。有时候我们往往会被厂商的数据给忽悠了,第一是cache命中率,厂商利用了某种手段,让cache命中率非常高,IOPS几乎可以随心所欲。另外一个因素就是磁盘的数量,厂家的数据是同型号1000块磁盘的测试结果,而实际的系统只有几十或者几百块磁盘。 购买存储时,应该避免买高端的存储,而只配数量很少的磁盘,厂商非常喜欢你买一个高端的BOX,告诉你扩展性好,现在用不着可以少买点盘,以后可以扩容等等,这完全是忽悠。建议不要超前消费,如果确实对性能追求很高,可以选用容量小一些的磁盘,而磁盘的数量多一些。磁盘的数量可以计算得出,我们的经验,一般OLTP应用的cache命中率在20%左右,剩下的IO还是要到磁盘上的,根据磁盘的转速和类型,就可以知道一块盘能够承载的IOPS,磁盘数量就可以估算出来了,为了得到比较好的响应时间,建议每块磁盘的IOPS不要超过100。响应时间: 除了IOPS与吞吐量,存储的另外一个重要性能指标就是单io的响应时间,单io的响应时间与IOPS的当前值,吞吐量大小及cache命中率都有密切的关系,经验值表示,一个io的响应时间在20ms以后,应用基本可以正常工作,但对于高可用的核心OLTP系统,最佳的IO时间是小10ms。Stripe: Stripe的作用就是尽可能的分散IO,它在有些存储上是可以调节的,但是很多存储是不可以调节的,一般在128K-512K之间。有一个错误的说法是,我在存储上做了stripe,数据库的一个IO,所有的磁盘都会响应这个IO。这个说法是错误的,对于Oracle来说,一个随机IO的大小是8K,一般条带的大小要比8K大得多,所以Oracle一个随机IO永远只会落在一块磁盘上。一块磁盘在同一个时刻只能响应一个IO,也就是说磁盘没有并发IO的概念,但是从整个系统来看,不同的磁盘响应不同的IO,宏观上IO还是分散的,所以我们看到一个数据库在运行时,所有的磁盘都在忙,实际上每块磁盘是为不同的 IO服务。对于顺序IO,Oracle的默认设置是128K,最大值由OS决定,一般是1M,如果顺序IO的大小大于stripe,那么一个IO可能会有几块盘同时响应,但是很多存储的stripe都大于128K,这时一个IO还是只有一块磁盘响应,由于读是一个顺序的过程(在不同的multiblock read之间,存在一定程度的并行。Oracle每次同时向OS发送若干个multiblock read IO请求,然后把返回的结果合并排序。整个scattered read应该是局部并行,宏观串行的过程),所以要在数据库这个级别加上并发,才可以真正达到提高吞吐量的目的。 有人要问,stripe到底多大合适?假设把stripe做得很小,这样不是很好吗?一个IO同时可以读很多块盘,大大提高了吞吐量。我们假设stripe为1K,Oracle一个IO要分布在8块不同的磁盘上,但是这时新的问题就出现了,因为一块磁盘是不具备并发IO能力的,如果每个IO都占用很多块盘,这样整个系统的并发IO能力就下降了,而且一个8K的IO如果在一块盘上读,和从8块盘上并行读,不会有很大的差别(也许在一块盘上读还要更快),所以stripe不能做的很小。stripe到底设多大,我的观点是大比小好,不要小于256K,数据仓库应用可以设置的更大一些。ASM对于数据文件的stripe默认是1M,不要设置太小,经验表明,1M的性能更好,Oracle也推荐用1M。这说明对于数据库应用来说,stripe size要稍微大一点,而不是我们想的越细或者越分散越好。Raid: RAID一般比较常见的就是RAID10和RAID5,对性能要求比较高的数据库应用一般都采用RAID10,RAID5也可以用,但是别把redo放在 RAID5上,因为RAID5的对于redo这种小IO,性能非常差,很容易造成log file sync的等待。一个RAID group中的磁盘数量不宜过多,不要超过10块,原因是RAID group中磁盘数量越多,坏盘的概率就越大(概率问题)。一些高端存储对于RAID group中的磁盘数量都是固定的,这主要和存储的架构有关。使用存储的过程中,你会发现,越是高端的东西,就越是死板,而中低端存储则非常灵活,并不是说高端存储不好,而是说架构决定一切。存储划分 划分好的LUN输出到主机后,我们怎么用?这个就比较灵活多变,首先要看我们的用途,我们是追求IOPS还是吞吐量?我们用file system,raw devices,ASM?存储输出的LUN跨在多少块盘上?一般的存储没有虚拟化功能,则输出的LUN只跨在一个RAID group上,这时往往需要利用OS上的LVM来再次划分一次,比如有两个raid group,每个RAID goup有四块磁盘,建立两个LUN,输出到主机后,然后分别创建两个VG,再创建LV(stripe),这下每个LV就完全跨在了所有的磁盘上。实际中考虑的问题要更多,有时候不仅仅要考虑磁盘,还要考虑将负载分配在不同的控制器,前端卡后端卡和多路径的问题,相当复杂。有些存储本身有虚拟化的功能,甚至可以输出一个LUN,比如3PAR就可以输出一个虚拟卷,这个卷已经跨在所有的磁盘上,我们直接使用就可以了(但实际工作中这么使用的比较少见)。Oracle 有了ASM,问题就更加复杂了,我的建议是如果可以的话,存储只做RAID1,stripe交给ASM去做。如果有些存储必须要做stripe,也没问题。存储划分是一个很有技术含量的工作,必须建立在对存储,主机和数据库深入了解的基础上,才有可能做出一个好的规划。3. 选择存储应注意的要素1选择32位或64位的RISC CPU还是普通的Intel 586 CPU?服务器的结构已由传统的I/O结构改为I2O结构,其目的就是为了减少服务器中CPU的负担,将系统的I/O与服务器CPU负载分开。 I2O是由一 颗RISC CPU来负责I/O的工作。服务器上都已用RISC CPU,磁盘阵列上当然也必须用RISC CPU才不会形成瓶颈。另外,我们现在常用的网络操作系统大都是32位或64位的,当操作 系统已由32位转到64位时,磁盘阵列上的CPU必须是RISC CPU才能满足要求。2磁盘阵列内的硬盘是否有顺序要求?也就是说,硬盘是否可以不按原先的次序插回阵列中, 而数据仍能正常存取?很多人都想当然地认为根本不应该有顺序要求,其实不然。我们曾用过一个阵列,其必须按照原来的次序才能正常存取数据。现在假设这样一种情况,我们准备 清理一下硬盘阵列,把所有硬盘都放在一起,结果记不住顺序了,为了正常存取数据,我们 只有一个个地试,而对于有8块硬盘的阵列来说,最坏的情况要试88次才行。现在已出现 了磁盘阵列产品具有不要求硬盘顺序的功能,为了防止上述事件发生,应选择对顺序没有要 求的阵列。3是硬件磁盘阵列还是软件磁盘阵列?软件磁盘阵列指的是用一块SCSI卡与磁盘连接,硬件磁盘阵列指的是阵列柜中具有背板的阵列,它与软件磁盘阵列的区别很大。硬件磁盘阵列是一个完整的磁盘阵列系统与系统相接,内置CPU,与主机并行动作,所有的I/O都在磁盘阵列中完成,减轻主机的负担,增加系统整体性能,有SCSI总线主控与DMA通道,以加速数据的存取与传输。而软件磁盘阵列是一个程序,在主机上执行,通过一块SCSI卡与磁盘相接形成阵列,其最大的缺点是大大增加了主机的负担,对于大量输入输出的系统,很容易使系统瘫痪。显然,应尽量选择硬件磁盘阵列。4是IDE磁盘阵列还是SCSI磁盘阵列?最近市场上出现了IDE磁盘阵列,它们的速度挺快,如增强型IDE在PCI总线下的传输速率可达66MB/s,价格与SCSI磁盘阵列相比要便宜得多; 而SCSI Ultra3速率接近160MB/s。但从实际应用情况来看,在单任务时,IDE磁盘阵列比 SCSI磁盘阵列快;在多任务时,SCSI磁盘阵列比IDE磁盘阵列要快得多。但IDE磁盘阵列 有一个致命的缺点:不能带电热插拔。这个缺点使IDE磁盘阵列命中注定只能使用于非重要 场合。如果您的应用不能停机,则一定要选择SCSI磁盘阵列。5是单控制器还是冗余控制器? 磁盘阵列一般都是以一个控制器连接主机及磁盘,在磁盘阵列的容错功能下达到数据的 完整性。但磁盘阵列控制器同样会发生故障,在此情况之下,数据就有可能丢失。为了解决 此问题,可以把两个控制器用缆线连接起来,相互备份。但两个独立控制器在机箱内的连接 意味着一旦出现故障必须打开机箱换控制器,即必须停机,这在很多应用中根本就不可能, 所以,我们应该选择热插拔双控制冗余的架构。现在有些磁盘阵列新产品上利用快取内存和 内存镜像的方式,以保证在出现故障时不丢失数据,且在控制器更换后,自动恢复故障前的 工作设置,把工作负荷分散给相互备份的控制器,以达到负载均衡,这种架构能提供单控制 器所达不到的高性能及高安全性。当然如果你对安全要求更高,可以选择多控制器的高端存储 6SCSI接口还是光纤通道接口? SCSI的完善规格、成熟技术及高性能一直吸引着小型系统,但从目前的情况来看,光纤通道已形成市场,双环可达200MB/s,且传输距离达10km, 可接126个设备。光纤通道把总线与网络合二为一,是存储网络的根本,其取代SCSI已是大势所趋。因此,为了保证系统的生命力,应该选择光纤通道接口。但光纤通道网络造价特别高,大约是SCSI接口网络的45倍,且从实际情况来看,光纤通道在管理上仍是一个薄弱之处,对客户端的软件要求比校高,所以在选择时,应根据实际情况来选择。4.存储的使用和维护存储的主要作用是提供大容量,高性能,高安全功能。存储的容量:存储的容量大小决定你选择存储的类型(高端存储大都支持大容量)及raid级别存储的高性能:存储的高性能除了和存储本身的架构,还和应用方式有关,比如磁盘的速度,raid级别,stripe(条带)的大小,磁盘 的数量,存储的相关参数等因素。存储的高安全性:存储的高安全性和存储架构有关,例如,中低端存储采用以控制器为中心的双控结构,而高端存储采用以cache为中心 的多控制器结构;一般要配置适合数量的hotspare盘cache参数对磁盘阵列性能和可靠性的影响1. 调整全局cache在介绍全局cache之前,先来明确两个概念:cache和buffer,简单的说,Cache是加速“读”,而buffer是缓冲 “写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache1.1start and stop cache flush:这两个参数影响控制器处理cache区域的操作,在这中情况下是按照先进先出的原则往磁盘上写数据。这只对打开了写cache的情况下适用。 在一般的情况下,在决大多数时候start的值大于stop的值。但是也有少量的情况下start等于stop的值。如startstop80%意味着,控制器的cache将不允许超过80%的部分用于写cache操作,在这种情况下,控制会尽可能的将80%的cache做为写cache使用,这对应用而言,写的性能可能是比较,但是在数据的可靠性保护方面可能不是很好。如果从数据保护的角度来看,使用比较小的start和stop值可能是比较好的。(针对cache掉电等意外情况下,cache中丢失数据的多少来考虑)1.2cache block size参数 如果IO操作均小于cache block size的大小,那么每一次IO写到cache中,都会浪费cache的使用情况(对于一个cache block中没有使用的部分,不能用做其他的IO)。如果IO操作均大于cache block size,那么完成一次操作会使用更多的cache block。2. 指定卷上面的cache参数 2.1 read cache:允许服务器的读操作从控制器的cache中读取所需要的数据,如果数据不在cache,控制器从磁盘中读取数据并存放在cache中,直到cache flush。2.2 readahead(prefetch):允许控制器从磁盘上读取数据到cache中的时候,读取附加的一些数据到cache中。在下一次IO可能会使用到这些数据,这样在性能上可能会有所提高。 2.3 write cache:数据不直接写到磁盘,先写到cache中。不一定write cache能够提高性能。如在持续的大数据量的时候write cache可能会比关掉cache慢,因为会频繁的出现cache flush。2.4 write cache是否使用电池保护:如果不用电池保护写cache,可能会出现数据丢失。2.5 write cache mirror:可靠性提高,但是性能会降低。由于读、写均共享cache,因此需要整体考虑用于读、写cache的大小,以及对整体性能的影响。下面针对某些可以对segmentsize大小改变的磁盘阵列的控制器进行说明,请各位指正。SigmentSize(stripsize):控制器写到逻辑卷中一个物理磁盘的大小。SigmentSize(stripsize)能够影响磁盘阵列的在IOPS和throughput上面的性能。小的sigmentsize允许多个硬盘来响应多个需求增加了IO要求(IOPS);大的sigmentsize通过多个磁盘来共同分担一个IO需求增加了数据传输效率(throughput)。segmentsizeI/Orequestsize的时候,每个IO需求使用最少的磁盘;更高的IOPS;用于处理随机的IO处理(如数据库的应用等)sigmentsize 5*定位时间;换句话说就是:数据传输效率大于80%,否则大部分时间都用在“寻道定位”上显然是不合算的。(我们回想一下十年前的硬盘技术:容量大约是1.2GB;转速大约在5400转/分钟;持续传输速率大约在10M每秒;平均寻道时间大约在15毫秒。)硬盘的技术进步带给持续传输速率好处要远大于平均寻道时间的好处,因此差不多越高级的硬盘“IO大小”要设定的越大才好。RAID 0,或者RAID 10的stripe size计算公式:RAID的技术介绍: stripe width(条带宽度):RAID中的磁盘数,就是组成这个stripe的磁盘数。如,4个磁盘组成的RAID 0,条带宽度就是4。 stripe depth(条带深度):单块磁盘上条带的大小,有时也称为stripe unit。 stripe size(条带大小):stripe depth*stripe width。 还有一种说法:有时也称为block size块大小,chunk size簇大小,stripe length条带长度,granularity粒度,单块磁盘上的每次IO的最小单位。RAID条带大小的另一个计算公式为:(参见:Oracle and RAID Usage)条带大小 = (0.25*平均定位时间*数据传输速率*(并发用户数-1)*1.024)+0.5K平均定位时间=(平均延时+平均寻道时间)(milliseconds);数据传输速率单位为:Megabyte/sec;1.024 = 1s/1000ms*1024K/1M (单位转换因子)举例来说,磁盘寻道时间是6ms,传输速率80MB,且有20个并发用户的条带大小应该为:(0.25*6*80*19*1.024)+0.5=2335.22K(差不多2M)出自:/104736/253266DS4000(FAStT系列) Storage Manager中cache参数设置详解产品: FAStT、DS4000主机平台: p/i/z/x-Series,SUN, HP,.操作系统:AIX,Sun Solaris,HP-UX, Linux使用FAStT Storage Manager工具,可以设置不同的cache参数。这些参数的设置直接影响到FASTT存储服务器的性能和数据可用性,下面对这些参数做以解释。Cache memory是控制器上用于临时保留数据的易失性存储器(RAM),比磁盘访问速度要快。Cache memory提供给读写操作共用。有效地使用RAID控制器的Cache memory,能使FAStT存储服务器发挥更好的性能。使用FAStT Storage Manager工具,可以设置不同的cache参数,包括:Read cachingCache block sizeCache read-ahead multiplierWrite caching or write-through modeEnable or disable write cache mirroringStart and stop cache flushing levelsUnwritten cache age parameter下图是用Storage Manager创建逻辑驱动器时的缺省设置,可以对其进行调整。这些参数的设置直接影响到FASTT存储服务器的性能和数据可用性。众所周知,性能和可用性通常是一对矛盾。如果你要获得最好的性能,更多的时候,你必须牺牲系统可用性;反之亦然。默认情况下,读缓存和写缓存用于所有的逻辑驱动器;对于所有的写数据,两个控制器之间的缓存互为镜像。写缓存只在控制器电池充满电时可用。预读方式通常不用于逻辑驱动器。Read caching(读缓存)将读缓存使能不会造成数据丢失风险。很少情况下,需要关闭读缓存为其它逻辑驱动器提供更多的缓存。Read-ahead multiplier(预读乘数)该参数会影响读性能,错误的设置会导致极大的负面影响。它控制在一个读请求之后,有多少连续数据块被保存到缓存里。显然,对于随机I/O负荷,这个值应该为零。否则,每一个读请求将不必要地预取额外的数据块,而这些数据块又很少用,所以会影响性能。对于连续I/O的工作负荷,设置为1到4是一个合适的值,这主要决定于具体环境。当使用该设置时,一个读请求引发预取多个连续的数据块到缓存,从而加速并发访问,使得在磁盘和缓存之间,使用更少的I/O来完成同样数据量传输,在连续I/O的工作负荷情况下优化了性能。如果该值设置过高,缓存被从不需要的预读数据所添满,将会导致总体性能下降。使用performance monitor观察缓存命中率,获得一个合适的值。Write caching(写缓存)写缓存使存储系统先将数据写入缓存,而不是直接写入磁盘。这会明显的改善性能,尤其是对于随机写的数据库应用。对于连续写的环境,性能会随写数据的大小不同而变化。如果逻辑驱动器只用于读访问,关闭该逻辑驱动器的写缓存会提高整体性能。Write cache mirroring(写缓存镜像)FAStT write cache mirroring 能保证一块RAID卡失效后的cache数据完整性。这使数据有更高可用性,但是降低了性能。数据在控制器之间跨过磁盘端的光纤环路形成镜像,与正常的数据传输发生竞争。建议使用该功能,以保证一块RAID卡失效后的cache数据完整性。缺省情况下,写缓存对另一个控制器写缓存数据进行镜像,即便是逻辑驱动器移动到另外一个控制器。否则,如果逻辑驱动器控制权切换到另一个控制器并且缓存里还有没写入的数据,逻辑驱动器的数据就会丢失。如果关闭写缓存镜像,在控制器失效时有可能丢失数据,并且可能导致fabric中的路径失效。FAStT控制器缓存有电池保护,保证掉电时不会丢失数据。如果电池没有充足电,比如刚刚开机时,控制器会自动关闭写缓存。如果使能写缓存,即便没有电池保护,写缓存也被启用,会有数据丢失的风险。Write caching 或 write-throughwrite-through意思是写操作根本不使用缓存。数据总是直接写入磁盘。关闭写缓存,可释放缓存用于读操作。(缓存被读写操作共用)Write caching可以提高写操作的性能。数据不是直接被写入磁盘;而是写入缓存。从应用程序的角度看,比等待完成磁盘写入操作要快的多。因此,可以提高写性能。由控制器将缓存内未写入磁盘的数据写入磁盘。表面上看,Write cache方式比write-through方式的读、写性能都要好,但是也要看磁盘访问方式和磁盘负荷了。write-back(write cache)方式通常在磁盘负荷较轻时速度更快。负荷重时,每当数据被写入缓存后,就要马上再写入磁盘以释放缓存来保存将要写入的新数据,这时如果数据直接写入磁盘,控制器会以更快的速度运行。因此,负荷重时,将数据先写入缓存反而会降低吞吐量。Starting and stopping cache flushing levels这两个设置影响控制器如何处理未写入磁盘的缓存内数据,并且只在write-back cache方式下生效。缓存内数据写入磁盘称为flushing.你可以配置Starting and stopping cache flushing levels值,这个值表示占用整个缓存大小的百分比。当缓存内未写入磁盘的数据达到starting flushing value时,控制器开始flushing(由缓存写入磁盘)。当缓存内未写入磁盘数据量低于stop flush value时,flushing过程停止。控制器总是先flush旧的缓存数据。缓存内未写入数据停留超过20秒钟后被自动flushing.典型的start flushing level是80%。通常情况下,stop flushing level也设置为80%。也就是说,控制器不允许超过80%的缓存用于write-back cache,但还是尽可能保持这一比例。如果你使用此设置,可以在缓存内存更多的未写入数据。这有利于提高写操作的性能,但是要牺牲数据保护。如果要得到数据保护,你可以使用较低的start and stop values。通过对这两个参数的设置,你可以调整缓存的读、写性能。经测试表明,使用接近的start and stop flushing levels时性能较好。如果stop level value远远低于start value,在flushing时会导致磁盘拥塞。Cache block size这个值指缓存分配单元大小,可以是4K或16K。选择合适的值,可以明显的改善缓存使用性能。如果应用程序更多时候访问小于8K的数据,而将cache block size设置为16K,每次访问仅使用一部分cache block。在16K的cache block里总是存储8K或更小的数据,意味着只有50%的缓存容量被有效使用,使性能下降。对于随机I/O和小数据块的传送,4K比较合适。另一方面,如果是连续I/O 并使用大的segment size,最好选择16K。大的cache block size意味着cache block数量少并可缩短缓存消耗延时。另外,对于同样大小的数据,cache block size大一些,需要的缓存数据传送量更小。一般来说,在实施DS4000系列存储解决方案前,建议用一周的时间做性能测试和监控并调整相关的性能参数。利用dd命令测试linux文件读写性能2010-03-17 16:40磁阵读写速度请参考如图的使用系统dd命令的测试方法(请参考邮件下文图片): 其中磁阵分区为/amsqasbill 1.测试读速度 将磁阵分区下的文件1Gb.file拷贝到/dev/null,根据传输所需的时间,采用拷贝的字节数/拷贝时间,计算每秒的读速度。 例如读速度:1024*1000000字节/11秒=80M/s左右 2.测试写速度 将/dev/zero拷贝为磁阵分区下的文件4Gb.file,根据传输所需的时间,采用拷贝的字节数/拷贝时间,计算每秒的写速度。 例如写速度:1024*1000000字节/12秒=80M/s左右 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!/dev/null-它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。把/dev/null看作黑洞. 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.dev/zero,是一个输入设备,你可你用它来初始化文件。/dev/zero-该设备无穷尽地提供0(是ASCII 0 就是NULL),可以使用任何你需要的数目设备提供的要多的多。他可以用于向设备或文件写入NULL。像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运料临时码头施工方案
- 潜江厂区防雷施工方案
- 班级建设文化课件
- 江西科技师范大学《声乐文献》2023-2024学年第二学期期末试卷
- 雾化吸入疗法操作规范
- 山东职业学院《企业经营活动沙盘模拟》2023-2024学年第二学期期末试卷
- 沈阳城市学院《社会性别文化》2023-2024学年第一学期期末试卷
- 四川城市职业学院《可再生能源建筑一体化技术》2023-2024学年第二学期期末试卷
- 江西家用水塔施工方案
- 江西卫生职业学院《药物合成反应实验》2023-2024学年第二学期期末试卷
- 小说中景物描写的作用
- 第十二讲 建设社会主义生态文明PPT习概论2023优化版教学课件
- 工商管理实习周记十篇
- 幼儿园体育游戏活动评价表
- 2023年通管局安全员考试-培训及考试题库(导出版)
- GB/T 4857.22-1998包装运输包装件单元货物稳定性试验方法
- GB/T 25074-2010太阳能级多晶硅
- GB/T 23842-2009无机化工产品中硅含量测定通用方法还原硅钼酸盐分光光度法
- GA/T 1217-2015光纤振动入侵探测器技术要求
- 特种陶瓷介绍课件
- 有机物污染(环境化学)课件
评论
0/150
提交评论