> RedHat >

RHCE学习笔记-RHEL5.4文件系统管理(2)

关于/etc/fstab文件

下来学习/etc/fstab这个文件的所有参数,这个文件是非常重要的。这个文件是配置文件系统的体系,创建的所有分区,都必须写在这个文件里面,否则下次启动的时候你的分区是挂不起来的。

首先学习一个mount –a 这个命令
这个命令会重启读取/etc/fstab这个文件,可以使用mount –a命令挂载/etc/fstab中所有的文件系统。做一个小实验,来验证一下
首先吧/dev/sda7给卸载掉

复制代码代码如下:
[root@localhost ~]# umount /dev/sda7
[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
[root@localhost ~]#

/dev/sda7这个分区被成功卸载了

然后再/etc/fstab这个文件里面手动的添加这样一行
/dev/sda7             /mnt              ext3    defaults       0  0
最后在使用mount  -a  这个命令

复制代码代码如下:
[root@localhost ~]# mount -a
[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   18M       405M      5%        /mnt
[root@localhost ~]#

/dev/sda7又被重新的挂载到/mnt下面了

下面是/etc/fstab这个文件中每个参数的含义
来学习一下/etc/fstab这个文件的每个参数是什么意思
LABEL=/          /      ext3     defaults         1 1
LABEL=/home     /home   ext3     defaults         1 2
LABEL=/var      /var    ext3     defaults         1 2
LABEL=/boot    /boot      ext3   defaults         1 2
tmpfs          /dev/shm  tmpfs   defaults         0 0
devpts         /dev/pts   devpts  gid=5,mode=620  0 0
sysfs          /sys      sysfs     defaults          0 0
proc          /proc       proc    defaults          0 0
LABEL=SWAP-sda5     swap   swap    defaults          0 0
/dev/sda7     /mnt     ext3     defaults          0 0 

参数的解释
LBAEL=/      是指用卷标的方式来表示,也可以用设备名。如/dev/sda7
/            这个是指挂载点
Ext3,swap   这些都是文件系统的类型
Default      这个是最重要,这个default里面包含五个参数。
1   1       后面的1代表最先扫描,最先起来
1   2       后面的2代表优先级低一点,最后起来
0   0       后面的0代表忽略启动,计算机启动时不会读这个文件系统
可以看到根分区的是1,是因为系统启动的时候,根分区是肯定要起来的,如果根分区不起来,其他分区起来是没有意义的。而后面的0,忽略启动时因为后面的分区起不起来也没有太大关系,不会影响计算机的启动,如果将后面的分区也设为1,那么一旦后面分区坏了,或者被删除了,系统就起不来了。所以我们的普通分区一般设置为0.

关于ext3的默认选项

也就是刚才在/etc/fstab那个default里面包含的五个参数
 rw     suid      dev     exec    sync
default其实里面就包含了这五个参数。
下面就来解释一下这五个参数是什么意思和他们对应的是那些参数,
Rw          ro       
可读可写              只读
Suid       nosuid    
suid功能                没有suid功能
Dev       nodev     
挂载设备文件    不可以挂载设备文件
Sync     nosync 
acl功能                没有acl功能
Exec     noexec      
执行功能            不可以执行
这些default里面参数的对应关系,而default默认就有前面的那五个参数了,如果想改变这些参数,就需要到/etc/fstab这个文件里面的default后面加上你要改变的参数
现在针对这五个参数来做实验,具体的了解一下这五个参数的含义
第一个参数是rw    将它改成ro
先看一下的文件系统是不是可读可写(这个是默认的)

复制代码代码如下:
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# mkdir file
[root@localhost mnt]# ls
file
[root@localhost mnt]#

可以看到,文件系统是可读可写的。下面将文件系统改为ro

在/etc/fstab文件中添加这样一行,
/dev/sda7               /mnt         ext3    defaults,ro        0 0
文件系统改为ro了,但是并不能够立即生效,必须等到下次重启的时候才会生效,可以敲一条命令,让其立即生效
[root@localhost ~]# mount –o remount /dev/sda7
这条命令可以让刚才做的操作立即生效。
在使用mount命令来查询一下/dev/sda7是否变成只读了。
[root@localhost ~]# mount | grep /dev/sda7
/dev/sda7 on /mnt type ext3 (ro)
[root@localhost ~]#
已经看到了/dev/sda7已经变成ro了
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# mkdir file1
mkdir: cannot create directory `file1': Read-only file system
[root@localhost mnt]#
可以看到,当再次进入/mnt下面建立目录的时候,他就提示这是一个只读的文件。

第二个参数suid   将它改成no suid
在正常情况下面,普通用户是可以改变自己的密码的。我们试一下

复制代码代码如下:
[root@localhost ~]# su - user1
[user1@localhost ~]$ passwd
Changing password for user user1.
Changing password for user1
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[user1@localhost ~]$

普通用户的确是可以改变自己的密码的,接下来,在/etc/fstab这个文件里面添加一行内容。
LABEL=/                 /            ext3    defaults,nosuid        1 1
同样的,使用命令将其立即生效。

复制代码代码如下:
[root@localhost ~]# mount -o remount /
[root@localhost ~]# mount |grep /dev/sda3
/dev/sda3 on / type ext3 (rw,nosuid)
[root@localhost ~]#

可以看到,的根文件系统已经有了一个nosuid的参数了

同样的,在切换到普通用户,修改自己的密码

复制代码代码如下:
[root@localhost ~]# su - user1
[user1@localhost ~]$ passwd
Changing password for user user1.
Changing password for user1
(current) UNIX password:
passwd: Authentication token manipulation error
[user1@localhost ~]$

看到了,没有suid,一个普通用户是无法改变自己的密码嘚。因为根文件系统没有suid的功能,普通用户没有办法写到/etc/shadaw里面去

第三个参数是exec,将它换成noexec
默认情况下,在linux系统,的脚本只要有执行权限,都是可以被执行的,

复制代码代码如下:
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
shell
[root@localhost mnt]# ./shell
shell is A
shell is B
shell is C
[root@localhost mnt]#

看到这个脚本是可以被执行的,
现在我给/mnt加上一个noexec的参数
看下在/mnt里面的脚本还可不可以被执行。
在/etc/fstab这个文件里面加入这样的一行,
/dev/sda7               /mnt           ext3    defaults,noexec        0 0 
还是要使用mount –o remount /mnt来让刚才的操作立即生效。

复制代码代码如下:
[root@localhost ~]# mount -o remount /mnt
[root@localhost ~]#
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
shell
[root@localhost mnt]# ./shell
bash: ./shell: /bin/sh: bad interpreter: Permission denied
[root@localhost mnt]#

看到了,脚本将不能够运行,这个因为文件系统没有了执行功能,所以我脚本就不能运行了。

第四个参数dev,将它改成nodev
在linux系统中,默认情况下,光盘是可以通过计算机的光驱的,但是如果加入了nodev  光盘就将挂不起来。
 
下面在来学习一下怎么在linux下面怎么挂载一个iso文件系统

复制代码代码如下:
[root@localhost ~]# mount -o loop boot.iso /media/
[root@localhost ~]# df
Filesystem            1K-blocks      Used        Available      Use%       Mounted on
/dev/sda3              4061572      2598728    1253196       68%            /
/dev/sda6               505604       10565        468935         3%              /home
/dev/sda2               4061572     1936516   1915408        51%            /var
/dev/sda1               101086      13588         82279           15%            /boot
tmpfs                     192132         0              192132          0%              /dev/shm
/dev/sda7               482214     19600          412816          5%             /mnt
df: `/media/RHEL_5.4 i386 DVD': No such file or directory
/root/boot.iso         9028      9028                0                  100%           /media
[root@localhost ~]# cd /media/
[root@localhost media]# ls
isolinux  TRANS.TBL
[root@localhost media]# cd isolinux/
[root@localhost isolinux]# ls
boot.cat     initrd.img    memtest      rescue.msg  vmlinuz
boot.msg     isolinux.bin  options.msg  splash.lss
general.msg  isolinux.cfg  param.msg    TRANS.TBL
[root@localhost isolinux]#

这样,iso文件就被挂载到了/media这个目录里面。

下面在来学习一下在挂载的时候指定一个拥有人和拥有组的
这个参数只适合fat32的格式文件系统(dosfstools-2.11-7.el5)
首先将/dev/sda7格式化成fat32

复制代码代码如下:
[root@localhost ~]# mkfs.vfat /dev/sda7
mkfs.vfat 2.11 (12 Mar 2005)
[root@localhost ~]#

已经吧/dev/sda7格式化成了fat32

复制代码代码如下:
[root@localhost ~]# id user1
uid=500(user1) gid=500(user1) groups=500(user1)
[root@localhost ~]# mount -o uid=500,gid=500 /dev/sda7 /mnt/
[root@localhost ~]# mount |grep /dev/sda7
/dev/sda7 on /mnt type vfat (rw,uid=500,gid=500)
[root@localhost ~]#

直接在挂载的时候加了一个uid gid 的参数
如果是正常情况,在系统中,以root的身份把一个文件从一个目录复制到另外一个目录,拥有人和拥有组都是root。现在呢

复制代码代码如下:
[root@localhost ~]# cp /etc/fstab /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ll
total 8
-rwxr-xr-x 1 user1 user1 760 Feb 20 01:47 fstab
[root@localhost mnt]#

可以看到,复制过来的文件的拥有人和拥有组已经变成user1了,这个是因为刚才在挂载的时候已经指定了他文件系统的uid和gid

扩展swap分区
先来查询一下系统的swap

复制代码代码如下:
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:      375        369          6          0          7         83
-/+ buffers/cache:   278         97
Swap:     1027       128        899
[root@localhost ~]#

现在系统中swap是1024M
扩展是swap分区有两种方法,
(1)、利用磁盘的剩余空间来扩展swap
首先分区并改变分区的类型

复制代码代码如下:

[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): n
First cylinder (1316-1958, default 1316):
Using default value 1316
Last cylinder or +size or +sizeM or +sizeK (1316-1958, default 1958): +500M
 
Command (m for help): t
Partition number (1-8): 8
Hex code (type L to list codes): 82

Changed system type of partition 8 to 82 (Linux swap / Solaris)
Command (m for help): wq

格式化swap

复制代码代码如下:
[root@localhost ~]# mkswap /dev/sda8
Setting up swapspace version 1, size = 509927 kB
[root@localhost ~]#

启动swap

复制代码代码如下:
[root@localhost ~]# swapon /dev/sda8
[root@localhost ~]#

现在我在查询一下swap的大小

复制代码代码如下:
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:      375        369          6          0          7         82
-/+ buffers/cache:  278         96
Swap:     1513      128        1385
[root@localhost ~]#

可以看到的swap分区已经增大了500M
最后,要想下次系统重启生效,必须写在/etc/fstab文件中
/dev/sda8               swap               swap    defaults        0 0

(2)、利用分区的剩余空间来扩展swap
首先我一样要查询一下系统中swap分区的大小

复制代码代码如下:
[root@localhost ~]# free -m
         total       used       free     shared    buffers     cached
Mem:     375        368          7          0          7         81
-/+ buffers/cache:  278         96
Swap:     1513      128       1385
[root@localhost ~]#

然后利用dd工具来创建一个swap文件

复制代码代码如下:
[root@localhost ~]# dd if=/dev/zero of=swapfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.632534 seconds, 166 MB/s
[root@localhost ~]#

格式化swap

复制代码代码如下:
[root@localhost ~]# mkswap swapfile
Setting up swapspace version 1, size = 104853 kB
[root@localhost ~]#

把这个文件当做一个分区来对待
启动swap

复制代码代码如下:
[root@localhost ~]# swapon swapfile
[root@localhost ~]#

现在来查询一下swap分区的大小

复制代码代码如下:
[root@localhost ~]# free -m
         total       used       free     shared    buffers     cached
Mem:     375        368          6          0          1         90
-/+ buffers/cache:  276         98
Swap:     1613      128       1485
[root@localhost ~]#

可以看到系统的swap分区已经扩大100M

最后,要想下次系统重启生效,必须写在/etc/fstab文件中
/swapfile            swap                    swap    defaults        0 0

以上的两种方法就是用来扩展swap分区的
还可以使用swapon  -a 激活交换分区,(该命令可以读取/etc/fstab文件,并开启它列出所有的交换条目
还可以利用swapon  -s 来查询交换分区的状态

复制代码代码如下:
[root@localhost ~]# swapon -s
Filename                    Type                Size         Used       Priority
/dev/sda5                    partition       1052216   131640    -1
/dev/sda8                    partition        497972      0            -2
/root/swapfile                 file             102392       0           -3
[root@localhost ~]#

在这里,可以看到swap是有哪些文件组成的,还有优先级,数字越大,优先级越高。可以在/etc/fstab文件中default后面加上pri=X(X为优先级)

在linux系统当中,怎么去挂载一个NFS的网络文件系统呢
可以通过showmount  -e  来查看对方计算机有哪些文件夹被共享了

复制代码代码如下:
[root@localhost ~]# showmount -e 192.168.0.254
Export list for 192.168.0.254:
/var/ftp/pub 192.168.0.0/24
[root@localhost ~]#

下面来挂载nfs网络资源

复制代码代码如下:
[root@localhost ~]# mount -t nfs 192.168.0.254:/var/ftp/pub/ /mnt/
[root@localhost ~]# df
Filesystem           1K-blocks      Used       Available     Use%      Mounted on
/dev/sda3              4061572    2309084   1542840       60%           /
/dev/sda6              505604     10565        468935          3%           /home
/dev/sda2              4061572   1857588    1994336        49%         /var
/dev/sda1              101086      13588       82279            15%         /boot
tmpfs                    192132         0            192132           0%          /dev/shm
/dev/hdc               2935370    2935370     0                  100%        /media/RHEL_5.4 i386 DVD
192.168.0.254:/var/ftp/pub/
                    4061600     1857600   1994336          49%        /mnt
[root@localhost ~]#

Nfs网络资源就被成功挂载到本地了。
如果要每次启动的时候都要生效,就必须写在/etc/fstab文件里面
192.168.0.254:/var/ftp/pub  /mnt                nfs     defaults        0 0

至此,关于linux文件系统管理的内容就介绍完了,希望对大家有所帮助。

 
(责任编辑:IT)