czs321 / Linux / 第十一章 文件系统

分享

   

第十一章 文件系统

2013-02-21  czs321


目标

学习操作系统,必须要掌握文件系统的定义。文件系统(File System)是整个计算机系统的一部分,被用来存放与管理文件。文件系统是由操作系统、系统程序、应用程序以及用户数据组成的。使用不同的文件系统,计算机的资源使用与管理就能达到不同的效果,有时这种差别还很大。本章介绍了文件系统的基本概念及其在Linux中的应用。

重点内容

        分区管理

        文件系统创建与维护

        磁盘限额

        文件和目录

        proc文件系统

        SWAP

        NFS

        RAID

        LVM


10.1 分区管理

10.1.1                             分区概念

10.1.1.1                          分区目的

分区是在硬盘的自由(free)空间(所谓自由空间,是指硬盘上没有被分区的部分)上创建的、将一块物理硬盘划分成多个能够被格式化和单独使用的逻辑单元的一种操作。

由于磁盘驱动器容量的不断增大,一些人开始考虑将所有格式化的空间合并为一大块是否明智。从技术角度上讲,某些文件系统不是为支持大于一定容量的磁盘驱动器而设计的。或者,某些文件系统可能会支持拥有巨大容量的较大的驱动器,但是由文件系统跟踪文件所强加于上的管理费用也随之变得过大。

解决这个问题的办法是将磁盘划分为分区(Partition)。每一分区都可以象一个独立的磁盘那样被访问。这是通过添加分区表(Partition Table)来做到的。分区表包括四个部分。每个部分都存放着定义单个分区所必需的信息,分区表所定义的分区不能超过四个。

对硬盘进行分区的目的主要有三个,一是使硬盘初始化,以便可以格式化和存储数据;二是用来分隔不同的操作系统,以保证多个操作系统在同一硬盘上正常运行;三是便于管理,可以有针对性地对数据进行分类存储,另外也可以更好地利用磁盘空间。

每个分区表项目都包含着该分区的几项重要的特征:

         在磁盘上分区开始和结束的地点(起止点)

         分区是否“活跃(Active)”

         分区的类型

10.1.1.2                          扩展分区

经过一段时间后,四个分区很明显变的不够用了。随着磁盘驱动器的不断增大,配置了四个相当大的分区后仍有剩余空间的可能性会越来越大。我们需要有一些创建更多分区的方法。

