/etc/fstab 详细说明

/etc/fstab 是专门用配置挂载硬盘的文件

语法为:

[Device] [Mount Point] [File System Type] [Options] [Dump] [Pass]

详细解释为:

<device>

The device/partition (by /dev location or UUID) that contain a file system.

<mount point>

The directory on your root file system (aka mount point) from which it will be possible to access the content of the device/partition (note: swap has no mount point). Mount points should not have spaces in the names.

<file system type>

Type of file system 

<options>

Mount options of access to the device/partition (see the man page for mount).

<dump>

Enable or disable backing up of the device/partition (the command dump). This field is usually set to 0, which disables it.

<pass num>

Controls the order in which fsck checks the device/partition for errors at boot time. The root device should be 1. Other partitions should be 2, or 0 to disable checking.

第一列和第二列的device 和 mount point 顾名思义,就是你想要挂载的device  和挂载的位置.

device 有两种表示方式,可以用/dev/xdx 之类的location 或者 硬件的UUID 来表示,硬件的UUID 可以用blkid 来查询

第三列的file system type 也很好理解,这里一般有auto, vfat( for FAT partition), ntfs or ntfs-3g( for NTFS partition), ext4 or ext3 or ext2 or jfs,  udf or iso9660 ( for CD/DVD), swap

第四列的option,一般用默认的defaults,但是也可以使用下面的option:

sync/async - All I/O to the file system should be done (a)synchronously.
auto - The filesystem can be mounted automatically (at bootup, or when mount is passed the -a option). This is really unnecessary as this is the default action of mount -a anyway.
noauto - The filesystem will NOT be automatically mounted at startup, or when mount passed -a. You must explicitly mount the filesystem.
dev/nodev - Interpret/Do not interpret character or block special devices on the file system.
exec / noexec - Permit/Prevent the execution of binaries from the filesystem.
suid/nosuid - Permit/Block the operation of suid, and sgid bits.
ro - Mount read-only.
rw - Mount read-write.
user - Permit any user to mount the filesystem. This automatically implies noexec, nosuid,nodev unless overridden.
nouser - Only permit root to mount the filesystem. This is also a default setting.
defaults - Use default settings. Equivalent to rw, suid, dev, exec, auto, nouser, async.
_netdev - this is a network device, mount it after bringing up the network. Only valid with fstype nfs.

第五列 dump,dump 是linux 系统中的一个备份工具,用0 来表示不备份这个区,1 表示备份。这里不适合长篇大论来讨论dump 和 fsck ,但是通过查看/etc/fstab 的例子可以看到,第五列的选项一般为0

第六列 fsck 表示fsck 是否会check这个区,一般用1 来表示根分区, 2 表示其他的分区;0表示不检查

对于第5,6列来说,

/ 一般为1 1

swap 一般为 0 0

其他分区一般为1 2

云硬盘可谓0 2

 

阿里云centos创建swap分区的办法

以前不用国内的云,现在一用。。真是不用不知道。。用了你就留掉坑里了。。系统盘只能升不能降。。

阿里云全系linux系统不配置swap分区,按照阿里云的说法是为了让大家多买内存。。。以减少对swap的依赖。。however,许多应用程序要求必须要有swap分区,比如说大名鼎鼎的oracle

话不多说,下面说下centos创建swap的方法. 目前主流的做法有两种: 一是创建一个单独的分区,专门用来做swap区,这是推荐的做法。但是对于阿里云来说,如果你没有加载第二个或者第三个数据盘,这是很难实现的。因为对系统盘做无损分区,这基本是不可能的事情。因此,只有当你挂载了第二个数据盘或者多个数据盘,还没有开始使用的情况下,可以使用这个方式;二是专门创建一个目录来做swap分区,这种方法不受系统盘和数据盘的限制,哪里有空间,哪里就可以设置。但是这种方式的速度不如直接挂载一个分区过去速度快。

