admin 管理员组

文章数量: 887017


   一、文件系统的基本组成和文件系统结构

   1.Linux 系统的基本组成

图例:

   Linux系统由Linux内核和一系列GNU库及程序组成。根据其所处的位置,从内向外依次分为:内核、运行期库和系统程序、shell、实用工具程序四个层次。外层向内层提出相关请求,递归调用到内核完成外部硬件管理或计算命令,然后将结果逐级返回到外部调用程序
   Linux通过虚拟文件系统支持多个不同的文件系统,在不同的系统之间共享资源。Linux默认的文件系统是ext3

   大多数由windows平台转来的用户在使用linux文件系统的时候都会感到困惑。linux文件系统与windows文件系统有很大的差别。本文设身处地的为新手介绍他们的不同点并且向新手介绍linux的文件系统。

  作为开端,只有一个单独的顶级目录结构。所有一切都从root开始,用'/'代表,并且延伸到子目录。DOS/Windows有不同的分区同时目录都存于分区上。linux则通过'加载'的方式把所有分区都放置在root下制定的目录里。windows下最接近于root的是c:。
  一句话总结:Windows下,目录结构属于分区;Linux下,分区属于目录结构。

  在windows下,启动时检测不同的分区并被赋予一个分区字母。在linux下除非你加载一个分区或设备,否则系统不会知道那个分区的存在。这看上去也许不是访问分区或设备的最方便的方式,但他提供了伟大的机动性。

  这种构建的方式被称为统一的文件系统,超越了windows所使用的方式。举个使用/usr的例子。这个目录包含了大多数的系统可执行文件。在Linux文件系统下,你可以选择把它加载为其他分区甚至网络上的其他计算机。系统不会感知其中的不同,因为它表现出的只是本地目录结构下众多的目录中的一个而已。有多少次你希望在windows下移动可执行文件和数据,而得到的是不得不去修改注册表或干脆蓝屏?你可曾奢望过移动c:到其他分区上?

  新手容易困惑的另一点是斜杠'/'的使用,在DOS/Windows下使用的是反斜杠'\'.

  在linux中,windows的c是用类似/c/windows/system来表示的。Linux是免费的系统。在windows之前,Unix已经存在了很久。从DOS开始使用'/'选项而'\'作为目录分隔符。

  更加麻烦的是Linux同样选择了大小写敏感。这意味着字母的大小写变得非常重要。所以在这种情况下THIS和ThIs是不同的。这个规定会使dos用户遇到很多麻烦。

   2.linux系统的文件系统结构 

   现在我们来看一看linux文件系统目录结构的规划。下面是在root下'ls-p'的结果:

   bin/ dev/ home/ lost+found/ proc/ sbin/ usr/ boot/ etc/ lib/ mnt/root/ tmp/ var/

   Linux的文件系统与目录结构 (图例):

   目录树的主要部分有root(/)、/usr、/var、/home等等。下面是一个典型的linux目录结构如下:
/ 根目录
/bin 存放必要的命令
/boot 存放内核以及启动所需的文件等
/dev 存放设备文件
/etc 存放系统的配置文件
/home 用户文件的主目录,用户数据存放在其主目录中
/lib 存放必要的运行库
/mnt存放临时的映射文件系统,我们常把软驱和光驱挂装在这里的floppy和cdrom子目录下。
/proc 存放存储进程和系统信息
/root 超级用户的主目录
/sbin 存放系统管理程序
/tmp 存放临时文件的目录
/usr包含了一般不需要修改的应用程序,命令程序文件、程序库、手册和其它文档。
/var包含系统产生的经常变化的文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等。建议单独的放在一个分区。

(1)/usr目录

典型的/usr目录如下:
/X11R6 存放X window系统
/bin 存放增加的用户程序
/dict 存放字典
/doc 存放追加的文档
/etc 存放设置文件
/games 存放游戏和教学文件
/include 存放C开发工具的头文件
/info 存放GNU信息文件
/lib 存放库文件
/local 存放本地产生的增加的应用程序
/man 存放在线帮助文件
/sbin 存放增加的管理程序
/share 存放结构独立的数据
/src 存放程序的源代码
   由于/usr中的文件不和特定的计算机相关,也不会在通常使用中修改,因此可以通过网络共享这个目录(文件系统),这样,当管理员安装了新的软件之后,所有共享这一文件系统的计算机均可以使用新的软件。

(2)/etc目录

   配置文件的特点:

       文本文件传递参数,定制环境
   配置文件类型:
       与主机信息相关的配置文件
       与系统引导登录的相关的配置文件
       与文件系统相关的配置文件
       与系统管理相关的配置文件
       与系统服务相关的配置文件