这就是扩展(Extended)分区。当一个分区被建立,其类型被设为扩展时,扩展分区表也被创建。简而言之,扩展分区就像一个独立的磁盘驱动器——它有自己的分区表,该表指向一个或多个分区——它们现在被称为逻辑分区(Logical partitions),与四个主分区(Primary partitions 相对,并完全包含在扩展分区之内。下图显示了一个磁盘驱动器,其中有一个主分区和一个包含两个逻辑分区的扩展分区(以及一些未分区的空闲空间)。

主分区与逻辑分区之间有一个区别——主分区只能有四个,但是可以存在的逻辑分区数量却无固定限制。不过,鉴于分区在Linux中可被进入的情况,最好不要在一个磁盘驱动器上定义 12 个以上的逻辑分区。

10.1.2                             fdiskparted命令

10.1.2.1                          fdisk

fdisk是传统的硬盘分区管理程序,甚至在dos中也存在。Linux中的fdisk是一个菜单式的交互程序。我们举例说明其使用方法,用fdisk命令开始对第二块SCSI硬盘的分区管理:

# fdisk /dev/sdb

Command (m for help):

首先系统会提示输入“m”来获取操作的帮助,你会看到在fdisk中可以做什么。其中有几个fdisk中最常用的命令:

d     删除一个分区                                  

n     增加一个新分区                               

p     查看现有分区情况                           

w    保存现有分区状况并且退出             

q     不保存已做的修改而退出                        

查看分区情况

对硬盘进行操作之前,先检查一下分区情况是很好的习惯。用p命令看一下:

Command (m for help): p                                                                                         

Disk /dev/sdb: 18.6 GB, 18679610880 bytes                                                          

255 heads, 63 sectors/track, 2271 cylinders                                                             

Units = cylinders of 16065 * 512 = 8225280 bytes                                                

Device Boot    Start    End    Blocks   Id   System                                 

/dev/sdb1        1     300   2409718+   83  Linux                                   

/dev/sdb2       301     550   2008125   83  Linux                                   

/dev/sdb3       551     2271  13823932+  5   Extended                           

/dev/sdb5       551     1000  3614593+   83  Linux                                 

/dev/sdb6       1001    2271  10209276   83  Linux                                 

我们可以看出这块SCSI硬盘总共是18.6GB大小,划分了5个分区,分区号码分别是12356。其中12是主分区,3是扩展分区,56是扩展分区中的逻辑分区(可以从开始和结束位置看出来)。

删除分区

如果想要删除某个分区,使用d命令,再选择分区号就可以了。

添加分区

使用n命令,首先确定是建立主分区还是扩展分区或者逻辑分区。然后再确定新的分区号即可。

退出fdisk

当修改全部完成时,可以选择w来保存退出;如果不保存结果,就用q,这样分区的更改不会被写入硬盘,原来的文件与数据也不会丢失。

parted

parted 允许用户建立,删除,重新设置和拷贝分区。这些特性为一个新的操作系统建立分区和重新组织磁盘使用时非常有用。它的使用类似fdisk,也是进入操作菜单之后进行相应设置与修改。

启动 parted,在 shell 提示下以root用户身份键入命令:

# parted /dev/hdb

/dev/hdb 是你要配置的IDE硬盘名称。我们会看到一个 (parted) 提示,如果键入 help,则可以查看可用命令的列表。下面是关于parted操作常用命令的解释:

命令

描述

check minor-num

执行文件系统的简单检查

cp from to

把文件系统从一个分区复制到另一个分区;from to 是分区的次要号码

help

显示可用的命令列表

mklabel label

为分区表创建磁盘标签

mkfs minor-num file-system-type

创建类型为 file-system-type 的文件系统

mkpart part-type fs-type start-mb end-mb

不创建新文件系统而制作分区

mkpartfs part-type fs-type start-mb end-mb

制作分区并创建指定的文件系统

move minor-num start-mb end-mb

移动分区

print

显示分区表

quit

Quit parted

resize minor-num start-mb end-mb

重新划分分区大小,从 start-mb end-mb

rm minor-num

删除分区

select device

选择另一个设备来配置

parted中操作一定要小心,因为进行的任何改变都会立即生效。

10.1.3                             分区的格式化

Linux中我们可以用mke2fs命令来格式化硬盘,这个命令可以将分区以ext2ext3 文件系统格式化。

              # mke2fs /dev/sdb1                     ext2格式化

              # mke2fs –j /dev/sdb2           ext3格式化

提示

mkfs还可以把分区以其他文件系统类型格式化成jfsreiserfs,甚至MSdosvfat。它实际上是一个格式化命令前端的程序,当用户做出文件系统类型选择,需要真正地开始格式化工作的时候,mkfs会调用相应的程序(mke2fsmkfs.jfsmkfs.reiserfs等)去完成。

我们应该以ext3来格式化分区,这样不但可以获得更高的磁盘访问速度,而且在意外断电之后,ext3日志文件系统能够更好地保护数据,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以追踪。故障开机检查时的速度非常快,通常只需要一秒钟。

10.1.4                             ext3文件系统的挂接

2.4.3.3    mountumount命令

mount用法举例:

# mount /dev/cdrom /mnt/cdrom 

/dev下的cdrom设备挂接到/mnt/cdrom目录下,然后我们进入/mnt/cdrom,就可以看到光盘中的内容。

# mount /dev/hdc2  /mydoc

/dev下的hdc2设备挂接到 /mydoc目录,hdc2表示硬盘的一个分区。

在终端界面中直接输入mount,不加任何参数,可以看到当前系统中已经挂接上的分区:

             

# mount                                                                       

/dev/sda2 on / type Ext3 (rw)                                         

none on /proc type proc (rw)                                         

usbdevfs on /proc/bus/usb type usbdevfs (rw)          

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

none on /dev/pts type devpts (rwgid=5mode=620)     

none on /dev/shm type tmpfs (rw)                                  

其中第一列是被挂接的设备,第二列是其挂接点,后面说明是以何种文件系统挂接上来的。

mount命令相对的有umount命令,可以用来把已经mount上的文件系统摘除,停止已经建立的挂接关系。使用umount加上相应的设备名称就可以了,如:

  # umount  /dev/sdc1                                                     

意为摘除/dev中的sdc1设备。被摘除的设备其内容就不可以从目录中的挂接点访问了,如果要访问,需要再次挂接。

格式化完毕之后,还要把分区挂接到当前的目录结构中,从而使用户可以访问它。在系统启动之后手工挂接,用mount命令。如:

              # mount  /dev/sdb1 /usr/local                                               

sdb1分区挂接到/usr/local目录下,就可以从/usr/local目录访问此分区的内容了。

10.1.5                             应用实例:添加新硬盘

一台Linux计算机中添加了一块新的IDE硬盘,容量是80GB。准备将其用于软件包存放的目的,分别放置RPM包和源程序。如何进行?

解决方案:当一块新硬盘加入时,通常都可以按三步来操作:分区、格式化、挂接。

1.              分区

因为需要存放两种不同的安装文件,可以把硬盘分为2个分区。

       # fdisk /hdb                  (注意IDE硬盘是hd

              Command action                                                                  

   e   extended                                                                  

   p   primary partition (1-4)                                                                   

进入之后执行n,系统会询问创建哪种分区:

Partition number (1-4):                                                          

p选择主分区。接着又需要选择分区号码,输入1

First cylinder (1-9765, default 1):                                           

输入1,回车。下面是选择起始柱面,用默认值即可。

       Last cylinder or +size or +sizeM or +sizeK (1-9765, default 9765):

选择结束柱面,或者规定分区大小。可以用+40000M来表示我们想创建一个40GB大小的分区,回车之后创建工作就结束了。用p看一下:

Device Boot   Start  End   Blocks   Id  System                      

/dev/hdb1           1   4881   38962316  83  Linux                        

可以看到第一个分区已经大功告成了。再用同样的方法建立第二个分区:

Device Boot   Start  End   Blocks   Id  System                      

/dev/hdb1           1   4881   38962316  83  Linux                        

/dev/hdb2    4882   9765   79823852  83  Linux                   

       w保存退出。

2.              格式化

# mkfs –t ext3 /dev/hdb1                                                            

# mkfs –t ext3 /dev/hdb2                                                            

注意在格式化结束后系统会提示这个文件系统会在被mount一定次数或者180天之后检查一次。这对ext2来说是必要的,而我们使用了ext3,就不必使这个功能了,按照提示将其关掉:

# tune2fs -i 0 /dev/hdb1                                                               

# tune2fs -i 0 /dev/hdb2                                                               

 

3.              挂接

可以创建/soft/rpm/soft/source两个目录,分别挂接两个分区:

# mount /dev/hdb1 /soft/rpm                                                        

# mount /dev/hdb2 /soft/source                                                    

进到两个目录,并拷贝一些文件测试一下,如果确定正常,可以把这两个分区加入/etc/fstab中去:

/dev/hdb1  /soft/rpm    ext3    defaults  0 0                           

/dev/hdb2  /soft/source  ext3    defaults  0 0                           

今后再重启机时就会自动挂接分区了。至此新硬盘添加完毕。

10.2  文件系统创建与维护

10.2.1      创建新的文件系统

当目前的文件系统的性能、功能或者稳定性不能满足我们需要的时候,可以考虑安装一个新的文件系统。我们推荐在安装新的文件系统时,尽量选用支持日志的文件系统如ext3ReiserFS等。有关文件系统类型的介绍在第二章《Linux基本概念》中。

安装新的文件系统,通常是以内核补丁的形式出现的。

10.2.1.1  准备工作

从下面的链接下载ext3补丁,注意对照你的内核版本:

从下面的链接下载并且安装util-linux工具包。这是用来在/etc/fstab文件中将ext3设置为auto而使用的:

从下面的链接下载并且安装e2fsprogs。用来生成ext3分区的新版mke2fs就包含在其中:

10.2.1.2  安装ext3

ext3补丁解压后,用下面的命令将补丁添加进当前内核,

                     # patch -p0 < ext3-2.4-0.x.y.patch

进入 /usr/src/linux目录后,编译内核:

               # make menuconfig                                  

# make dep                                                     

# make clean                                            

# make bzImage                                       

# make install                                    

# make module                                                

# make modules_install                      

然后编辑/etc/lilo.conf或者/boot/grub/menu.lst,使用新内核启动(关于内核编译与启动文件修改的详细内容见内核一章)。

启动之后就可以在/proc/filesystems文件中找到ext3的身影了。

10.2.1.3  使用ext3文件系统

下一步,可以用ext3来格式化新的分区:

# mke2fs –j /dev/sdc3          

如果需要把现有的ext2分区转化为ext3分区,就使用tune2fs命令,如:

                            # tune2fs –j /dev/sdc1          

/dev/sdc1原来是ext2,经过上面的操作就转化为ext3分区。参数j表示日志文件系统。这个命令类似于FAT转成NTFS文件系统的命令convert.exe

提示

       在安装了一个新的文件系统之后,最好先不要把重要的文件放进相应的分区里面。在测试运行了一段时间后,确认新的文件系统的安全性,再把重要的文件移入。

       文件系统转换的过程有可能存在危险,所以转换之前最好做好备份。

 

10.2.2      文件系统检查

日志文件系统并不是不产生问题,它也有可能被破坏。当一个ext3文件系统损坏时,需要首先卸载该设备,再用e2fsck修复.

# umount /data

# e2fsck -fy /dev/sda2    #  sda2就是从/data目录上摘除的文件系统分区

e2fsck使用的时候一般配合-f(强制检查)和-y(默认对所有问题回答yes)选项,这样无论文件系统是否完好,都会被检查,并且自动修复。下面还有一些选项可用:

-p    不提问而自动修复

 -n   不做任何更改

-c     检查磁盘坏块

-v     显示详细信息

 -b superblock   使用其他的超级块

-j external-journal  设置日志的的存放位置

ext3可以避免重启动时长时间的文件系统检查

 # tune2fs -i 0 -c 0 /dev/sda2

 

这个命令可以关闭文件系统检查,使ext3启动更快。

 

10.2.3      挂接文件与目录

Linux中,我们不但可以将整个分区中的文件系统挂接到某个目录中,还可以把文件与文件、目录与目录进行挂接,这种挂接方式一般称为链接(link),用ln命令实现。在文件中有两种形式的链接:硬链接(hard link)和软链接(symbolic link,或称符号链接)。

 

对一个文件进行硬链接操作,会为其创建一个副本,同时建立原文件与副本之间的链接关系。如果修改其中一个,与其链接的文件同时被修改。如果删除其中,其余的文件将不受影响。

而软链链接只是对源文件在新的位置建立一个快捷方式,通过这个快捷方式我们可以访问源文件,对链接文件的使用、引用都是直接调用源文件的。当源文件删除时,软链接的文件将失去作用,仅剩一个文件名。删除这个链接,也不会影响到源文件。

硬链接生成的目标文件和源文件的节点号是一样的,它们共享一个节点号;而软链接的节点号与原文件不同。硬链接必须与源文件在一个文件系统中,而软链接可以跨越文件系统使用。不能为目录创建硬链接,目录只可以创建软链接。

Linux中使用ln命令创建链接。

命令格式:ln [-s] 源文件名    链接文件名

 # ln /etc/services   /root/svc_hard

不加任何参数的ln命令会创建硬链接,  /etc/services有了一个新的硬链接/root/etc

 # ln –s /etc/services   /root/svc_sym

 

-s为文件创建软链接。如果用ls –il命令看一下svc_hardsvc_sym,可以发现二者的节点号与文件大小都不同,这是由于上述硬软链接的区别造成的。

 # ln –s /etc   /root/etc

 

/etc目录建立名为/root/etc的软链接,目录无法建立硬链接。可以用cd /root/etc命令进入访问。

 

10.2.4 挂接光驱文件系统

Linux系统中的光驱与Microsoft Windows系统中的光驱使用有一些不同。

光盘放进驱动器之后,必须要mount之后,才可以使用:

                     # mount /dev/cdrom /mnt/cdrom

光盘的设备是/dev/cdrom,一般挂接在/mnt/cdrom目录下。在X Window操作中,用户点击桌面中的光盘图标可以直接打开而访问,这是由于点击动作会首先触发mount过程,把光驱挂上来。

使用完毕时想取出光盘时,象Microsoft Windows中直接按光驱的弹出钮是不行的,用户会发觉得光驱毫无反应,初学者往往认为光驱出问题了。实际是因为此时Linux已经把mount上来的设备都锁定了,需要用eject命令弹出光盘:

              # eject                                              

       光盘就会被摘除并直接弹出。如果要关闭,还可以输入下面的命令:

              # eject -e                     

另外在Microsoft Windows中可以利用其他软件,把光盘做成镜像文件保存和使用(如WinISOWinimage等)。在Linux中,我们可以用dd命令做到这一点,如:

# dd if=/dev/cdrom of=/soft/linux.iso         

上面的命令可以把光盘中的内容做成ISO文件,非常方便。其中if表示input fileof表示output file,意思是以cdrom为读入的文件,输入到linux.iso这个新文件中去,就可以建立ISO文件。

10.2.5      挂接loop文件系统

Linux支持回路文件系统,用来在一个文件系统上实现另一个文件系统,可用于虚拟磁盘/光盘和数据加密。Loop文件系统让我们可以将ISO文件挂接在系统中直接使用,不并刻录或者解压。在mount的时候需要指定文件类型:

# mount -t iso9660 /soft/linux.iso /mnt/cdrom          

其中iso9660ISO文件系统。完成之后,就可以看看/mnt/cdrom中的内容了,和真正的光盘一模一样。Linux在光盘管理方面是很简便的,在Microsoft Windows中我们做同样的工作需要加装软件。

不过在有的Linux系统中,直接mount ISO文件可能会出现以下的错误:

# mount -t iso9660 /soft/linux.iso /mnt/cdrom         

mount: linux.iso is not a block device (maybe try `-o loop'?)

此系统认为ISO文件不是一个块设备,试一试-o loop参数,将其设置为loop设备。注意要加在命令最后:

# mount -t iso9660 /soft/linux.iso /mnt/cdrom -o loop

如果不报错就说明成功了,访问/mnt/cdrom就可以看到当前ISO文件的内容。摘除时使用umount命令即可。

# umount /mnt/cdrom                             

 

10.2.6       挂接软驱文件系统

软驱在系统中的对应设备为/dev/fd0,一般可以将其mount/mnt/floppy目录下来访问:

# mount /dev/fd0 /mnt/floppy                           

       可以使用floppy命令来格式化软盘,可对设备直接进行操作:

# floppy -f /dev/fd0                                         

       还可以指定以何种文件系统来格式化软盘

# floppy -f –ext2 /dev/fd0                         

# floppy -f –vfat /dev/fd0                          

 

摘除时使用umount命令即可。

# umount floppy                                

10.2.7       USB硬盘

如果安装正常,USB硬盘应该在系统中出现,名为/dev/sda1/dev/sda2等,可以用fdisk –l命令查看一下系统是否已经找到此盘。挂接与摘除的方法与硬盘相同。

 # mount  /dev/sda1  /mnt/usb

  # umount /mnt/usb

请注意并不是所有的USB硬盘都可以被Linux系统识别。

10.2.8       摘除busy状态的文件系统

在摘除文件系统的时候,也许会看到下面这样的提示:

umount /data device busy

/data无法摘除。这通常是由于该文件系统仍然被某些用户进程占用,没有释放这部分空间。先用pwd命令看一看是不是自己正处于当前要摘除的文件系统中,如果是,转到其他目录即可;如果没有,可以使用fuser -v命令查看一下该文件系统,看看是否其他进程或者用户在使用。

 

# fuser  -v  /doc1

                     USER        PID ACCESS COMMAND

/doc1                 xyd       1932 ..c..  bash

                      xyd       1978 ..c..  vi

                      root       kernel mount  /doc1

显示说明xyd用户正在使用vi/doc1上的文件进行编辑。如果要强行终止其进程以便摘除系统,可以用fuser –k

# fuser  -k  /doc1

/doc1:                1932c  1978c

用户xydvi进程即被终止,可以进行/doc1的摘除。

10.4       文件和目录

我们知道,LinuxWindows系统有一个显著的不同之处,就是Linux的资源访问与控制都是基于文件的(Unix也一样),而Windows是基于对象来控制的。在Linux中数据、硬件、设备、终端都以文件的形式出现,甚至内存也是文件(/proc)。这种机制有非常大的方便性,也是Linux的魅力所在。例如我们在Linux系统中的/dev/lp1这个文件,实际上对应的就是一台连接在本地的打印机,执行把“Linux World”写入/dev/lp1文件的操作,就可以将这段话在打印机上打印出来。诸如此类,我们在学习与使用Linux文件系统的过程中,会越来越体会到这一点。

Linux系统基本的目录结构,我们在第二章中已经叙述。

10.4.1      访问控制

Linux的文件或者目录允许的基本权限是读、写或执行,另外还有一些特殊的权限参数,如SetUIDSetGID和粘着位等。读、写等术语指的是Linux存储文件权限信息的方法。每一种权限都是以一个计算机位存储的。由于计算机信息的一位只能是01,因此可以把这里的位看做一个标志。这个标志是on(允许),或者是off(禁止)。

对文件的访问权限:

r:可以读一个文件的内容。

w:修改或者替换一个文件的内容,如可以把/dev/null复制到文件中。

x:可执行。

对目录的访问权限:

r:发现目录里面有哪些文件与子目录。

w:在目录中创建/删除文件、空目录和设备。

x:如果对目录没有读权限,则不能发现目录中的文件与子目录。但如果对目录有执行权限而且对其中的文件与子目录有读(或写)权限,还是可以做读(或写)操作。

10.4.2      用户IDuid)和组ID(gid)

所有访问系统的用户必须通过帐户才能完成,所以在Linux 系统中帐户的管理是非常重要的。有三种类型的帐户:超级用户、系统用户和普通用户。超级用户帐户通常叫做root,可以毫无限制地管理系统。系统用户运行服务。最后,普通用户帐户给那些登陆系统,阅读邮件等的人们使用。

用户ID (UID) 

UID 是系统用来识别用户的65536 之间的数字。在用它工作以前,允许你指定一个。

用户名的任何命令都会把它转换成UID。这意味着你可以为不同的用户名使用多个帐户,但它们的UID 是一样的。Linux 会把这些帐户认定是一个人的。

ID (GID) 

GID 是用来识别用户所在的组的65536 之间的数字。组是一种用来控制用户访问资源的机制。它可以减少一些配置文件的大小。一个用户也可以属于多个组。

通常直接编写/etc/passwd/etc/group文件,可以改变用户ID和组ID

10.4.3      粘着位

目前文件的粘着位没有任何作用。在UNIX发展的历史上,在程序文件上设置粘着位会使得UNIX在内存中保留这个程序的映像,从而在以后激活这个程序时加快速度。现在这一项的功能已经过时而被弃之不用了。

如果一个目录是可写的,而且设置了粘着位,那么在下面的条件中至少有一个满足的情况下,这个目录中的文件就可以被删除或者重命名:

        文件的所有者是这个用户

        目录的所有者是这个用户

        文件对于这个用户是可写的

        用户是超级用户

例如,/tmp目录会设置粘着位,因为这个目录是公开可读写的,粘着位会防止用户删除其他用户所拥有的文件。通常情况下,只根据目录的权限,而不是文件的权限来允许删除文件。如果不在/tmp目录上设置粘着位,那么任何人都可以将其中的任何文件删除,会造成安全问题。

10.4.4      文件权限命令

使用方式: chmod [-cfvR] [--help] [--version] mode file...

说明:Linux 的文件存取权限分为三种:文件拥有者、群组、其他。利用 chmod 可以设置文件的访问权限,控制文件如何被他人所存取。

mode:权限设定字串,格式如下: [ugoa...][[+-=][rwxX]...][,...],其中表示该文件的拥有者,表示与该文件的拥有者属于同一个组(group)的用户,表示除前面两种用户以外其他的用户,表示这三者皆是。

表示增加权限、表示取消权限、表示唯一设定权限。

表示可读取,表示可写入,表示可执行。

下面举例说明chmod命令的用法:

  #     chmod ugo+r myfile.sh

将文件 myfile.sh 设为所有人皆可读取。

  #     chmod a+r myfile.sh

将文件 myfile.sh 设为所有人皆可读取。

  #      chmod ug+w,o-w myfile.sh file2.txt

将文件 myfile.sh  file2.txt 设为该文件拥有者和其所属同一个组的用户可写入,其他人则不可写入。

  #      chmod u+x ex1.py

 ex1.py 设定为该文件拥有者可以执行。

  #      chmod -R a+r *

将目前目录下的所有文件与子目录皆设为任何人可读取。

此外chmod也可以用数字来表示权限如 chmod 755 file

语法为:chmod abc file

其中a,b,c各为一个数字,分别表示UserGroup、及Other的权限。

r=4w=2x=1

若要rwx属性则4+2+1=7

若要rw-属性则4+2=6

若要r-x属性则4+1=7

举例说明:

#  chmod  my.sh   754

my.sh文件的权限设置为属主有读写执行权限,同组用户有读和执行权限,其他用户有读权限。

10.5  proc文件系统

/proc目录下的文件就是从内存中直接映射出来的。在这里可以找到系统中正在运行的所有进程。还可以找到进程号,利于管理和疑难解答(trouble-shooting)。此外,/proc目录中还包括系统中正在使用的I/O接口、IRQ中断、DMA通道、CPU类型和使用情况的说明文件。

Linux中有额外的机制可以为内核和内核模块将信息发送给进程。最初设计的目的是允许更方便的对进程信息进行访问,现在它被每一个值得关注的进程报告的内核使用,例如 /proc/modules 有模块的列表 /proc/meminfo 有内存使用的统计表。

proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。它的目录结构如下:

目录名称           目录内容

apm           高级电源管理信息

cmdline         内核命令行

cpuinfo    关于cpu信息

devices          可以用到的设备(块设备/字符设备)

dma          Used DMS channels

filesystems    支持的文件系统

interrupts             中断的使用

ioports        I/O端口的使用

kcore                 内核核心印象

kmsg              内核消息

ksyms              内核符号表

loadavg                       负载均衡

locks                           内核锁

meminfo         内存信息

misc                杂项(Miscellaneous

modules           加载模块列表

mounts              加载的文件系统

partitions                    系统识别的分区表

rtc                   Real time时钟

slabinfo                Slab pool 信息

stat                  全面统计状态表

swaps                对交换空间的利用情况

version           内核版本

uptime               系统正常运行时间

并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。

另外,在/proc下还有三个很重要的目录:netscsisysSys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而netscsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi目录不存在。

除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的PID号为目录名,它们是读取进程信息的接口。

2 修改内核参数

/proc文件系统中有一个特殊的目录:/proc/sys。它不仅提供了内核信息,而且可以通过它修改内核参数,来优化你的系统。但是你必须很小心,因为可能会造成系统崩溃。最好是先找一台无关紧要的计算机,调试成功后再应用到你的系统上。改变内核的参数,只需用vi编辑或echo参数重定向到文件中即可。下面有一个例子:

# cat /proc/sys/fs/file-max

4096

# echo 8192 > /proc/sys/fs/file-max

# cat /proc/sys/fs/file-max

8192

如果优化了参数,则可以把它们写成脚本文件,使它在系统启动时自动完成修改。

10.6  SWAP

这是专门用于交换分区的swap文件系统。Linux使用整个分区来作为交换空间,而不象Microsoft Windows使用交换文件。一般这个SWAP格式的交换分区是主内存的2倍。

在一个计算机系统中,物理内存是一个有限的资源。尽管有更多的进程需要执行,但是同时在物理内存运行的进程数量是有限的。交换和换页允许部分进程在物理内存和大容量存储间移动。这就会释放物理内存的空间。

10.7  NFS

NFS 是由SUN公司发展,并于1984年推出,NFS是一个RPC服务,它使我们能够达到文件的共享,它的设计是为了在不同的系统间使用,所以它的通讯协议设计与主机以及操作系统无关。当使用者想访问远程文件时只要用“mount”就可把远程文件系统挂接在自己的文件系统之下,使得远程的文件使用上和本地机器的文件没什么不同。

10.8       Ramdisk

RamDisk是一种内存使用的方式,它使用计算机的一部分内存空间来模拟出一个硬盘分区。虽然模拟出来的硬盘空间不大,但由于内存的访问速度大大高于硬盘,所以RamDisk在不少场合还是有其用武之地的,例如一个访问人数很多的Web服务器,网页文件的访问非常频繁,如果将数量不是很大的网页文件放入,可以大大加快网站的响应速度。下面我们就来看一看如何制做。

当前的Linux发行版本中都包括对RamDisk的支持。这种虚拟硬盘的使用也需要先格式化,在/dev目录下存放着ram开头的文件,就是已经准备好的RamDisk设备文件,我们需要首先将其格式化:

 

 # mke2fs /dev/ram0

第一个RamDisk就被格式化好了。然后挂接到为其创建的挂接点,就可以使用了。

 # mount /dev/ram0 /mnt/ram

 

如果要规定RamDisk的大小,可以在/etc/lilo.conf中加入这样一行:

ramdisk_size=30780

再运行/sbin/lilo命令使改动生效,这样下次重启机器后RamDisk大小就是30MB了,在这里放置一个小型网站不成问题。需要注意的是,RamDisk的本质是内存,在系统关闭时内容会全部消失,所以不要把任何需要保存的东西不加拷贝直接放在这里。如果是我们提到的网站,可以编写启动脚本,在系统启动时将RamDisk挂接,然后把网页文件拷贝到其中去就可以了。

RamDisk还有一种常见用法是将其挂接到/tmp目录,这么做会大大提高系统整体反应速度。但注意计算机的物理内存必须充足,否则/tmp空间太小,还是无法提高效率。

10.9 RAID配置

如何增加磁盘的存取速度,如何防止数据因磁盘的故障而失落及如何有效地利用磁盘空间,一直是电脑专业人员和用户的困扰;而大容量磁盘的价格非常昂贵,对用户形成很大的负担。RAID(冗余磁盘阵列)技术的产生解决了这些问题,我们在些介绍一下Linux常用的软件实现RAID1RAID5的方法。

10.9.1      RAID1

RAID 1是使用磁盘镜像(disk mirroring)的技术。它需要两个独立的磁盘,所储存的数据完全一样,数据写入一个磁盘的同时也写入另一个磁盘,当其中一个失效时,另一个磁盘可以完全承担全部工作。要实现RAID1,首先我们要准备好两个物理磁盘连接到计算机中,然后分别在两个磁盘上创建大小一样的分区,准备工作就做好了。

Linux中的软RAID配置管理文件是/etc/raidtab,我们可以手工创建这个文件,下面是一个实例:

# RAID1 配置举例

raiddev                /dev/md0

raid-level              1

nr-raid-disks           2

nr-spare-disks          0

chunk-size              4

device                  /dev/sdb1

raid-disk               0

device                  /dev/sdc1

raid-disk               1

 

在本例中,/dev/sdb1/dev/sdc1分别是两个物理硬盘上的分区,大小一样,在文件中的device栏中定义,raid-level中说明了RAID级别是1RAID的相应设备名称是/dev/md0

下一步是用mkraid命令创建RAID设备

# mkraid /dev/md0

md0的使用方法类似磁盘分区,创建好之后,就可以对其格式化

# mke2fs –ext3  /dev/md0

然后把/dev/md0挂接到已经创建好的挂接点(如/mnt/md0)就可以使用了。

10.9.2      RAID5

       RAID5需要有至少在3个物理磁盘上各1个的分区,如/dev/sdb1/dev/sdc1/dev/sdd1。其配置也在/etc/raidtab中进行,下面是一个示例:

raiddev                 /dev/md0

raid-level              5

nr-raid-disks           3

chunk-size              4

 

parity-algorithm        left-symmetric

 

device                  /dev/sdb1

raid-disk               0

 

device                  /dev/sdc1

raid-disk               1

 

device                  /dev/sdd1

raid-disk               2

 

文件配置好之后,其余的操作与制做RAID1没有什么不同。

10.10 LVM

LVM Logical Volume Manager(逻辑卷管理)的简写,首先在Linux 2.4内核上实现。与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。

LVM管理下的存储卷可以按需要随时改变大小与移除,LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如“sales”、“development”)代替物理磁盘名(如“sda”、“sdb”)来标识存储卷。LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观。

当采用LVM时,我们可以获得下面的好处:

        硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;

        文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求;

        文件系统建立在LVM上,可以跨分区,方便使用。

10.10.1    LVM的名词解释

下面是使用LVM时需要的一些名词:

卷组volume group (VG)

卷组是LVM中最高抽象层,是由一个或多个物理卷所组成的存储器池。

物理卷physical volume (PV)

典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的Software RAID 卷。

逻辑卷logical volume (LV)

逻辑卷相当于非LVM系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。

物理块physical extent (PE)

物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。

逻辑块logical extent (LE)

逻辑卷按“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。

10.10.2         建立PV

为把一个磁盘或分区作为PV,首先应使用 pvcreate 对其初始化,如对IDE硬盘/dev/hdb,使用整个磁盘。

# pvcreate  /dev/hdb

这个在磁盘上建立VG的描述符。

使用fdisk t 命令把/dev/hda1的分区类型设为0x8e,然后运行:

# pvcreate  /dev/hdb1

这个命令在分区/dev/hda1上建立VG的描述符。

10.10.3         建立VG

在使用pvcreate 建立了PV后,可以用vgcreate 建立卷组,如有PV1PV2分别是/dev/hda1/dev/hdb1,使用

# vgcreate testvg /dev/hda1 /dev/hdb1

可以建立一个名为testvg的卷组,它由两个PV/dev/hda1/dev/hdb1组成。vgcreate的一般用法为:

# vgcreate [options] VG_name PV1 [PV2 ...]

其中的可选项包括设置VG最大支持的LV数、PE大小(缺省为4MB)等。

10.10.4         激活VG

在被激活之前,VGLV是无法访问的,这时可用命令vgchange激活所要使用的卷组:

# vgchange -a y testvg

当不再使用VG时,同样可以用此命令停止:

vgchange -a n testvg

使之不再可用。

vgchange可用来设置VG的一些参数,如是否可用( -a [y|n]选项)、支持最大逻辑卷数等。

10.10.5    大系统使用LVM

在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。

用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    来自: czs321 > 《Linux》

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>