Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1151066
  • 博文数量: 309
  • 博客积分: 6093
  • 博客等级: 准将
  • 技术积分: 3038
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-03 17:14
个人简介

linux学习记录

文章分类

全部博文(309)

文章存档

2014年(2)

2012年(37)

2011年(41)

2010年(87)

2009年(54)

2008年(88)

分类:

2010-08-25 15:37:22

                     RHCE学习笔记

 

连载

RHEL5.4文件系统管理(2)

http://blog.chinaunix.net/u3/111899/showart_2197823.html

 

下面是在linux下面怎么进行文件系统的管理,

 

硬盘的零磁道的第一个扇区叫做MBR512B),分区表就存放在MBR里面,由于的分区表只有64B,一个分区占用16B,所以在系统中只可以分四个主分区,而逻辑驱动器的分区表存放在每个分区的第一个扇区(super block)里面,所以一块硬盘上要想分超过四个分区,就必须分三个主分区和一个扩展分区,然后在扩展分区里面分逻辑驱动器

 

linux系统下面,系统并不识别分区有多少,而是通过分区的起始柱面数,分区的结束柱面数来识别一个分区的大小。

一个柱面数大概为7.8M

一个扇区为512B

 

linux内核支持的最大分区数量

IDE      63

SCSI    15

如果想要分更多的分区,就必须用逻辑驱动器,

 

linux下面如何管理分区呢?

可以使用fdisk  -l 这条命令来查看分区的信息

[root@localhost ~]# fdisk -l

 

Disk /dev/sda: 16.1 GB, 16106127360 bytes

255 heads, 63 sectors/track, 1958 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks     Id     System

/dev/sda1   *           1           13        104391     83    Linux

/dev/sda2               14          535      4192965   83    Linux

/dev/sda3               536       1057     4192965   83    Linux

/dev/sda4              1058      1958     7237282+     Extended

/dev/sda5              1058      1188     1052226   82    Linux swap / Solaris

/dev/sda6              1189      1253     522081     83    Linux

[root@localhost ~]#

通过fdisk  -l这条命令显示的信息,磁盘的总大小为16.1G,每个分区的起始柱面数和结局柱面数。每个分区的id号是多少,system的类型。

看到/dev/sda1”*”代表该分区时引导分区,blocks后面多了一个“+,是代表给分区跨越了两个柱面。

 

下面在来学习怎么样进行磁盘分区

可以使用fdisk工具来进行磁盘分区

#Fdisk  /dev/sda 

[root@localhost ~]# fdisk /dev/sda

 

The number of cylinders for this disk is set to 1958.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

   (e.g., DOS FDISK, OS/2 FDISK)

 

Command (m for help):

进入了这个界面,就代表进入了fdisk的管理模式

在这个时候,可以按“m”来获得帮助

 

Command (m for help): m

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)

 

Command (m for help):以安装上面的提示来进行磁盘分区,

按“l可以列出以知的文件类型,

按“n”来添加分区,

按“d”来删除分区,

按“t”来改变分区的类型,

按“q”退出,

按“w”保存。

等等,还有很多。

 

下面就来添加一块新的分区

Command (m for help): n

First cylinder (1254-1958, default 1254):

Using default value 1254

Last cylinder or +size or +sizeM or +sizeK (1254-1958, default 1958): +500M

按“n”来添加,下面问从哪个柱面数开始,直接回车,选默认的。最后问这个分区分多大,我们分了500M

还可以做很多事情,还可以按“t”来改变分区的类型,

这个时候按“p”来查看刚刚的操作,

Command (m for help): p

 

Disk /dev/sda: 16.1 GB, 16106127360 bytes

255 heads, 63 sectors/track, 1958 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks     Id     System

/dev/sda1   *        1               13       104391     83     Linux

/dev/sda2             14            535      4192965   83     Linux

/dev/sda3             536         1057     4192965   83     Linux

/dev/sda4            1058        1958     7237282+  5     Extended

/dev/sda5            1058        1188     1052226   82     Linux swap / Solaris

/dev/sda6            1189        1253      522081    83     Linux

/dev/sda7            1254        1315      497983+  83     Linux

 

Command (m for help):

可以看到已经分了一个/dev/sda7这个新的分区。

Command (m for help): wq

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

 

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

The kernel still uses the old table.

The new table will be used at the next reboot.

Syncing disks.

[root@localhost ~]#

这个时候,已经保存并退出了,但是它给了一个警告:说设备忙,必须要下次重启才行。可以执行一条命令来更新分区(很重要的一条命令)

