linux如何设置文件系统大小,浅淡linux文件系统的优化与调整

ext2/ext3文件系统的优化

文件系统存储原理:

如图示,/dev/sda2被很多block所填充;而block的大小是固定的,如图上的1K;这个block就是文件在磁盘上存储的最小单位。当某个文件不超过1K时,OS会为它分配一个block;当文件大于1K时,OS会连续分配相应大小的block给该文件。

一、根据块大小及文件大小优化

当然,这个block的大小是可调的,不过默认情况下,linux只支持三种block大小,分别为:1024/2048/4096byte;如果你而要更大的block就必须去修改你的文件系统及相应的内核模块。

如果系统中存放的文件都不大,那么相应的block就可以设小一点;如果系统中存放的文件较大,那么相应的block就应该弄大一点。

想一想,如果block很小而文件很大,那么一个大的文件就会被分成很多小块;这样在读写文件的时候就会产生很多额外的开销。反之,亦然!

这样,我们就需要针对文件的大小对block进行相应的调整,这就所谓的文件系统调优!

那么,怎样指定block的大小呢?就是在用mkfs对磁盘进行格式化的时候!命令如下:

mkfs.ext3

-b 1024 /dev/sdb2

这样,我们就在格式化的时候为/dev/sdb2指定了相应block的大小--1024byte

下面开始我们的实验:

两个linux分区,一个分区的block大小为1024,另一个block的大小为4096;看看在它们上面存储相同的文件会有什么不同!

GO----->

[root@novice ~]# fdisk

-l /dev/sdb

[root@novice ~]# mkfs.ext3

-b 1024 /dev/sdb5

[root@novice ~]# mkfs.ext3

-b 4096 /dev/sdb3

现在,我们来挂载刚刚格式化好的两个分区:

[root@novice /]# mount /dev/sdb3

/mnt/sdb3

[root@novice /]# mount /dev/sdb5

/mnt/sdb5

[root@novice /]# ls -l /mnt/sdb[35]

/mnt/sdb3:

total 16

drwx------ 2 root root 16384 Jul 17

16:26 lost+found

/mnt/sdb5:

total 12

drwx------ 2 root root 12288 Jul 17

16:23 lost+found

向刚挂载的两个分区写入相同的文件:

[root@novice /]# mkdir /mnt/sdb3/test

[root@novice /]# mkdir /mnt/sdb5/test

[root@novice /]# echo

"Hi">/mnt/sdb3/test/test.txt

[root@novice /]# echo

"Hi">/mnt/sdb5/test/test.txt

查看两个分区内相同内容文件的大小:

[root@novice /]# ls -lh

/mnt/sdb[35]/test/test.txt

-rw-r--r-- 1 root root 3

Jul 17 16:40 /mnt/sdb3/test/test.txt

-rw-r--r-- 1 root root 3

Jul 17 16:40 /mnt/sdb5/test/test.txt

[root@novice /]# ls -lh

/mnt/sdb[35]/test

/mnt/sdb3/test:

total 4.0K

-rw-r--r-- 1 root root 3 Jul 17 16:40

test.txt

/mnt/sdb5/test:

total 1.0K

-rw-r--r-- 1 root root 3 Jul 17 16:40

test.txt

#虽然都是三个字节,但占用的磁盘空间明显不一样!这是为什么呢?还记得我们在格式化分区的时候指定给每个分区的block的大小吗?!是的!就是那个指定大小的block在作怪啦!

再来看一下:

[root@novice /]# du -sh

/mnt/sdb[35]/test

8.0K/mnt/sdb3/test

2.0K/mnt/sdb5/test

#为什么会是8K和2K呢?因为目录也要占磁盘空间的啦!

#由上面的例子显然可得:当文件较小时,分配较大的block会浪费很大的磁盘空间!

二、根据节点及块数目优化

读写的数据都是存储在block里的,在读写的时候要根据block的编号来寻址;编号可以如上图所示。如,File1需要两个block,就分配两个节点给它,并在索引区(上图左边的那上部分,里面记录了文件的相关信息,如位置,节点等等)内做好相应的记录。这样,在读写的时候会寻址两次。

但是,如果我们把两个block做成一个节点呢?如下图:

如上图,File1此时在索引区内的节点编号为1,它包含了两个block。这样在读写的时候只会寻址一次;相比之下,读写性能是不是有所提高呢!

可以使用如下命令指定磁盘分区里每个节点所包含的block数目:

mkfs.ext3 -b 4096

-i 8192 /dev/sdb2

这样,/dev/sdb2里的每个节点就包含了两个block.

上面命令中-i参数与-b参数后接数字的商就是一个节点包含的block数目。

三、文件系统调整工具tune2fs

tune2fs:

-l 查看文件系统相关信息

-c 设置强制自检的挂载次数即挂载count次后强制自检

