1.如果使在Linux中修改的数据不回写到磁盘
aufs 联合挂载一个 tmpfs ,和你的文件系统。
写入数据指定为 tmpfs 。
这样所有的写入数据,都会写到 tmpfs 里,而读取时,如果 tmpfs 没有数据,aufs 会去真正的文件系统找数据读取。
tmpfs 在内存里,重启就没了,不过 tmpfs 占用内存,所以要限制他的容量,不然他存的数据太多,占用内存大了。系统正常运行就会受影响。
不过整个系统的文件系统都要 aufs ,可能需要在 initrd 或者启动脚本里面做操作后 chroot 继续启动。
如果你非要想实现不写回,而不是用 aufs 联合挂载,必须 hack 内核的写入数据模块,截获所有写入数据到自己的缓存里。
这个难度很大,而且兼容性也是问题。
除了 aufs ,老系统可以用 unionfs 。
另外,Linux 除非安装程序,不然大部分数据其实都是放在个人目录里面,你把个人目录挂载成 tmpfs 其实就能实现不写入硬盘的功能。只有很少量的数据会写入特殊的目录里,但这些都是服务器或者系统的系统管理、配置什么的数据。
还原精灵的某些功能目的,其实 Linux 本身就自己已经提供了。不需要要在折腾什么。
2.linux怎么把信息直接写入磁盘
如果想在Linux系统下,把信息直接写入磁盘,一般是采用文本编辑器vim来创建文件的方法写入的:vim file 是一个新文件,也可以是原有文件。这样的命令执行后将打开编辑器,显示文件file的内容。如果是一个新文件,底部左边会显示"file"
[新文件]的字样,右边显示0,0-1表示当前光标所在行数和字符数。如果打开的是一个老文件,底部左边显示"file" 3L,
66C字样,表示文件名,当前光标所处行号,文件总字节数。文件中没有字符的地方会以字符~开头。
文本编辑器vim的具体使用方法,楼主可以参考这篇文章:
更多Linux操作知识,楼主可以百度《Linux就该这么学》,希望能帮到楼主!
3.如何排除linux系统的读写缓存进行磁盘性能测试
1、先熟悉两个特殊的设备:
(1)/dev/null:回收站、无底洞。
(2)/dev/zero:产生字符。
2、测试磁盘写能力
代码如下:
time dd if=/dev/zero of=/testw.dbf bs=4k count=100000
因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。命令结尾添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存。
3、测试磁盘读能力
代码如下:
time dd if=/dev/sdb of=/dev/null bs=4k
因为/dev/sdb是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb上,也相当于测试磁盘的读能力。(Ctrl+c终止测试)
4、测试同时读写能力
代码如下:
time dd if=/dev/sdb of=/testrw.dbf bs=4k
在这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb是读,对/testrw.dbf是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。
4.Linux 常用命令(磁盘管理)
df命令 功能:检查文件系统的磁盘空间占用情况。
可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 语法:df [选项] 说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。
该命令各个选项的含义如下: -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。 -k 以k字节为单位显示。
-i 显示i节点信息,而不是磁盘块。 -t 显示各指定类型的文件系统的磁盘空间使用情况。
-x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。 -T 显示文件系统类型。
du命令 du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况。 功能:统计目录(或文件)所占磁盘空间的大小。
语法:du [选项] [Names…] 说明:该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出Names,则对当前目录进行统计。
该命令的各个选项含义如下: -s 对每个Names参数只给出占用的数据块总数。 -a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。
若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。 -b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。
-k 以1024字节为单位列出磁盘空间使用情况。 -c 最后再加上一个总计(系统缺省设置)。
-l 计算所有的文件大小,对硬链接文件,则计算多次。 -x 跳过在不同文件系统上的目录不予统计。
dd命令 功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。
先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉。
系统默认使用标准输入文件和标准输出文件。 语法:dd [选项] if =输入文件(或设备名称)。
of =输出文件(或设备名称)。 ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。 cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。 conv = ASCII 把EBCDIC码转换为ASCIl码。
conv = ebcdic 把ASCIl码转换为EBCDIC码。 conv = ibm 把ASCIl码转换为alternate EBCDIC码。
conv = block 把变动位转换成固定字符。 conv = ublock 把固定位转换成变动位。
conv = ucase 把字母由小写转换为大写。 conv = lcase 把字母由大写转换为小写。
conv = notrunc 不截短输出文件。 conv = swab 交换每一对输入字节。
conv = noerror 出错时不停止处理。 conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。
fdformat 命令 软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作,然后可以用tar、dd、cpio等命令存储数据,也可以在软盘上建立可安装的文件系统。
功能:低级格式化软盘 语法:format [-n] device 说明:该命令的作用是对软盘进行格式化。 -n 软盘格式化后不作检验。
device 指定要进行格式化的设备,通常是下述设备之一: /dev/fd0d360 /dev/fd0h1200 /dev/fd0D360 /dev/fd0H360 /dev/fd0D720 /dev/fd0H720 /dev/fd0h360 /dev/fd0h720 /dev/fd0H1440。
5.linux怎样提升磁盘读写性能
关于页面缓存的信息,可以用cat /proc/meminfo 看到。
其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。
一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。Linux 用pdflush进程把数据从缓存页写入硬盘,查看有多少个pdflush进程cat /proc/sys/vm/nr_pdflush_threadspdflush的行为受/proc/sys/vm中的参数的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。
默认5秒唤醒2个(更多个)线程。如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题。
pdflush的第一件事是读取/proc/sys/vm/dirty_expire_centiseconds (default 3000)1/100秒。缓存页里数据的过期时间(旧数据),在下一个周期内被写入硬盘。
默认30秒是一个很长的时间。第二件事是判断内存是否到了要写入硬盘的限额,由参数决定:/proc/sys/vm/dirty_background_ratio (default 10)百分值,保留过期页缓存(脏页缓存)的最大值。
是以MmeFree+Cached-Mapped的值为基准的pdflush写入硬盘看两个参数:1 数据在页缓存中是否超出30秒,如果是,标记为脏页缓存;2 脏页缓存是否达到工作内存的10%;以下参数也会影响到pdflush/proc/sys/vm/dirty_ratio (default 40)总内存的最大百分比,系统所能拥有的最大脏页缓存的总量。超过这个值,开启pdflush写入硬盘。
如果cache增长快于pdflush,那么整个系统在40%的时候遇到I/O瓶颈,所有的I/O都要等待cache被pdflush进硬盘后才能重新开始。对于有高度写入操作的系统dirty_background_ratio: 主要调整参数。
如果需要把缓存持续的而不是一下子大量的写入硬盘,降低这个值。dirty_ratio: 第二调整参数。
Swapping参数/proc/sys/vm/swappiness默认,linux倾向于从物理内存映射到硬盘缓存,保持硬盘缓存尽可能大。未用的页缓存会被放进swap区。
数值为0,将会避免使用swapping100,将会尽量使用swapping少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。如果有大量的写操作,为避免I/O的长时间等待,可以设置:$ echo 5 > /proc/sys/vm/dirty_background_ratio$ echo 10 > /proc/sys/vm/dirty_ratio文件系统数据缓冲需要频繁的内存分配。
加大保留内存的值能提升系统速度和稳定。小于8G的内存,保留内存为64M,大于8G的设置为256M$ echo 65536 > /proc/sys/vm/min_free_kbytesI/O 调度器cat /sys/block/[disk]/queue/scheduler4中调度算法noop anticipatory deadline [cfq] deadline : deadline 算法保证对既定的IO请求以最小的延迟时间。
anticipatory: 有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。
对数据库应用很糟糕,而对于Web Server等则会表现不错。cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。
适合离散读的应用。noop: 对所有IO请求都用FIFO队列形式处理。
默认IO不会存在性能问题。改变调度器$ echo deadline > /sys/block/sdX/queue/scheduler对于数据库服务器,deadline算法是推荐的。
提高调度器请求队列的$ echo 4096 > /sys/block/sdX/queue/nr_requests有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。
为了增加连续读取的吞吐量,可以增加预读数据量。预读的实际值是自适应的,所以使用一个较高的值,不会降低小型随机存取的性能。
$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb如果LINUX判断一个进程在顺序读取文件,那么它会提前读取进程所需文件的数据,放在缓存中。服务器遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。
通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。
以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。
/proc/sys/vm/dirty_ratio控制文件系统的写缓冲区的大小,单位是百分比,表示占系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。
但是,当你需要持续、恒定的写入场合时,应该降低其数值。/proc/sys/vm/dirty_background_ratio控制文件系统的pdflush进程,在何时刷新磁盘。
单位是百分比,表示系统内存的百分比,pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值:/proc/sys/vm/dirty_writeback_centisecs控制内核的脏数据刷新进程pdflush的运行间隔。
单位是 1/100 秒。缺省。
6.linux下磁盘占用达到100%了,找不到哪些大文件耗尽了磁盘
楼上的各位,麻烦你们回答问题的时候看清楚别人问的是什么好吧?
1、如果是大文件占用了,那么查询大于某个值的文件的方法:
find / -size +100c -print
这是从根盘开始查找大于100字节的文件(至于字节数你当然可以自己设置)
你可以用
find / -size +100c -exec ls -l {}\;
来列出文件属性。
2、如果只是因为有些应用生成的日志文件较多,长时间没有清理后占用了,这种情况最明显的标志为系统空间使用量逐步递增,每天的增量基本相差不大。那么最快捷的方式莫过于询问应用厂商要到日志存放目录后进行清理。如果找不到厂商,那只好自己动手咯,写个脚本查:
#!/bin/ksh
#####用du命令输出所有目录所占的磁盘空间大小,以G为单位#########
du -h >fs_du.log
######判断各层目录大小,查到占用量大的目录######
cat fs_du.log|while read LINE FS_USED
do
if [ $LINE -ge 10 ]
then
echo $FS_USED >>result.log
else
exit
fi
done
####查看运行结果#######
more result.log
这样你就能看到占用量比较大的目录,从而有针对性的到相应目录下检查,看到底是什么东西在占用硬盘空间了。(if [ $LINE -ge 10 ] ,这里是判断超过10G的目录,你可以修改)
3、因为人为的误操作,导致了某些进程在没有执行完成的时候被kill掉了,但是缓存中的程序没有释放,仍然在运行,这会产生一些临时文件占用大量的磁盘空间资源,这种现象的特点是爆发式的增长,在很短时间内就将磁盘空间占满。解决的方法:
i、如果是因为父进程被杀除,子进程还运行导致,那么最简单,kill子进程,就会释放。
ii、如果能用ipcs确认是哪个用户的进程,那么也不困难,顺着使用ipcrm就行(这个就不一一例举了,有了命令查使用方法还是很方便的)
iii、执行进程的用户是比较关键的用户如:root用户、有实例的oracle用户、在线的生产用户等。那么建议在确认是因为共享缓存的原因导致的问题后重启服务器。
4、你已经删除了一些占用量大的文件,或者在根盘下做du -h发现占用量远远的小于130G,df的结果仍然是100%的使用率。那么基本肯定你碰到了linux的一个bug,直接重启就能解决。(当然了也不一定是bug,我碰到过那种程序在写一个日志,但是删除日志后空间不释放的问题。这个是linux本身的机制引起的,只需要停止相关的程序空间就会释放的)
7.如何排除linux系统的读写缓存进行磁盘性能测试
1、先熟悉两个特殊的设备:(1)/dev/null:回收站、无底洞。
(2)/dev/zero:产生字符。2、测试磁盘写能力代码如下:time dd if=/dev/zero of=/testw.dbf bs=4k count=100000因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
命令结尾添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存。3、测试磁盘读能力代码如下:time dd if=/dev/sdb of=/dev/null bs=4k因为/dev/sdb是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb上,也相当于测试磁盘的读能力。
(Ctrl+c终止测试)4、测试同时读写能力代码如下:time dd if=/dev/sdb of=/testrw.dbf bs=4k在这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb是读,对/testrw.dbf是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。
转载请注明出处育才学习网 » linux怎么停止写磁盘