第二种方式,阿里云的官方文档中有详细的说明: https://help.aliyun.com/knowledge_detail/42534.html

这里我就不多说了。这篇文章主要关注点在于创建一个分区然后挂载到swap分区上

swap 的大小,根据我多年的经验,在内存小于等于4G时,可以设置为内存的2倍;在大于4G时,建议设置为和内存大小一样。

对新数据盘进行分区,就是使用fdisk /dev/vdx 命令,然后跟着命令走就可以了

格式化的时候,和格式化普通格式硬盘不一样,需要使用mkswap命令, 加入我们创建的分区为/dev/vdb1

则命令为

mkswap /dev/vdb1

swapon /dev/vdb1

第一句话表明格式化为swap 分区,第二句话表示enable swap分区。

运行完这两个命令,用free -m就可以看到swap分区了。

如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a

但是当你重启以后,你会发现swap又没有了。。这是因为我们需要把挂载swap的命令写入/etc/fstab里面

/dev/vbd1 swap swap defaults 0 0

但是这还没完呢

在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。

标准的linux安装板,会把此值这是为60

可用下面的命令临时修改此项参数:

echo 10 >/proc/sys/vm/swappiness

若要永久修改此项配置,需要编辑/etc/sysctl.conf, 并增加一下内容:

# vim /etc/sysctl.conf
vm.swappiness=10
# sysctl -p

监测服务器的流量使用情况

一般来说,服务器的提供商一般都是会在后台提供这种检测的.

但是,总会有少数没有的情况, 尤其是在检测一些流量使用比较大的服务器上

解决方案:

1 vnstat, 小巧简单

   一篇文章关于在debian上的使用: https://debian-administration.org/article/330/Monitoring_your_bandwidth_usage_with_vnstat

2 wireshark, 这个是鼎鼎有名的

3 iptraf

4 cacti

十条命令帮你检查Linux服务器性能

来自于InfoQ, 写的真的是非常的好

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。

概述

通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。

uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top

其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。

下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。更多

对Nginx 日志的深度挖掘

来源于InfoQ, 写的非常的好

Nginx (读作Engine-X)是现在最流行的负载均衡和反向代理服务器之一。如果你是一名中小微型网站的开发运维人员,很可能像我们一样,仅Nginx每天就会产生上百M甚至数以十G的日志文件。如果没有出什么错误,在被 logrotate 定期分割并滚动删除以前,这些日志文件可能都不会被看上一眼。

实际上,Nginx日志文件可以记录的信息 相当丰富 ,而且格式可以定制,考虑到`$time_local`请求时间字段几乎必有,这是一个典型的基于文件的时间序列数据库。Nginx日志被删除以前,或许我们可以想想,其中是否蕴含着未知的金矿等待挖掘?

更多

crond BAD FILE MODE 解决办法

给piwik 设置好cron job 以后,过了一晚上竟然发现cronjob 没有执行,一看log,出现下面的错误:

[root@ga log]# cat cron |grep piwik
Sep 14 08:43:01 ga crond[2754]: (root) BAD FILE MODE (/etc/cron.d/piwik)
Sep 14 14:40:01 ga crond[2754]: (root) BAD FILE MODE (/etc/cron.d/piwik)
Sep 15 00:29:01 ga crond[2754]: (root) BAD FILE MODE (/etc/cron.d/piwik)

google 了一下才发现原来是我自作多情的把piwik这个文件改成了755.。而crond 不喜欢可写文件。。因此只要把这个文件的权限改为644 即可

chmod 644 piwik

就解决了问题

军哥LNMP 安装后一些基本的php 优化

军哥的LNMP 确实异常的稳定,但是一些安全措施做得太好了以至于好多程序不能好好运行,因此需要做一些基本的优化

php.ini 位于/usr/local/php/etc/php.ini, 你可以用php –ini 来查看ini 的具体位置