-i 设置强制自检的间隔时间即间隔n

day后强制自检

-m 保留块的百分比,percentage为整数

-j

将ext2文件系统转换为ext3文件系统(不过,现在ext2应该很少用了,呵呵)

下面,分别看看这些选项的应用:

-l

选项

[root@novice /]#tune2fs -l /dev/sdb1

tune2fs 1.41.12

(17-May-2010)

Filesystem volume

name:

Last mounted on:

Filesystem UUID:

6e4bad5e-a423-481a-bccf-cbf6c13fceef

Filesystem magic

number: 0xEF53

Filesystem

revision #: 1 (dynamic)

Filesystem

features: has_journal ext_attr resize_inode dir_index filetype

needs_recovery sparse_super

Filesystem flags:

signed_directory_hash

Default mount

options: (none)

Filesystem state:

clean

Errors behavior:

Continue

Filesystem OS

type: Linux

Inode count:

12824

Block count:

51200

Reserved block

count: 2560

Free blocks:

44649

Free inodes:

12811

First block:

1

Block size:

1024

Fragment size:

1024

Reserved GDT

blocks: 199

Blocks per group:

8192

Fragments per

group: 8192

Inodes per group:

1832

Inode blocks per

group: 229

Filesystem

created: Sun Jul 17 11:37:29 2011

Last mount time:

Sun Jul 17 16:20:30 2011

Last write time:

Sun Jul 17 16:20:30 2011

Mount count:

2

Maximum mount

count: 34

Last checked:

Sun Jul 17 11:37:29 2011

Check interval:

15552000 (6 months)

Next check after:

Fri Jan 13 11:37:29 2012

Reserved blocks

uid: 0 (user root)

Reserved blocks

gid: 0 (group root)

First inode:

11

Inode size:

128

Journal inode:

8

Default directory

hash: half_md4

Directory Hash

Seed: 0fbff785-d343-45b2-9685-ca4cc45bc604

Journal backup:

inode blocks

#怎么样,信息量?嘿嘿.....不过你可以用正则表达式过滤出你想要的东东

-c选项:

通过-l选项,我们看到

Mount count:

2

Maximum mount

count: 34

说明/dev/sdb1已经被挂载了两次,当达到最大挂载次数34时,将进行强制自检(只在重启或开机的时候)。接下来,我们用-c参数来更改强制自检的挂载次数:

[root@novice /]#tune2fs -c 3 /dev/sdb1

tune2fs 1.41.12

(17-May-2010)

Setting maximal

mount count to 3

[root@novice /]#

tune2fs -l /dev/sdb1 | grep -i

"mount count"

Mount count:

2

Maximum mount

count: 3

#很显然,不解释哈!

#如果你不想强制自检的话,可以将强制自检的挂载次数设为负数,那个挂载次数怎么也不会为负的吧!

[root@novice /]#tune2fs -c -1 /dev/sdb1

tune2fs 1.41.12

(17-May-2010)

Setting maximal

mount count to -1

[root@novice /]#

tune2fs -l /dev/sdb1 | grep -i

"mount count"

Mount count:

2

Maximum mount

count: -1

#这样/dev/sdb1永远不会进行强制自检啦,哈哈哈!

-i选项:

通过前面的-l选项,看到

Last checked:

Sun Jul 17 11:37:29 2011

Check

interval: 15552000 (6 months)

Next check after:

Fri Jan 13 11:37:29 2012

强制自检的间隔时间为6个月。

接下来,我们用-i参数来更改强制自检的挂载次数:

[root@novice /]#

tune2fs -l /dev/sdb1 | grep -i

"check"

Last checked:

Sun Jul 17 11:37:29 2011

Check interval:

86400 (1 day)

Next check after:

Mon Jul 18 11:37:29 2011

#如果不相自检,为设置为0

[root@novice /]#

tune2fs -l /dev/sdb1 | grep -i

"check"

Last checked:

Sun Jul 17 11:37:29 2011

Check interval:

0 ()

#so

easy 啦,嘿嘿

-m选项:

保留块的百分比

通过前面的-l选项,我们再次看到

Reserved block

count: 2560

保留块为2560个。默认时,这个保留块为分区大小的5%;只有root用户才能使用。我们可以用-m参数来调整,使释放出一定量的磁盘空间。

[root@novice /]#

tune2fs -m 1 /dev/sdb1

tune2fs 1.41.12

(17-May-2010)

Setting reserved

blocks percentage to 1% (512 blocks)

[root@novice /]#

tune2fs -l /dev/sdb1 | grep -i "reserved"

Reserved block

count: 512

Reserved GDT

blocks: 199

Reserved blocks

uid: 0 (user root)

Reserved blocks

gid: 0 (group root)

#保留块数量从2560变成了512啦!

好啦,今天先现到这里,嘿嘿

写得很心虚,热烈欢迎各位批评指正!

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页