[root@localhost ~]# partprobe /dev/sda

[root@localhost ~]#

到目前为止,分区已经完成了,

但分区并不能够正常使用,所以还有格式化分区。

 

格式化分区

#mkfs.ext3  /dev/sda7

[root@localhost ~]# mkfs.ext3 /dev/sda7

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

124928 inodes, 497980 blocks

24899 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=67633152

61 block groups

8192 blocks per group, 8192 fragments per group

2048 inodes per group

Superblock backups stored on blocks:

        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

 

Writing inode tables: done                           

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 36 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost ~]#

还可以在格式化的时候指定分区的block size 的大小

[root@localhost ~]# mkfs.ext3 -b 4096 /dev/sda7

这个时候这个分区就可以使用了,但是必须挂载。

 

挂载分区

#Mount  /dev/sda7  /mnt

[root@localhost ~]#

[root@localhost ~]# mount /dev/sda7 /mnt/

[root@localhost ~]#

[root@localhost ~]# df -h

Filesystem            Size     Used      Avail      Use%   Mounted on

/dev/sda3              3.9G     2.5G    1.3G       68%       /

/dev/sda6              494M   11M    458M      3%        /home

/dev/sda2              3.9G     1.8G    2.0G       47%      /var

/dev/sda1              99M     14M    81M       15%       /boot

tmpfs                    188M     0        188M     0%        /dev/shm

/dev/sda7              471M   11M    437M     3%        /mnt

[root@localhost ~]# cd /mnt/

[root@localhost mnt]# ls

lost+found

 

下面关于文件系统的卷标

卷标是另外一个识别设备的方法

可以使用命令来查看分区的卷标

#e2label  /deb/sda7

[root@localhost ~]# e2label /dev/sda7

 

[root@localhost ~]#

下面来给/dev/sda7添加一个卷标

[root@localhost ~]# e2label /dev/sda7 /disk

[root@localhost ~]# e2label /dev/sda7

/disk

[root@localhost ~]#

当然,也可以使用卷标的方法挂载分区

[root@localhost ~]# umount /dev/sda7

[root@localhost ~]# mount LABEL=/disk /mnt/

[root@localhost ~]# df

Filesystem           1K-blocks      Used      Available     Use%     Mounted on

/dev/sda3              4061572   2589456   1262468      68%         /

/dev/sda6              505604     10545       468955        3%          /home

/dev/sda2              4061572   1799208   2052716      47%        /var

/dev/sda1              101086     13588       82279          15%        /boot

tmpfs                    192132         0           192132         0%         /dev/shm

/dev/sda7              482214     10544       446771        3%          /mnt

[root@localhost ~]# cd /mnt/

[root@localhost mnt]# ls

lost+found

[root@localhost mnt]#

 

还可以使用mount命令不加任何参数来查询系统中所有的设备,

#mount

[root@localhost ~]# mount

/dev/sda3 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/sda6 on /home type ext3 (rw)

/dev/sda2 on /var type ext3 (rw)

/dev/sda1 on /boot type ext3 (rw)

tmpfs on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

