mount options

首先要记住这句话:
性能的提高是以数据完整性的牺牲为代价的。

下面记录了一些常见的 mount options。

1. noatime, relatime
2.6.30 以后的内核,默认都是 relatime。该标志表示如果比 mtime 的时间旧,则更新,相比 atime,对系统的写会大大的减小,不过依然存在写的可能,因此,改成 noatime 会比较合适,实践下来,这个即使没有明显的性能提高也不会降低系统的性能。有点需要注意的是,mutt 以及 tmpwatch 会使用到 atime,不过前者发现不使用 atime 也完全可以工作,后者可以修改成使用 ctime。如果出于谨慎的目的,可以使用默认的 relatime。
可以针对文件或者目录做 noatime 的设置:
# chattr +A filename
# chattr -R +A  /var/spool/

当然也可以在 fstab 文件里面针对某个分区做,加上 noatime 就好了。做完需要 remount:
# mount -o remount /mnt/
# cat /proc/mounts

2. ordered, writeback, journal
ext4 存在 3 种数据模式,writeback, ordered, journal。
* writeback 只记录 metadata,不记录 data。他是可以先写 metadata 再写 data,当机器崩溃后,会造成数据的丢失,但是不会造成数据的错乱。该模式是性能最高的一种。
* ordered  只记录 metadata,但是他提供了一种事物的模式,在有新的 metadata 需要写入前,跟其相关联的数据快会先写入。总的来说,该模式的性能比 writeback 稍低,但是比 journal 快的多。
* journal 同时记录 metadata 以及 data。此模式性能最低。

默认是 ordered,该选项只会让 metedata 被记录。根分区的设置有点特殊,需要像下面这样:
rootflags=data=writeback

Continue reading

ext3/ext4 的鉴别确认

之前绝大部分的磁盘都是 ext4 的格式,出于某些原因将某些磁盘换成了 ext3,现在要找出这批 ext3 的磁盘。下面的 sdb 实际是被格式化成了 ext3 的,但是通过 mount -a 的时候忘记修改参数了:
$ cat /etc/fstab

/dev/sdb1 /data/data1 ext4 defaults,noatime 0 2
/dev/sdc1 /data/data2 ext4 defaults,noatime 0 2

于是挂在上去了之后,通过 df 查看到的依然是 ext4 的格式:
$ df -T
Filesystem     Type      1K-blocks      Used  Available Use% Mounted on

/dev/sdb1      ext4     1922790980 267416068 1557699236  15% /data/data1
/dev/sdc1      ext4     1951519468 785431756 1068412036  43% /data/data2

而 sdb1 挂着 ext4 的名号实际只能干 ext3 的活,虽然最终目的达到了: 将 sdb1 变成 ext3,但是外表的 ext4 会迷惑其他的人,通过 mount 得到的结果同样有偏差:
$ mount

/dev/sdb1 on /data/data1 type ext4 (rw,noatime)

后来通过 tune2fs 算是勉强解决的了问题,可以发现,ext3 的 Filesystem features 比 ext 4 的少的多,另外通过 "Filesystem created" 可以确认这点,下面第一个是 ext3 的,第二个是 ext4 的:
$ sudo tune2fs -l /dev/sdb1
tune2fs 1.42 (29-Nov-2011)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file

Filesystem created:       Thu Feb  7 11:40:38 2013
Last mount time:          Thu Feb  7 11:48:48 2013
Last write time:          Thu Feb  7 11:48:48 2013

$ sudo tune2fs -l /dev/sdc1
tune2fs 1.42 (29-Nov-2011)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize

Filesystem created:       Fri Dec  7 00:47:53 2012
Last mount time:          Thu Feb  7 11:37:31 2013
Last write time:          Thu Feb  7 11:37:31 2013

后来偶然发现了个叫 blkid 的命令:
$ sudo blkid
/dev/sdb1: UUID="640159da-3352-4d66-b3ab-a27cde554606" TYPE="ext3"
/dev/sda1: UUID="59ce12a0-c6a1-4981-aef3-9112ef7ddfe8" TYPE="ext4"

这下终于找到了真容 :-)

修改 ext4 中的 reserverd blocks

出于安全原因,ext4 默认会为每个分区保留 5% 的空间,该空间做紧急情况之用,普通用户没有权限使用这 5% 的空间,只有 root 用户可以。但是对于 300G 的 SSD 来说,一块就有 15G 的空间无法使用,现在需要释放一部分的空间。

查看 sda1 的磁盘信息:
$ tune2fs -l /dev/sda1

将 reserverd block 调至 2%:
$ sudo tune2fs -m 2 /dev/sda1

ref:
http://www.wiredrevolution.com/system-administration/free-ext3-reserved-blocks-with-tune2fs