0%

Flashcache是Facebook技术团队开发的一个内核模块,通过在文件系统(VFS)和设备驱动之间新增一次缓存层,可以用SSD作为介质的缓存,通过将传统硬盘上的热门数据缓存到SSD上,加速服务器磁盘读写性能。

flashcache

Centos5.7下安装Flashcache,查看系统及内核版本:

1
2
$ uname -a
Linux master.onovps.com 2.6.18-274.17.1.el5 #1 SMP Tue Jan 10 17:25:58 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
1
2
$ cat /etc/issue
CentOS release 5.7 (Final)

下载安装内核源码树:

1
2
3
4
5
6
7
#http://www.onovps.com

yum install rpm-build redhat-rpm-config unifdef
lftp -c "pget -n 10 http://vault.centos.org/5.7/os/SRPMS/kernel-2.6.18-274.el5.src.rpm"
rpm -i kernel-2.6.18-274.el5.src.rpm
cd /usr/src/redhat/SPECS/
rpmbuild -bp --target=$(uname -m) kernel.spec
Read more »

问题:

在脚本中有一句find和xargs配合使用的命令如下

1
2
3
4
5
if [ ${BACKUP_EXCLUDE} -eq 0 ]; then
  find $xdir -xdev -exec dirname "{}" \; |uniq >> ${HIS_DIR}/directories.curr
else
  find $xdir -xdev|grep -v -E "$BACKUP_EXCLUDE"|xargs -i dirname "{}"|uniq >> ${HIS_DIR}/directories.curr
fi

老是会出现“xargs: unmatched single quote”错误,检查发现是因为某些文件名有空格或其他特殊字符导致。想问一下是否有解?曾尝试过在find中使用参数”-print0″配合xargs -0,但是没法分行。高手帮忙!谢谢先!

抱歉, 我的说明不是很详细导致把各位的思路弄乱了。
首先,出现问题的语句是代码里第二个find语句
其次,该语句作用是找出所有的文件并通过管道过滤排出部分结果,然后产生找出文件的目录名,最后合并同类项输出

我曾尝试过在在find指令中加入-print0,但是无法通过grep;如果写成find … -print0 -exec grep -v -E … ”{}” ; |xargs -0 -i dirname “{}”|uniq,会出现奇怪的结果!

解决方法

对grep后的输出转换成NULL字符结尾的字符流,结合xargs -0

1
2
3
4
5
if [ ${BACKUP_EXCLUDE} -eq 0 ]; then
  find $xdir -xdev -print0 |xargs -0 -i dirname "{}" |uniq >> ${HIS_DIR}/directories.curr
else
  find $xdir -xdev|grep -v -E "$BACKUP_EXCLUDE"|tr '\n' '\0'|xargs -0 -i dirname "{}"|uniq >> ${HIS_DIR}/directories.curr
fi

awk ‘pattern{action}’ file , 一般awk的格式是这样的。

如果写成awk ‘pattern’ file,那么action默认为{print $0};
pattern如果是个定值,则判断该值是否为0(0为false,非0为true);
pattern如果是个计算表达式,则判断计算结果是否为0;
pattern如果是个awk 命令,则判断其返回值是否为0。

这样就能理解awk ’1′ file的意义了:

在这里action为空,因此默认为{print $0};1为定值,非0,因此执行action,即print $0。

您的余额已不足10元,请及时充值!!!!我知道我知道,不要来烦我了!但是他真的不会来烦你吗?
不过要是你遇到了这个“你的磁盘空间不足100M,请先清理磁盘!!!!”想要它不要再来烦你的话,是可以的。

PS:如果这种事发生在C盘的话,那就及时把C盘里认为不需要的东西移到其它分区吧。

对于像CDEFG这些盘,空间不足也没办法啦,移到了别的地方后硬盘剩余空间还不是一样啊。这个提示弹出来一两次还不以为意,但弹多了,是会烦的,微软真啰嗦。

呃~~看来我也啰嗦了不少!!!

首先打开注册表:开始——运行——regedit

1
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer

找到NoLowDiskSpaceChecks,如果没有的话,就新建一个“DWORD (32-位)值”,把16进制值设为1
如果你想继续让这个提示烦你的话,你可以把值设为0

低磁盘空间检测注册表

比如说有一个周期性(cron)备份mysql的脚本,或者rsync脚本,
如果出现意外,运行时间过长,
很有可能下一个备份周期已经开始了,当前周期的脚本却还没有运行完,
显然我们都不愿意看到这样的情况发生。

其实只要对脚本自身做一些改动,就可以避免它被重复运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

LOCK_NAME="/tmp/my.lock"
if [[ -e $LOCK_NAME ]] ; then
echo "re-entry, exiting"
exit 1
fi