none on /proc/fs/vmblock/mountPoint type vmblock (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

/dev/sda7 on /mnt type ext3 (rw)

[root@localhost ~]#

但是,mount命令只能够查询到系统中挂载的分区,没有挂载的分区查询不到

还可以用blkid来查询系统中所有的分区,没有挂载的分区也可以查到。

还有一条命令,也就是用来查询的。

#blkid

[root@localhost ~]# blkid

/dev/sda6: LABEL="/home" UUID="7f75811c-8844-4d6d-a065-f4a1d75602dc" TYPE="ext3"

/dev/sda5: LABEL="SWAP-sda5" TYPE="swap"

/dev/sda3: LABEL="/" UUID="7c54f96f-7d2b-4da9-a4bf-3b474e0e460d" TYPE="ext3"

/dev/sda1: LABEL="/boot" UUID="6663d1de-50d9-4cdf-a4f5-085cab5fa789" TYPE="ext3"

/dev/sda2: LABEL="/var" UUID="b5306518-306a-4fcb-bdd5-dd4063bca9fe" TYPE="ext3"

/dev/hdc: LABEL="RHEL/5.4 i386 DVD" TYPE="iso9660"

/dev/sda7: LABEL="/disk" UUID="3d68e924-8974-420d-81a9-aec7b9e95079" TYPE="ext3"

[root@localhost ~]#

 

下面来学习一个tune2fs这个工具(很强大)

Tun2fs这个工具主要是用来查询文件系统的参数

可以使用tun2fs  –l  /dev/sda7来查询/dev/sda7这个分区的详细信息

#tune2fs  -l  /dev/sda7

[root@localhost ~]# tune2fs  -l  /dev/sda7

tune2fs 1.39 (29-May-2006)

Filesystem volume name:   /disk

Last mounted on:              

Filesystem UUID:             3d68e924-8974-420d-81a9-aec7b9e95079

Filesystem magic number:  0xEF53

Filesystem revision #:        1 (dynamic)

Filesystem features:           has_journal resize_inode dir_index filetype needs_recovery sparse_super

Default mount options:      (none)

Filesystem state:               clean

Errors behavior:               Continue

Filesystem OS type:         Linux

Inode count:                    124928

Block count:                    497980

Reserved block count:     24899

Free blocks:                    471670

Free inodes:                    124917

First block:                       1

Block size:                      1024

Fragment size:                 1024

Reserved GDT blocks:     256

Blocks per group:            8192

Fragments per group:       8192

Inodes per group:            2048

Inode blocks per group:   256

Filesystem created:         Fri Feb 19 21:30:36 2010

Last mount time:             Fri Feb 19 23:01:52 2010

Last write time:               Fri Feb 19 23:01:52 2010

Mount count:                   4

Maximum mount count:   36

Last checked:                Fri Feb 19 21:30:36 2010

Check interval:              15552000 (6 months)

Next check after:           Wed Aug 18 21:30:36 2010

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:                     11

Inode size:                      128

Journal inode:                  8

Default directory hash:     tea

Directory Hash Seed:      d49cd094-7bac-466f-bce7-f36e70b277b0

Journal backup:               inode blocks

[root@localhost ~]#

在这个里面,可以看到很多信息,可以看到工具的版本1.39版本,可以看到文件系统的卷标,最后一次挂载在哪里,文件系统的UUID是多少,还可以看到文件系统的状态,文件系统的类型,还有Inode count block count

还有空余的inode 和空闲的block .还可以看到block size。还可以看到文件系统是什么时候创建的,最后一次挂载在哪里等等很多信息。

 

下面学习如何用tune2fs这个工具来将ext2文件系统来转成ext3的文件系统

这个过程是在线,是不会丢失数据的,但是不能够从ext3装成ext2.的文件系统这样会丢失数据的。

[root@localhost ~]# mount | grep /dev/sda7

/dev/sda7 on /mnt type ext2 (rw)

[root@localhost ~]#

可以看到,现在/dev/sda7ext2的文件系统类型。

/boot下面的数据复制到/mnt,方便等下实验

[root@localhost ~]# cp /boot/* /mnt/

cp: omitting directory `/boot/grub'

cp: omitting directory `/boot/lost+found'

[root@localhost ~]# cd /mnt/

[root@localhost mnt]# ls

config-2.6.18-164.el5      initrd-2.6.18-164.el5kdump.img  System.map-2.6.18-164.el5

initrd-2.6.18-164.el5.img  symvers-2.6.18-164.el5.gz       vmlinuz-2.6.18-164.el5

[root@localhost mnt]#

我们已经添加了一些文件到/dev/sda7里面,现在就开始将ext2的文件系统转换成ext3的文件系统。

转换命令:

#tune2fs  -j  /dev/sda7

[root@localhost ~]# tune2fs  -j  /dev/sda7

tune2fs 1.39 (29-May-2006)

Creating journal inode: done

This filesystem will be automatically checked every 38 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override

在使用blkid这个命令来查看一下转换是否成功,

[root@localhost ~]# blkid

/dev/sda6: LABEL="/home" UUID="7f75811c-8844-4d6d-a065-f4a1d75602dc" TYPE="ext3"

/dev/sda5: LABEL="SWAP-sda5" TYPE="swap"

/dev/sda3: LABEL="/" UUID="7c54f96f-7d2b-4da9-a4bf-3b474e0e460d" TYPE="ext3"

/dev/sda1: LABEL="/boot" UUID="6663d1de-50d9-4cdf-a4f5-085cab5fa789" TYPE="ext3"

/dev/sda2: LABEL="/var" UUID="b5306518-306a-4fcb-bdd5-dd4063bca9fe" TYPE="ext3"

/dev/hdc: LABEL="RHEL/5.4 i386 DVD" TYPE="iso9660"

/dev/sda7: UUID="2254c9c7-6d9f-41ea-9c40-ddef8ab15959" SEC_TYPE="ext2" TYPE="ext3"

[root@localhost ~]#

可以看到/dev/sda7原来是ext2,后来变成了ext3的文件系统

[root@localhost ~]# cd /mnt/

[root@localhost mnt]# ls

config-2.6.18-164.el5      initrd-2.6.18-164.el5kdump.img  System.map-2.6.18-164.el5

initrd-2.6.18-164.el5.img  symvers-2.6.18-164.el5.gz       vmlinuz-2.6.18-164.el5

[root@localhost mnt]#

看到了,原先的数据都没有丢失,

其实ext2ext3文件系统不同的是ext3只是多了一个日志功能。运用tune2fs工具为ext2文件系统增加了一个日志区,所以就变成了ext3的文件系统

 

下面我再运用tune2fs来调整分区的预留的block count

首先来查询一下/dev/sda7的预留block count

[root@localhost ~]# tune2fs -l /dev/sda7 | grep "Block count"

Block count:              497980

可以看到分区默认的预留block count %5,预留block count 就是保存分区大小的%5将是不可以进入数据的,只有其他的%95才是可以写入数据的,预留block count 的意义在于防止这个分区被你写爆了,从而造成服务起不来,当然也可以用tune2fs工具来改变预留block count

现在就开始调整分区的block count

#tune2fs   -m  10  /dev/sda7

[root@localhost ~]# tune2fs -m 10 /dev/sda7

tune2fs 1.39 (29-May-2006)

Setting reserved blocks percentage to 10% (49798 blocks)

[root@localhost ~]#

已经将block count 调整成%10

在来使用tune2fs  -l  /dev/sda7来查看block count

[root@localhost ~]# tune2fs -l /dev/sda7 | grep "Block count"

Block count:              49798

[root@localhost ~]#

 

下面再运用tune2fs工具来给分区添加一个默认的挂载项

首先来查看一下/dev/sda7有没有默认的挂载选项

[root@localhost ~]# tune2fs -l /dev/sda7 |grep acl

[root@localhost ~]#

可以看到/dev/sda7这个分区的默认挂载选项是空的

在去看看其他的分区有没有这儿选项

[root@localhost ~]# tune2fs -l /dev/sda3 |grep acl

Default mount options:    user_xattr acl

[root@localhost ~]#

可以看到/dev/sda3分区有挂载一个挂载选项

这个挂载选项就是acl选项

文件系统的acl属性是为了文件的acl功能,只有分区有acl属性,所以文件才会有acl的功能

默认情况下,在系统安装的系统创建的分区就已经有了acl的属性,而在后面的分区将要手动添加

下面给/dev/sda7添加一个acl属性

添加命令

#tune2fs  -o  acl  /dev/sda7

[root@localhost ~]# tune2fs  -o  acl  /dev/sda7

tune2fs 1.39 (29-May-2006)

[root@localhost ~]#

在使用tune2fs  -l  /dev/sda7来查看一下acl属性是否添加上去了。

[root@localhost ~]# tune2fs -l /dev/sda7 |grep acl

Default mount options:    acl

[root@localhost ~]#

可以看到的文件系统就已经有了一个acl属性

acl属性立即生效,可以用这条命令

[root@localhost ~]# mount -o remount,acl /dev/sda7

[root@localhost ~]# mount | grep /dev/sda7

/dev/sda7 on /mnt type ext2 (rw,acl)

[root@localhost ~]#

可以看到文件系统的acl属性就立即生效了。

 

关于文件系统的检查功能(fscek

首先来讨论一下为什么要关闭文件系统的fscek的功能,

[root@localhost ~]# tune2fs -l /dev/sda7 | grep "mount count"

Maximum mount count:      38

先来看一下,这个参数的作用。最大的挂载次数。如果挂载次数达到38次的时候,计算机就会认为我们对这个文件系统进行频繁的操作,从而进行fscek的功能,当然这个功能我要也可以不要。

文件系统的检查功能默认是打开的,有需要的时候也可以将它关闭。

如何用tune2fs工具来关闭文件系统的检查功能

使用命令,

# tune2fs -c0 -i0 /dev/sda7

[root@localhost ~]# tune2fs -c0 -i0 /dev/sda7

tune2fs 1.39 (29-May-2006)

Setting maximal mount count to -1

Setting interval between checks to 0 seconds

[root@localhost ~]#

已经关闭了文件系统的检查功能

在使用tune2fs –l /dev/sda7来查看,

[root@localhost ~]# tune2fs -l /dev/sda7 |grep Check

Check interval:           0 ()

[root@localhost ~]#

可以看到,文件系统的fscek的功能就已经关闭了。

 

 

阅读(797) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~