1) 编辑disable_functions, 去掉一些常用的函数,比如说scandir, chroot, exec, shell_exec 等等
2) 编辑memory_limit, 改为1024或者2048M 等等,根据你的实际情况而定
3) 编辑timezone, 可以改为America/New_York

Piwik 使用GeoIP 以及优化(一)

接上篇文章,开始给我的大部分网站使用piwik,但是使用piwik 首先需要的就是enable GeoIP

  1. GeoIP Module for Piwik

         Piwik 有四种方式来使用GeoIP, 分别是default, GeoIP(PHP), GeoIP(PECL), GeoIP(http or nginx)

        在高流量的网站,GeoIP PHP 就会显得速度慢很多,因此这里 GeoIP PECL 成为了piwik 的首选

      在piwik 的官方文档上有在ubuntu/debian 上安装pecl geoip 的办法,因此这里不再多说. 这篇文章主要说说如何安装GeoIP PECL 在RHEL系列的OS 上

      以CentOS为例,首先确保你的系统安装了PECL,如果没有的话就先google 一下安装PECL

     然后以root 执行下列命令

pecl install geoip

  然后有很大的可能性你会得到下面的error:

shtool at '/tmp/pear/temp/geoip/build/shtool' does not exist or is not executable.

  出现这个error 的原因在于/tmp 这个目录不允许执行可执行文件

  解决办法也很简单,就是更改pecl 的默认tmp 目录,比如改为/root/tmp

mkdir /root/tmp 
 pecl config-set temp_dir /root/tmp
 or
 pear config-set temp_dir /root/tmp

pecl config-set这个命令经常会出问题,因此建议使用pear config-set这个命令

更改完pecl 的tmp 默认目录以后,就可以顺利的执行pecl install geoip的命令了

安装完毕后,还剩下最后一件事: 配置php.ini, 添加geoip extension 和 目录

用你喜欢的编辑器,无论是是vi, vim 还是nano,编辑php.ini,添加如下代码:

[PHP]
 ;AFTER THE PHP SECTION NOT BEFORE
 extension=geoip.so

 

[gd] 
;AFTER THE gd SECTION NOT BEFORE 
geoip.custom_directory=/full/linux/path/to/piwik/misc

注意当使用pecl install geoip 的时候, extension=geoip.so 一般会自动添加到php.ini配置文件中,在这里你需要确定下

Leaseweb VPS 是一个大坑。。。

接上篇文章,因为决定不再使用histats,所以准备上线piwik,自己来host website counter

看上了leaseweb 的 washington DC 的 Cloud, 8GB RAM, 8 Core 才30刀,实在便宜的很,没想到这才是坑的开始

首先,在order 页面尽管标注的是SSD storage,但是实际上只是SSD 的SAN, 是一个shared remote storage,因此 IO rate 和 local disk 的 SSD相比差的太远了,只能达到80Mbps. 对于piwik 这种对数据库读写非常频繁的应用来说,这是一个最大的坑

其次,Leaseweb 的Cloud 都是使用的DHCP 的IP assignment,这个在cloud中很常见, no complaint.  个人习惯问题一般喜欢把DHCP 改成static。。。讨厌的是leaseweb 竟然不是使用标准的 gateway XX.XX.XX.1 ( CIDR 是 /25), 而是使用的是XX.XX.XX.126…

就为了这个问题我debug了整个晚上。。。差点把centos的配置文件全部重写一遍。。

慎用histats.com

对于正规站点来说, google analytics 无疑是最好的选择

但是对于很多做站群或者website farm 的同学来说, 使用google analytics 会增大被google 关联的机会

因此一直在使用histats,号称全免费

可是今天晚上再debug 源代码的时候发现,所有使用histats 的站点都被添加了 dtscout.com和 dtscdn.com 的CDN JS, 而dtscout.com则是一家数据发现公司

由此可见histats 的免费使用是建立在把数据卖给dtscout.com的基础上

发现了这个问题,就要进行改正

准备把使用histats.com的站点全部迁移到piwik上去