### Placing lock file
touch $LOCK_NAME
echo -n "Started..."

### 开始正常流程
### 正常流程结束

### Removing lock
rm -f $LOCK_NAME

echo "Done."
Read more »

Double write写给innodb带来的是可靠性,主要用来解决部分写失败(partial page write)。

doublewrite有两部分组成,一部分是内存中的doublewrite buffer,大小为2M,另外一部分就是物理磁盘上的共享表空间中连续的128个页,即两个区,大小同样为2M。

当缓冲池的胀业刷新时,并不直接写硬盘,而是通过memcpy函数将脏页先拷贝到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次写,每次写入1M到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘。以下命令可以查看doublewrite的使用 情况。

1
2
3
4
5
6
7
mysql> show global status like 'innodb_dblwr%';
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| Innodb_dblwr_pages_written | 60511554 |
| Innodb_dblwr_writes | 828734 |
+----------------------------+----------+

这台DB doublewrite一共写了60511554个页,但实际写入次数为828734,60511554/828734=73。说明这台DB的压力一般。 slave上可以通过设置skip_innodb_doublewrite参数关闭两次写功能来提高性能,但是master上一定要开启此功能,保证数据安全。

skip_innodb_doublewrite,是一个自读变量,需在配置文件中设置,并重启生效。

mysql used mem = 
key_buffer_size 
+ query_cache_size 
+ tmp_table_size 
+ innodb_buffer_pool_size 
+ innodb_additional_mem_pool_size 
+ innodb_log_buffer_size 
+ max_connections * ( read_buffer_size + read_rnd_buffer_size + sort_buffer_size+ join_buffer_size + binlog_cache_size + thread_stack )

在mysql 中输入如下命令,可自动计算自己的当前配置最大的内存消耗

SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;
SHOW VARIABLES LIKE ‘innodb_additional_mem_pool_size’;
SHOW VARIABLES LIKE ‘innodb_log_buffer_size’;
SHOW VARIABLES LIKE ‘thread_stack’;
1
SELECT ( @@key_buffer_size + @@query_cache_size + @@tmp_table_size + @@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size + @@innodb_log_buffer_size + @@max_connections * ( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack ) ) / 1073741824 AS MAX_MEMORY_GB;
Read more »

rm、cp、mv是unix下面常用到的档案处理指令,譬如我们需要移除不必要的档案通常会使用rm xxx来删除,如果档案数目眾多且命名具有规则,eg. file1.log、file2.log、file3.log等,為求方便则会利用万用字元来处理,eg. rm -f *.log,但是当这些指令后面所处理档案数量多到某种程度时,就会出现/bin/rm: Argument list too long这个错误讯息。

往往在我们执行一些程式时,系统会產生大量的log或者是不必要的暂存档(有时候是程式出错的悲剧@@),但是如果在删除时遇到这种错误,往往会很呕,这表示又要写一些code来处理这些garbage,所以在网路上面查了一下,目前最常看到的解决方法是用xargs来处理,方式如下:

1
find . -name '*.log' | xargs rm

另外,在对岸的同胞上的网誌上面也看到不用xargs的解法:

1
find /var/spool/mqueue -type f -exec rm {} \;

/var/spool/mqueue是要删除档案的存放资料夹,type -f指的是一般档案,{}的后方可以接其他参数,所以如果指令后方要加入多个参数的话,例如copy 档案 到B资料夹的时候,就可以透过以下指令来做:

1
find /var/spool/mqueue -type f -exec cp {} ../backup \;

希望将以下数据:

A
1
B
2
C
3

合并成:

A,1
B,2
C,3

1
awk '{if(NR%2==0){printf("%s\n",$1)}else{printf("%s,",$1)}}' test

Chrome和Google其他软件的一个“不显著”区别在——Chrome官网没有独立安装包下载地址,只有一个ChromeSetup。ChromeSetup仅仅是一个下载准备工具,还需要在联网后下载Chrome完整独立安装包。这个和微软的Live组件相似,不但麻烦、不方便备份,而且和国外服务器的联网是一个痛苦的过程。

——————————————————————————–

个人觉得最好不要使用ChromeSetup,除了使用和联网麻烦外:

  1. ChromeSetup的联网下载有收集数据的嫌疑;
  2. 制作Chrome便携版不需要ChromeSetup的自动安装而产生的注册表垃圾

记得以前是可以直接通过官网链接进入到Chrome独立安装包下载页面,但是不断更新的Chrome现在似乎也看不到独立安装包下载页面了。

偶然一次,从一个Google服务中“误”点击到Chrome的下载页面,发现居然是独立安装包下载页面,特此记录一下:

http://www.google.com/chrome/eula.html?standalone=1&hl=zh-CN