(3)/usr/local目录

   第三方软件经常安装在此目录下


   二、挂载外部设备

   1.挂载U盘

   现在的Usb设备很多,如mp3,u盘,读卡器等,但在linux上不一定被认出来,比如说我的读卡器+1g mmc卡通过mount命令能够被red hat linux挂载,但我的mp3和清华紫光的u盘确不能够被识别,在网上搜索了很多的方法,但都不成功,现把自己总结的经验分享出来。

   插入U盘之后,按照下面的步骤:

   ◆1、fdisk -l /dev/sd*

   fdisk -l 列出指定设备的分区表信息。由于usb盘是被模拟为scsi设备访问,所以会被自动命名为sd*。

   通常这一步就能找到U盘,如果U盘有指示灯也会亮,表示被找到。

   ◆2、如果执行上一个命令没有反应,或者某些信息显示模块没有加入

   可以lsmod查看一下是否有usb-storage scsi_mod sd_mod模块。

   没有就modprobe [module],添加所缺模块。

   然后再试就ok

   ◆3、最后就是把U盘mount上去,这里需要先在mnt目录下面建一个usb目录

   mount /dev/sda /mnt/usb

   某些系统需要指定文件系统的类型,可以用

   mount -t vfat /dev/sda /mnt/usb


   2.挂载硬盘

   情况一:知道windows文件系统格式,和windows个盘对应/dev/下的sda* 文件时,只需要添加  

   /dev/sda* /media/“新建的文件夹名” “文件系统格式” defaults,utf8,umask=000 0 0

   情况二:在不知道windows文件系统格式,不知道windows各盘对应的硬盘文件sda*时:  

       (1)首先通过命令su进入超级用户权限  

       (2)执行命令ls /dev/sda*

       这时会列出硬盘文件,有的5、6个,有的更多,一般在10个以下。设硬盘文件数量为Numble_of_sda  

       (3)依次执行下面命令,创建文件夹,并手动挂载硬盘。

           mkdir media/sda1  

           mount /dev/sda1 /media/sda1

           mkdir media/sda2  

           mount /dev/sda2 /media/sda2

           ………

           mkdir media/sda9

           mount /dev/sda1 /media/sda9(如果Numble_of_sda=9)

       (4)然后执行df -T

           在文件系统列表中查看已手动挂载的硬盘  

           文件系统 1K-块 已用 可用 已用% 挂载点  

           /dev/sda8 ext3 26004224 3262624 21420660 14% /
           varrun tmpfs 225432 88 225344 1% /var/run
           varlock tmpfs 225432 0 225432 0% /var/lock
           procbususb usbfs 10240 96 10144 1% /proc/bus/usb
           udev tmpfs 10240 96 10144 1% /dev
           devshm tmpfs 225432 0 225432 0% /dev/shm
           lrm tmpfs 225432 17580 207852 8% /lib/modules/2.6.17-10-generic/volatile
           /dev/sda1 vfat 10231392 8134888 2096504 80% /media/sda1
           /dev/sda5 vfat 20462832 17126864 3335968 84% /media/sda5
           /dev/sda6 vfat 20462832 13325616 7137216 66% /media/sda6  

       (5)从上面列表下边可以看到sda1 sda5 sda6可以挂载,那么我们只需要将

           /dev/sda1 /media/sda1 vfat defaults,utf8,umask=000 0 0
           /dev/sda5 /media/sda5 vfat defaults,utf8,umask=000 0 0
           /dev/sda6 /media/sda6 vfat defaults,utf8,umask=000 0 0

   添加到/etc/fstab这个文件的末尾,就可以在每次启动系统时,自动挂载文件系统了。注意vfat是文件系统的格式,要和df -T列出的列表中的属性值一样,有可能是fat32等格式。然后将/media/下没有挂载文件系统的文件夹如sda2 sda3 sda4 sda7 sda8删除。  

   这里只是根据我机子的文件系统,给出了需要添加的内容,具体操作过程中,要参照df -T列表内容。


   3.挂载光驱

Linux将每一个物理设备都映射成了一个文件,这些文件都放在了/dev文件(linux中目录也是文件)下面,光驱映射成的文件就是一个名为cdrom的文件。mount命令是挂载光驱的基本命令,其后可以跟参数。在挂载光驱之前首先要选好挂载点,强烈建议在不要将文件直接挂载/***的下面,这里我将文件挂载到了/mnt/cdrom下面cdrom是新建的文件。整个过程详细描述如下:


操作过程:

[OK_008@CentOS4 ~]$ mount -t auto /dev/cdrom /mnt/cdrom

mount: only root can do that --一般用户无法挂载cdrom,只有root用户才可以操作。

[OK_008@CentOS4 ~]$


--切换用户操作:

[root@CentOS4 /]# mount -t auto /dev/cdrom /mnt/cdrom

mount: mount point /mnt/cdrom does not exist --/mnt/cdrom目录不存在,需要先创建。

[root@CentOS4 /]# cd /mnt

-bash: cd: /mnt: No such file or directory

[root@CentOS4 /]#

[root@CentOS4 /]# mkdir -p /mnt/cdrom --创建/mnt/cdrom目录

[root@CentOS4 /]# ls

bin dev home lib media mnt proc sbin srv tmp var

boot etc initrd lost+found misc opt root selinux sys usr

[root@CentOS4 /]# mount -t auto /dev/cdrom /mnt/cdrom --挂载cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only --挂载成功

[root@CentOS4 /]# ls -l /mnt/cdrom --查看cdrom里面内容


参数

-V 显示程序版本

-h 显示辅助讯息

-v 显示较讯息,通常和 -f 用来除错。

-a 将 /etc/fstab 中定义的所有档案系统挂上。

-F 这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。

-f 通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。

-n 一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。

-s-r 等于 -o ro

-w 等于 -o rw

-L 将含有特定标签的硬盘分割挂上。

-U 将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。

-t 指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。

-o async 打开非同步模式,所有的档案读写动作都会用非同步模式执行。

-o sync 在同步模式下执行。


-o atime 或-o noatime

当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。


-o auto 或-o noauto 打开/关闭自动挂上模式。

-o defaults 使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.

-o dev 或-o nodev-o exec 或-o noexec 允许执行档被执行。

-o suid 或-o nosuid 允许执行档在 root 权限下执行。

-o user 或-o nouser 使用者可以执行 mount/umount 的动作。


-o remount

将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。


-o ro 用唯读模式挂上。

-o rw 用可读写模式挂上。

-o loop= 使用 loop 模式用来将一个档案当成硬盘分割挂上系统。


范例

将 /dev/hda1 挂在 /mnt 之下。

#mount /dev/hda1 /mnt

将 /dev/hda1 用唯读模式挂在 /mnt 之下。

#mount -o ro /dev/hda1 /mnt


拓展:


   mount   -t   iso9660   /dev/cdrom   /mnt/cdrom       挂光驱  
   mount   -t   vfat   /dev/fd0   /mnt/floppy           挂软驱     (文件内型可以自己选)
   mount -t vfat -o rw,utf8,umask=000 /dev/sda1 /media/USB

   linux系统默认挂载的windows分区中文显示不正常。光驱中的中文也不能正常显示.解决方法如下:

   1 自动挂载
   修改/etc/fstab 在挂载参数中增加iocharset=utf8
   示例如下:

/dev/sda5       /media/sda5     vfat    iocharset=utf8,defaults,umask=0        0       0
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto,iocharset=utf8     0       0
   我的是sata硬盘。/dev/sda5是硬盘的一个分区。/dev/hda是光驱。其中"umask=0"表示普通用户也有读写的权限。

   2 手动挂载
   挂载的时候加上参数-o iocharset=utf8
   示例如下:

       $ sudo mount -o iocharser=utf8 /dev/sdb1 /media/usb

   mount命令详解
   功能:加载指定的文件系统。
   语法:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点]
   用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入文件
   /etc/fastab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。 使用umount命令卸载设备时,记录将被清除。


   常用参数和选项:
   -a 加载文件/etc/fstab中设置的所有设备。
   -f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
   -F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
   -h 显示在线帮助信息。
   -L<标签> 加载文件系统标签为<标签>的设备。
   -n 不将加载信息记录在/etc/mtab文件中。
   -o<选项> 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括:
   async 以非同步的方式执行文件系统的输入输出动作。
   atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
   auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
   defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
   dev 可读文件系统上的字符或块设备,取消选项为nodev。
   exec 可执行二进制文件,取消选项为noexec。
   noatime 每次存取时不更新inode的存取时间。
   noauto 无法使用-a参数来加载。
   nodev 不读文件系统上的字符或块设备。
   noexec 无法执行二进制文件。
   nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
   nouser 使一位用户无法执行加载操作,默认设置。
   remount 重新加载设备。通常用于改变设备的设置状态。
   ro 以只读模式加载。
   rw 以可读写模式加载。
   suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
   sync 以同步方式执行文件系统的输入输出动作。
   user 可以让一般用户加载设备。

   -r 以只读方式加载设备。
   -t<文件系统类型> 指定设备的文件系统类型。常用的选项说明有:
   minix Linux最早使用的文件系统。
   ext2 Linux目前的常用文件系统。
   msdos MS-DOS 的 FAT。
   vfat Win85/98 的 VFAT。
   nfs 网络文件系统。
   iso9660 CD-ROM光盘的标准文件系统。
   ntfs Windows NT的文件系统。
   hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。
   auto 自动检测文件系统。
   -v 执行时显示详细的信息。
   -V 显示版本信息。
   -w 以可读写模式加载设备,默认设置。



简单用法:
fat32的分区
   mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom (mount -t
   vfat -o iocharset=cp936 /dev/hda7 /mnt/cdrom)
ntfs的分区
   mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom
iso文件
   mount -o loop /abc.iso /mnt/cdrom
软盘
   mount /dev/fd0 /mnt/floppy
USB闪存
   mount /dev/sda1 /mnt/cdrom 说明: /mnt/cdrom 目录必须存在

  所有/etc/fstab内容 mount -a

   可以指定文件格式"-t 格式", 格式可以为vfat, ext2, ext3等.

镜像文件:
   mount fileName mountPoint -o loop,fileName是镜像文件名(*.iso,*.img),其它的不用说了,跟上面一样。用例:如我有一个a.iso光盘镜像文件,mount a.iso a -o loop,这样进入目录a你就能浏览a.iso的内容了,*.img文件的用法一样。

   显示中文方面,如果是fedora core 1 的话,用utf8更好
   mount -o iocharset=uft8 /dev/hda1 /mnt/c
   mount -o iocharset=uft8 /dev/sda1 /mnt/usb
   mount -t smbfs //ip_addr/share/dir /mnt/smb/share -o
   iocharset=uft8,username=name, password=passwd


开机就mount上windows下的分区
   自动将windows的d盘挂到/mnt/d上,用vi打开/etc/fstab,加入以下一行
   /dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0
   注意,先得手工建立一个/mnt/d目录
   mount局域网上其他windows机器共享出的目录(bjchenxu)
   mount -t smbfs -o username=guest,password=guest //machine/path /mnt/cdrom


 
  

   三、磁盘管理

   1. 磁盘管理的基本概念
   linux系统中所有的硬件设备都是通过文件的方式来表现和使用的,我们将这些文件称为设备文件,在Linux下的/dev目录中有大量的设备文件,根据设备文件的不同,又分为字符设备文件和块设备文件。
字符设备文件的存取是以字符流的方式来进行的,一次传送一个字符。常见的有打印机,终端(TTY)、绘图仪和磁带设备等等,字符设备文件有时也被称为“raw” 设备文件。
块设备文件是以数据块的方式来存取的,最常见的设备就是磁盘。系统通过块设备文件存取数据的时候,先从内存中的buffer中读或写数据。而不是直接传送数据到物理磁盘。这种方式有效的提高了磁盘的I/O性能。
   关于硬盘设备文件的概念,我们在第二章已经进行了初步的介绍,这里进行更深入的讲述。

   1.1 磁盘设备在linux下的表示方法
   现在常见的磁盘类型有IDE并口硬盘、STAT串口硬盘以及SCSI硬盘,不同类型的硬盘在linux下对应的设备文件名称不尽相同,linux下磁盘设备常用的表示方案有两种:
   方案一:
   主设备号+次设备号+磁盘分区编号
   对于IDE硬盘:hd[a-z]x
   对于SCSI硬盘:sd[a-z]x
   方案二:
   (主设备号+[0-n],y)
   对于IDE硬盘:(hd[0-n],y)
   对于SCSI硬盘:(sd[0-n],y)
   主设备号代表设备的类型,可以唯一地确定设备的驱动程序和界面,主设备号相同的设备是同类型设备,即,使用同一个驱动程序,比如hd表示IDE硬盘,sd表示SCSI硬盘,tty表示终端设备等。
次设备号代表同类设备中的序号,“a-z”就表示设备的序号。如/dev/hda表示第一块IDE硬盘,/dev/hdb表示第二块IDE硬盘。同理,/dev/sda以及/dev/sdb分别表示第一、第二块SCSI硬盘。在有些情况下,系统只有一块硬盘,但是设备文件却显示为hdb,这与硬盘的跳线有关,只用知道设备表示的意思就行了。
磁盘分区编号,用“x”表示在每块磁盘上划分的磁盘分区编号。在每块硬盘上可能会划分一定的分区,分区的意思类似与windows中C盘、D盘的概念,针对每个分区,linux用/dev/hdax或者/dev/sdbx表示,这里的“x”代表第一块IDE硬盘的第“x”个分区和第二块SCSI硬盘的第“x”个分区。
除了用“a-z”表示同类硬盘的序号,也可以用“0-n”表示硬盘的序号,第二种方案中的“y”是一个数字,从“1”开始,表示磁盘分区编号。比如,(hd0,8)与hda7是等同的,表示第一块IDE硬盘的第七个分区,而(sd4,3)等同与sde2,表示第5块SCSI硬盘的第二个分区。

   1.2 设备的挂载与使用
   在windows下,用户如果使用某些设备,如光盘或者软盘时,只需将设备放入相应的驱动器,然后系统自动加载,就可以通过对应的设备盘符,如G(光驱所在的盘符)盘、A盘(软驱盘符)来读取数据,但是在linux系统下,没有盘符的概念,对应的是磁盘分区,对任何设备的使用都需要通过挂载(mount)的方式实现,要完成挂载,需要满足3个条件:
        挂载磁盘分区的文件系统类型
        要挂载分区对应的设备文件
        已经建立好的一个目录作为挂载点
   对于磁盘分区的文件系统,linux下最常用的是ext2/ext3,关于如何在磁盘建立文件系统,在下个章节会有详细讲述。
挂载分区对应的设备文件在上面已经讲述,linux下所有设备文件存放在/dev目录下,因此对应的设备文件一般是/dev/hda1、/dev/sdc6等等。
挂载点就是在linux上建立的一个目录,通过这个目录建立了操作系统和磁盘存取的入口,也就是说将设备挂载到这个目录后,对这个目录的任何操作就相当于对设备的操作。linux系统默认的挂载点目录为/mnt或者/media,我们也可以建立自己的挂载点。
在进行挂载设备前必须注意:用pwd命令查看当前所在的目录是否是挂载点目录下,如果是,请用cd命令切换到其它目录下,不然mount时会提示“device busy”的错误。
如果想退出某个设备,必须进行卸载操作,卸载命令为umount,语法为umount 挂载点,例如要想弹出光驱,按光驱弹出按钮是没用的,只有先进行卸载(umount  /mnt/cdrom)操作,然后才能弹出光驱。
   请看下面的一个例子,通过df命令查看当前系统的分区情况:
   [root@data1 ~]# df -h
   Filesystem            Size   Used   Avail   Use%    Mounted on
   /dev/sda5             15G   429M    14G      4%         /
   /dev/sda9             328G  195M    311G     1%        /oracle
   /dev/sda8             7.6G   146M   7.1G     2%       /tmp
   /dev/sda6             9.5G   151M   8.9G     2%       /home
   /dev/sda3             15G    3.8G    9.7G    29%      /usr
   /dev/sda2             15G    309M   14G      3%       /var
   /dev/sda1             289M   16M     259M    6%       /boot
   tmpfs                 3.9G    0     3.9G     0%      /dev/shm
   /dev/sdb1             86G    9.8G    76G     2%      /mnt/stor
   根据命令的输出我们可以知道:
    左边第一列“Filesystem”项显示了每个分区对应的设备文件名,由设备文件名可知,此系统有两块硬盘,并且是SCSI硬盘,分别是/dev/sda和/dev/sdb。在/dev/sda设备上又划分了7个磁盘分区,而/dev/sdb设备上仅仅划分了一个分区。
    第二列“Size”项显示了每个磁盘分区空间的大小。
    第三列“Used”项显示了已经使用的磁盘空间大小。
    第四列“Avail”项显示了可用的磁盘空间大小。
    第五列“Use%”项显示了可用磁盘空间占用磁盘分区总空间的百分比。
    最后一列“Mounted on”项显示了磁盘分区对应的挂载点目录名。
   如果我们要卸载/dev/sdb1设备,只需执行umount /mnt/stor即可,当然卸载前要保证此分区的所有程序没有在使用中。

   1.3 磁盘分区的划分标准
    在第二章安装操作系统时,我们就详细讲述了如何给磁盘进行分区,因为分区对于linux系统的稳定和安全非常重要,合理正确的划分磁盘分区有助于系统的稳定运行和数据的安全保障,下面我们介绍如何合理的划分磁盘分区以及这种划分带来的好处。
   磁盘的分区由主分区、扩展分区和逻辑分区组成,在一块硬盘上,主分区的最大个数是4个,其中扩展分区也算一个主分区,在扩展分区下可以建立很多逻辑分区,所以主分区(包括扩展分区)范围是从1-4,逻辑分区从5开始,对于逻辑分区,Linux 规定它们必须建立在扩展分区上,而不是建立在主分区上。
   主分区的作用是用来启动操作系统的,主要存放操作系统的启动或引导程序,因此建议操作系统的引导程序都放在主分区,比如linux的/boot分区,最好放在主分区上。扩展分区只不过是逻辑分区的“容器”。实际上只有主分区和逻辑分区是用来进行数据存储的,因而可以将数据集中存放在磁盘的逻辑分区中,由于磁盘分区作用的不同,linux对主分区大小也有限制,因此,对于大量的数据,一定要存储在逻辑分区中。
    经过上面的阐述,一个合理的分区方式为:主分区在前,扩展分区在后,然后在扩展分区中划分逻辑分区;主分区的个数加上扩展分区个数要控制在四个之内。
   通过fdisk –l命令可以显示当前系统分区的所有信息:
   [root@data1 ~]# fdisk -l
   Disk /dev/sda: 437.9 GB, 437998583808 bytes
   255 heads, 63 sectors/track, 53250 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
      Device Boot      Start         End      Blocks   Id  System
   /dev/sda1   *           1          38      305203+  83  Linux
   /dev/sda2              39        1950    15358140   83  Linux
   /dev/sda3            1951        3862    15358140   83  Linux
   /dev/sda4            3863       53250   396709110    5  Extended
   /dev/sda5            3863        5774    15358108+  83  Linux
   /dev/sda6            5775        7049    10241406   83  Linux
   /dev/sda7            7050        8069     8193118+  82  Linux swap / Solaris
   /dev/sda8            8070        9089     8193118+  83  Linux
   /dev/sda9            9090       53250   354723201   83  Linux
   Note: sector size is 4096 (not 512)
   Disk /dev/sdb: 943.7 GB, 943718400000 bytes
   255 heads, 63 sectors/track, 14341 cylinders
   Units = cylinders of 16065 * 4096 = 65802240 bytes
      Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1       14341   921552408   83  Linux
   对于输出每项的含义解释如下:
    Heads代表磁盘面数;sectors代表扇区数;每个扇区大小为0.5k,cylinders代表柱面数,因此,硬盘空间总大小=磁面个数*(扇区个数*每个扇区的大小512)*柱面个数。
    左边第一列“Device”项显示了磁盘分区对应的设备文件名
    第二列“Boot”项显示是否为引导分区,上面的/dev/sda1就是引导分区。
    第三列“Start”项表示每个磁盘分区的起始位置,以柱面为计数单位。
    第四列“End”项显示了每个磁盘分区的终止位置,以柱面为计数单位。
    第五列“Blocks”项显示了磁盘分区的容量,以K为单位。
    第六列“Id”项显示了磁盘分区对应的ID,根据分区的不同,分区对应的ID号也不同,linux下用83代表主分区和逻辑分区,用5代表扩展分区,而用82代表交换分区。用7代表NTFS分区等等。
    第七列“System”项的含义与第六列基本相同,都是表示不同的分区类型。
   由此可知,此系统从/dev/sda1到/dev/sda4为主分区,而/dev/sda4为扩展分区,在/dev/sda4下又建立了/dev/sda5到/dev/sda9共5个逻辑分区,其中/dev/sda7为交换分区。


   2. 利用fdisk工具划分磁盘分区
   fdisk是linux下一款功能强大的磁盘分区管理工具,可以观察硬盘的使用情况,也可以对磁盘进行分割,linux下类似与fdisk的工具还有cfdisk、parted等,它们都有各自的优点,本文推荐fdisk,因为它简单容易上手,是各个linux发行版最经常使用的磁盘分区工具,下面具体介绍这个工具的使用。

   2.1  fdisk参数含义介绍
   使用格式:
   fdisk [-l] [-b SSZ] [-u] device
   选项含义:
    -l:查询指定设备的分区状况,如:fdisk –l  /dev/sda,如果“-l”选项后面不加任何设备名称,则查看系统所有设备的分区情况。
    -b SSZ:将指定的分区大小输出到标准输出上,单位为区块。
    -u:一般与“-l”选项配合使用,显示结果将用扇区数目取代柱面数目,用来表示每个分区的起始地址。
    device:要显示或操作的设备名称。
   fdisk的使用分为两个部分,查询部分和交互操作部分。通过fdisk device即可进入命令交互操作界面:然后输入m显示交互操作下所有可使用的命令。
   [root@localhost /]# fdisk /dev/sdb
   Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
   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
      v   verify the partition table
      w   write table to disk and exit
      x   extra functionality (experts only)
   对于交互界面下的命令含义解释如下:
    a:设定硬盘启动区
    b:编辑一个BSD类型分区
    c:编辑一个DOS兼容分区
    d:删除一个分区
    l:查看指定分区的分区表信息
    m:显示fdisk每个交互命令的详细含义
    n:增加一个新的分区
    o:创建一个DOS分区
    p:显示分区信息
    q:退出交互操作,不保存操作的内容
    s:创建一个空的Sun分区表
    t:改变分区类型
    v:校验硬盘分区表
    w:写分区表信息到硬盘,保存操作退出
    x:执行高级操作模式。
   交互命令很多,但是经常用到的只有d、l、m、n、p、q、w这几个选项,只要熟练掌握这几个参数的含义和用法,简单的磁盘划分操作不成问题。

   2.2  fdisk实例讲解
   为了更清楚的介绍fdisk的使用方法,接下来我们通过实例讲解的方式,从磁盘分区的创建显示、修改、删除3个方面介绍fdisk的使用方法和技巧。
1.创建磁盘分区
   在现有的linux系统上增加了一块硬盘,系统对应的设备名为/deb/sdb,下面通过fdisk命令对这个磁盘进行分区划分,请看下面的实例讲解:
   [root@localhost /]# fdisk /dev/sdb
   The number of cylinders for this disk is set to 1044.
   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)
   Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
   Command (m for help): n  #输入“n”创建一个新的磁盘分区
   Command action
      e   extended
   #这里的“e”代表创建一个扩展分区
      p   primary partition (1-4)
   #这里的“p”代表创建一个主分区
   p  #首先创建一个主分区
   Partition number (1-4):
   Value out of range.
   Partition number (1-4): 1      #主分区的编号从1到4,这里输入1
   First cylinder (1-1044, default 1):   #这里指定分区的起始值,以柱面为单位计数,默认从1开始,直接回车即可。
   Using default value 1  
   Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): +1024M
   #这里是指定分区大小,直接输入需要的分区大小即可,例如“+1024M”表示此分区大小为1024M,“+8G”表示此分区大小为8G。
   Command (m for help): p     #这里输入“p”显示分区情况,从下面可以看到,此分区已经建立起来。
   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux

   Command (m for help): n   #继续创建一个分区

   Command action
      e   extended
      p   primary partition (1-4)
   p
   Partition number (1-4): 2
   First cylinder (126-1044, default 126):
   Using default value 126
   Last cylinder or +size or +sizeM or +sizeK (126-1044, default 1044): +1024M

   Command (m for help): p

   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   Command (m for help): n
   Command action
      e   extended
      p   primary partition (1-4)
   e  #这里输入“e”创建一个扩展分区
   Partition number (1-4): 3   #由于扩展分区也属于主分区,而分区号1和2已经被使用,因此这里输入3。当然输入4也可以,要遵循的一个原则是:输入的分区号码必须在1-4之间,而且号码未被使用。
   First cylinder (251-1044, default 251):  #这里仍然用缺省的输入值,直接回车即可。
   Using default value 251
   Last cylinder or +size or +sizeM or +sizeK (251-1044, default 1044):  #根据磁盘分区的划分标准,如果要建立扩展分区,最好将磁盘所有剩余空间都分给了扩展分区,这里直接输入回车,磁盘剩余空间全部分给扩展分区。
   Using default value 1044

   Command (m for help): p #从下面可以看出,我们已经划分了两个主分区和一个扩展分区。
   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805    5  Extended

   Command (m for help): n

   Command action
      l   logical (5 or over)   #这里的“l”表示创建一个逻辑分区
      p   primary partition (1-4)   #这里的“p”表示创建一个主分区,此时我们已经不能创建主分区了,因为所有剩余的磁盘空间都已经分给扩展分区。
   l  #这里输入“l”创建一个逻辑分区
   First cylinder (251-1044, default 251):   #这里回车即可
   Using default value 251
   Last cylinder or +size or +sizeM or +sizeK (251-1044, default 1044): +1024M    #这里输入要创建的逻辑分区大小,含义与上面创建主分区相同。
   Command (m for help): p   #显示已经创建的磁盘分区情况,从下面可以看出,已经创建了两个主分区和一个扩展分区,在扩展分区下创建了一个逻辑分区。
   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805    5  Extended
   /dev/sdb5             251         375     1004031   83  Linux

   Command (m for help): n #接下来继续创建一个逻辑分区
   Command action
      l   logical (5 or over)
      p   primary partition (1-4)
   l
   First cylinder (376-1044, default 376):  #输入回车即可
   Using default value 376
   Last cylinder or +size or +sizeM or +sizeK (376-1044, default 1044):  #这里仍输入回车,将剩余的所有磁盘空间给此逻辑分区。
   Using default value 1044

   Command (m for help): p

   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805   5  Extended
   /dev/sdb5             251         375     1004031   83  Linux
   /dev/sdb6             376        1044     5373711   83  Linux
2.修改磁盘分区类型
   Linux下根据id值区分不同的磁盘分区类型,fdisk默认创建的主分区和逻辑分区类型为linux,对应的ID为83,扩展分区默认为Extended,对应的ID为5,如果我们想要修改分区类型或者创建一个非默认的分区类型,可以用fdisk的交互参数“t”来指定,紧接上面的实例,继续介绍如下:
   [root@localhost /]# fdisk /dev/sdb
   Command (m for help): p
   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805    5  Extended
   /dev/sdb5             251         375     1004031   83  Linux
   /dev/sdb6             376        1044     5373711   83  Linux

   Command (m for help): t  #输入t改变磁盘分区的类型
   Partition number (1-6): 5  #要改变的磁盘分区对应的分区号,这里输入的5代表/dev/sdb5
   Hex code (type L to list codes): L  #通过“l”可以查看分区类型对应的ID值
    0  Empty           1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot  
    1  FAT12           24  NEC DOS         81  Minix / old Lin bf  Solaris        
    2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
    3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
    4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
    5  Extended        41  PPC PReP Boot   85  Linux extended  c7  Syrinx        
    6  FAT16           42  SFS             86  NTFS volume set da  Non-FS data    
    7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
    8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility  
    9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt        
    a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access    
    b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
    c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor      
    e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
    f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT        
   10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
   11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
   12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
   14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
   16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
   17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
   18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep        
   1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT            
   1c  Hidden W95 FAT3 75  PC/IX          
   Hex code (type L to list codes): 7  #从上面的输出可知,7对应的分区类型为HPFS/NTFS
   Changed system type of partition 5 to 7 (HPFS/NTFS)

   Command (m for help): p #可以看到,分区类型已经改变。

   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805    5  Extended
   /dev/sdb5             251         375     1004031    7  HPFS/NTFS
   /dev/sdb6             376        1044     5373711   83  Linux
3.分区的删除
   删除分区的fdisk参数是“d”,然后指定要删除的分区号,此分区就被删除了。
   [root@localhost /]# fdisk /dev/sdb
   Command (m for help): p

   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805    5  Extended
   /dev/sdb5             251         375     1004031    7  HPFS/NTFS
   /dev/sdb6             376        1044     5373711   83  Linux

   Command (m for help): d  #这里输入删除分区的指令
   Partition number (1-6): 6  #这里输入6表示要删除的分区是/dev/sdb6

   Command (m for help): p  #可以看到,/dev/sdb6已经被删除

   Disk /dev/sdb: 8589 MB, 8589934592 bytes
   255 heads, 63 sectors/track, 1044 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         125     1004031   83  Linux
   /dev/sdb2             126         250     1004062+  83  Linux
   /dev/sdb3             251        1044     6377805    5  Extended
   /dev/sdb5             251         375     1004031    7  HPFS/NTFS
4.保存分区设置
   在所有分区操作完成后,输入fdisk的交互指令“w”即可保存分区设置,如果不保存分区设置而退出的话,输入“q”指令,如下所示:
   [root@localhost /]# fdisk /dev/sdb
   Command (m for help): w  #保存分区设置退出
   The partition table has been altered!
   Calling ioctl() to re-read partition table.
   Syncing disks.
   到此为止,磁盘分区划分完毕。但是这些分区还是不能使用的,还需要将分区格式化为需要的文件系统类型,linux下默认支持ext2/ext3、vfat等文件系统,这里将分区格式化为ext3文件系统,然后通过mkfs.ext3命令格式化分区/dev/sdb1,操作如下:
   [root@localhost /]# mkfs.ext3 /dev/sdb1
   分区格式化完毕,最后一步是挂载(mount)此设备,操作如下:
   [root@localhost /]# mkdir /data
   [root@localhost /]# mount /dev/sdb1 /data
   [root@localhost /]# df|grep /data
   /dev/sdb1               988212     17652    920360   2% /data
   在上面操作中,我们首先建立了一个挂载目录/data,然后通过mount命令将设备挂载到了对应的目录下,挂载成功后,通过df命令就可以看到对应的分区。

使用df -TH命令看一下当前挂载的分区和大小,看到我们刚分的分区了吧!


如果想每次系统重启都能自动挂载该分区可修改/etc/fstab文件,在最后加一段 /dev/sdb1    /www    ext3    defaults 1 2 (格式说明:/dev/sdb1 代表哪个分区  ext3是该分区的格式 defaults 是挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async) ,1是使用dump是否要记录,0是不要。 2是开机时检查的顺序,是boot系统文件就为1,其他文件系统都为2,如不要检查就为0)。


四、swapfile实现(增加虚拟内存分区大小):

第一种方法:新建分区

1、fdisk/dev/sda

2、n新建一个分区,新建分区要求硬盘上还有空闲空间可用

注意:分出一个区做为交换分区,分区类型应为primary,extend不能做为交换分区。

3、t 修改该分区的类型为交换分区(交换分区id为82)

4、w 保存分区表

5、使更改后的分区表立即生效 partprobe

6、将sda5分区格式化为交换分区 mkswap/dev/sda5

7、查看交换分区大小 free

8、挂载交换分区swapon /dev/sda5

9、用free命令查看新的交换分区大小,发现交换分区已经增加了。

10、卸载交换分区:swapoff/dev/sda5

第二种方法:建立虚拟内存文件

1、创建512M的空文件 ddif=/dev/zero of=/tmp/swap1 bs=1M count=512

2、格式化为交换分区 mkswap/tmp/swap1

3、查看交换分区大小 free

4、挂载交换分区swapon /tmp/swap1

如果要去掉新增加的swap文件,使用 swapoff /tmp/swap1即可。


五、磁盘配额


1. 磁盘配额的功能
   所谓磁盘配额就是管理员可以对本域中的每个用户所能使用的磁盘空间进行配额限制,即每个用户只能使用最大配额范围内的磁盘空间。磁盘配额监视个人用户卷的使用情况,因此,每个用户对磁盘空间的利用都不会影响同一卷上其它用户的磁盘配额。磁盘配额具有如下特性:
   磁盘配额可以对每个用户的磁盘使用情况进行跟踪和控制。这种跟踪是利用文件或文件夹的所有权来实现的。当一个用户在Linux ext 2/3分区上拷贝或存储一个新的文件时,他就拥有对这个文件的所有权,这时磁盘配额程序就将此文件的大小计入这个用户的磁盘配额空间。
   当设置了磁盘配额后,分区的报告中所说的剩余空间,其实指的是当前这个用户的磁盘配额范围内的剩余空间。 磁盘配额程序对每个分区的磁盘使用情况是独立跟踪和控制的,而不论它们是否位于同一个物理磁盘。
   操作系统可以对磁盘配额进行监测,它可以扫描磁盘分区,监测每个用户对磁盘空间的使用情况,并用不同的颜色标识出磁盘使用空间超过报警值和配额限制的用户,这样就方便了对于磁盘配额的管理。
   登录到相同计算机的多个用户互不干涉其它用户的工作能力;一个或多个用户不独占公用服务器上的磁盘空间;在个人计算机的共享文件夹中,用户不使用过多的磁盘空间。
   综上所述,可以看出磁盘配额提供了一种基于用户和分区的文件存储管理,使得管理员可以方便的利用这个工具合理的分配存储资源,避免由于磁盘空间使用的失控可能造成的系统崩溃,从而提高了系统的安全性。

2、实现磁盘配额的步骤图解
   要实现磁盘配额,请使用以下步骤:
   (1) 检查Linux 内核是否打开磁盘配额支持。
   (2) 修改/etc/fstab,对所选文件系统激活配额选项。
   (3) 更新装载文件系统,使改变生效。
   (4) 在该文件系统引导时建立aquota.user文件。
   (5) 扫描相应文件系统,用quotacheck命令生成基本配额文件。
   (6) 用edquota命令,对特定用户采用配额限制。
   (7) 最后,用命令激活配额。

操作步骤如图1 。



   3.实现Linux的磁盘配额的详解
(1) 检查内核情况
   检查当前内核是否支持quota,当前内核配置文件在/boot下
   # grep  CONFIG_QUOTA /boot/config-2.4.20
   CONFIG_QUOTA=y
   CONFIG_QUOTACTL=y
   如果有上列输出,则表示当前内核已经支持quota。如果当前内核不支持quota,需要重新编译内核将quota support编译进核心:
   File systems  --->   Quota support  如图2 。



图2 配置当前内核支持quota


(2) 修改/etc/fstab,对所选文件系统激活配额选项
   以根用户身份使用vi编辑器来给需要配额的文件系统添加 usrquota 和(或) grpquota 选项:
   :
   LABEL=/           /               ext3    defaults        1 1
   LABEL=/boot       /boot           ext3    defaults        1 2
   LABEL=/home       /home           ext3    defaults,usrquota 1 2
   none              /dev/shm        tmpfs   defaults        0 0
   /dev/hda2         swap            swap    defaults        0 0
   在上面的例子中,/home 文件系统上启用了用户配额。
(3) 重新挂载文件系统
   添加了 userquota 和 grpquota 选项后,重新挂载每个相应 fstab 条目被修改的文件系统。如果某文件系统没有被任何进程使用,使用 umount 命令后再紧跟着 mount 命令来重新挂载这个文件系统。如果某文件系统正在被使用,要重新挂载该文件系统的最简捷方法是重新引导系统或者使用命令:“# mount -o remount /home”。
(4) 在该文件系统建立aquota.user文件
   # touch /home/aquota.user
   # chmod 600 /aquota.user
(5) 扫描相应文件系统,用quotacheck命令生成基本配额文件
   运行 quotacheck 命令,quotacheck 命令检查启用了配额的文件系统,并为每个文件系统建立一个当前磁盘用来的表。该表会被用来更新
[url=http://product.it168/list/b/0501_1.shtml]操作系统
的磁盘用量文件。此外,文件系统的磁盘配额文件也被更新。 要在文件系统上创建配额文件( aquota.user 和 aquota.group ),使用 quotacheck 命令的 -c 选项。例如,如果用户和组群配额都为 /home 分区启用了,在 /home 目录下创建这些文件:
   quotacheck -acug /home  
   -a 选项意味着在 /etc/mtab 中所有挂载了的非 NFS 文件系统都会被检查来决定是否启用了配额。 -c 选项指定每个启用了配额的文件系统都应该创建配额文件, -u 选项指定检查用户配额, -g 选项指定检查组群配额。
   如果 -u 或 -g 选项被指定,只有用户配额文件被创建。如果只指定了 -g 选项,只有组群配额文件会被创建。
   文件被创建后,运行以下命令来生成每个启用了配额的文件系统的当前磁盘用量表:
   quotacheck -avug  
   所用选项如下:
   a — 检查所有启用了配额的在本地挂载的文件系统
   v — 在检查配额过程中显示详细的状态信息
   u — 检查用户磁盘配额信息
   g — 检查组群磁盘配额信息
   quotacheck 运行完毕后,和启用配额(用户和/或组群)相应的配额文件中就会写入用于每个启用了配额的文件系统(如 /home )的数据。
   要定期运行它的最简单方法是使用 cron。以根用户身份,你既可以使用 crontab -e 命令来调度定期的 quotacheck,也可以在以下目录之一内放置一个运行 quotacheck 的脚本(使用最时候你需要的间隔期间):
   &#8226; /etc/cron.hourly
   &#8226; /etc/cron.daily
   &#8226; /etc/cron.weekly
   &#8226; /etc/cron.monthly
   最精确的配额统计数据可以在所分析的文件系统没有被活跃使用时获得。因此,cron 任务应该在文件系统被最少使用时调度。如果这一时间在使用配额的文件系统中并不统一,则使用多个 cron 任务在不同的时间为每个文件系统运行 quotacheck。
(6) 使用 edquota 命令分配磁盘配额。
   要为用户配置配额,以根用户身份在 shell 提示下执行以下命令:
   edquota -u username  
   为每个你想实现配额的用户执行该步骤。例如,如果在 /etc/fstab 中为 /home 分区( /dev/hda3 )启用了配额,执行了 edquota testuser 命令后,系统默认的编辑器
   中就会有如图3显示:

图3
   文件内有七个栏目:
  Filesystem => 进行配额管制的文件系统。
  blocks => 已经使用的区块数量(单位1KB)
  soft => block 使用数量的"软性"限制
  hard => block 使用数量的"硬性"限制
   inode => 已经使用的 inode 数量
  soft => inode 使用数量的"软性"限制
  hard => inode 使用数量的"硬性"限制
   edquota –t
   和 edquota 命令相似,这个命令也会在文本编辑器中打开当前的文件系统配额:
   Grace period before enforcing soft limits for users:
   Time units may be: days, hours, minutes, or seconds
   Filesystem Block grace period Inode grace period
   /dev/hdb1 10days 10days
   另外以上两个操作可以使用
   以上设置也可以使用 setquota 命令设置:
   setquota -u someone 0 0 3 5 /dev/loop0
   setquota -t 864000  864000  /dev/loop0
   ps. 864000 为 10 天的秒数. 一小时=3600秒, 一天=86400秒
(7) 磁盘配额完毕后,必须以 quotaon  -av 的命令启用配额管理。

4.管理磁盘配额
   如果配额被实现,它们就需要被维护 — 主要维护方式是观察。查看配额是否被超出并确保配额的正确性。 当然,如果用户屡次超出他们的配额或者持续地达到他们的软限,系统管理员就可以根据用户类型和磁盘空间对他们工作的影响来做出几种决策。管理员可以帮助用户来检索对磁盘空间的使用,也可以按需要增加用户的配额。
(1) 报告磁盘配额
   创建磁盘用量报告需要运行 repquota 工具。例如,repquota /home 命令会生成以下输出:
   *** Report for user quotas on device /dev/hda3
   Block grace time: 7days; Inode grace time: 7days
                       Block limits                File limits
   User            used    soft    hard  grace    used  soft  hard  grace
   -------------------------------------------
   root      --      36       0       0              4     0     0
   tfox      --     540       0       0            125     0     0
   testuser  --  440400  500000  
5500
00          37418     0     0
   要查看所有启用了配额的文件系统的磁盘用量,使用以下命令:
   repquota -a
   这份报告虽然看起来很简单,有几点仍需要做一下说明。显示在每个用户后面的 -- 是一种判断用户是否超出其块限度或内节点限度的快速方法。如果任何一个软限被超出,相应的 - 行就会被 - 代替;第一个 - 代表块限度,第二个代表内节点限度。 grace 列通常是空白。如果某个软限被超出,这一列就会包含过渡期中的剩余时间。如果过渡期已超过了,其中就会显示 none。
   (
2)磁盘配额的启用和禁用
   你可以不必把配额设置为 0 来禁用它们。要关闭用户和组群配额,使用以下命令:
   quotaoff -vaug
   如果 -u 或 -g 选项没有被指定,只有用户配额被禁用。如果只指定了 -g 选项,只有组群配额会被禁用。
   要重新启用配额,使用带有同样选项的 quotaon 命令。
   例如,要为所有文件系统启用用户和组群配额:
   quotaon -vaug
   要为指定文件系统(如 /home)启用配额:
   quotaon -vug /home
   如果 -u 或 -g 选项没有指定,那么仅用户配额会被启用。如果只指定了 -g 选项,仅组群配额会被启用。
   (
3)为组群分配配额
   配额还可以根据组群来分配。例如,要为 devel 组群设置组群配额,使用以下命令(在设置组群配额前,该组群必须存在):
   edquota -g devel
   以上命令在文本编辑器中显示现存的组群配额:
   Disk quotas for group devel (gid 505):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/hda3                    440400          0          0      37418        0        0
   修改限度,保存文件,然后配置配额。
   要校验组群配额是否被设置,使用以下命令:
   quota -g devel
总结:
   磁盘配额除了监视系统上使用的磁盘空间,你还可以通过实现磁盘配额来限制磁盘空间,因此当用户使用了过多的磁盘空间或分区将要充满时,系统管理员就会接到警告。磁盘配额可以为个体用户配置也可以为用户组配置。这种灵活性既能够给每个用户分配一个较小的配额来处理“个人”文件(如电子邮件和报告),又允许了他们正从事的项目能够拥有较大的配额(假定项目有自己的组群)。
   除此以外,配额不仅能够被设置成对所用磁盘块数量的控制,还能够被设置成对内节点数量的控制。由于内节点包含文件相关的信息,对内节点的控制能够控制可被创建的文件数量。
   另外我们还可以通过设置磁盘配额防范系统***:在大多数情况下******远程系统必须把***程序或后门程序上传到远程系统当中。如何才能切断***的这条后路呢?Linux文件系统中的磁盘配额功能就能帮助用户轻松实现对磁盘使用空间的管理。可以根据该用户在系统中的权限和使用情况,合理地为该用户指定使用空间,这样配置既不影响系统常规的操作,同时也加强了系统的
安全性。
   通常,如果服务器可以没有限制地执行写操作,那么都能成为塞满硬盘造成DOS***的途径,比如:向匿名FTP塞垃圾文件。这样也可以塞满硬盘空间。通过磁盘配额可以有效限制这类***。

转载于:https://blog.51cto/jiangzhi2013/1198470

本文标签: 文件系统 系统 Linux