Linux学习笔记(八)

磁盘载入与卸载

注意:载入的文件系统需要载入点,所以在载入时要先建立载入点。如果用来载入的目录非空,那么载入了文件系统以后,原目录下的文件就会暂时被隐藏起来,等到文件系统被卸载后它们会再次显示出来。

单一文件系统不应该被重复挂载在不同的挂载点(目录)中;

单一目录不应该重复挂载多个文件系统;

要作为挂载点的目录,理论上应该都是空目录才是。

我们学简单一点啊 ^_^

[root@www ~]# mount -a

[root@www ~]# mount [-l]

[root@www ~]# mount [-t 档案系统] [-L Label] [-o 额外选项] \

 [-n]  装置文件名  挂载点

选项与参数:

-a  :依照设定档 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来

-l  :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!

-t  :与 mkfs 的选项非常类似的,可以加上档案系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式),nfs, cifs, smbfs(此三种为网络档案系统类型)

-n  :在预设的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其它程序的运作。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。此时就得要使用这个 -n 的选项了。

-L  :系统除了利用装置文件名 (例如 /dev/hdc6) 之外,还可以利用档案系统的标头名称(Label)来进行挂载。最好为你的档案系统取一个独一无二的名称吧!

-o  :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:

      ro, rw:       挂载档案系统成为只读(ro) 或可擦写(rw)

      async, sync:  此档案系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,请参考档案系统运作方式。预设为 async

      auto, noauto: 允许此 partition 被以 mount -a 自动挂载(auto)

      dev, nodev:   是否允许此 partition 上,可建立装置档案? dev 为可允许

      suid, nosuid: 是否允许此 partition 含有 suid/sgid 的档案格式?

      exec, noexec: 是否允许此 partition 上拥有可执行 binary 档案?

      user, nouser: 是否允许此 partition 让任何使用者执行 mount ?一般来说,mount 仅有 root 可以进行,但下达 user 参数,则可让一般 user 也能够对此 partition 进行 mount 

      defaults:     默认值为:rw, suid, dev, exec, auto, nouser, and async

      remount:      重新挂载,这在系统出错,或重新更新参数时,很有用!

会不会觉得光是看这个指令的细部选项就快要昏倒了?如果有兴趣的话看一下 man mount ,那才会真的昏倒的。

 

挂载Ext2/Ext3档案系统

范例一:用预设的方式,将刚刚建立的 /dev/hdc6 挂载到 /mnt/hdc6 上面!

[root@www ~]# mkdir /mnt/hdc6

[root@www ~]# mount /dev/hdc6 /mnt/hdc6

[root@www ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

.....中间省略.....

/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6

看起来,真的有挂载!且档案大小约为 2GB 左右啦!

为什么可以这么方便呢(甚至不需要使用 -t 这个选项)?由于档案系统几乎都有 superblock , 我们的 Linux 可以透过分析 superblock 搭配 Linux 自己的驱动程序去测试载, 如果成功的套和了,就立刻自动的使用该类型的档案系统挂载起来啊! 那么系统有没有指定哪些类型的 filesystem 才需要进行上述的挂载测试呢? 主要是参考底下这两个档案:

/etc/filesystems:系统指定的测试挂载档案系统类型;

/proc/filesystemsLinux系统已经加载的档案系统类型。

那我怎么知道我的 Linux 有没有相关档案系统类型的驱动程序呢?我们 Linux 支持的档案系统之驱动程序都写在如下的目录中:/lib/modules/$(uname -r)/kernel/fs/

例如 vfat 的驱动程序就写在『/lib/modules/$(uname -r)/kernel/fs/vfat/』这个目录下啦! 简单的测试挂载后,接下来让我们检查看看目前已挂载的档案系统状况吧!

范例二:观察目前『已挂载』的档案系统,包含各档案系统的Label名称

[root@www ~]# mount -l

/dev/hdc2 on / type ext3 (rw) [/1]

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

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

/dev/hdc3 on /home type ext3 (rw) [/home]

/dev/hdc1 on /boot type ext3 (rw) [/boot]

tmpfs on /dev/shm type tmpfs (rw)

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

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

/dev/hdc6 on /mnt/hdc6 type ext3 (rw) [vbird_logical]

除了实际的档案系统外,很多特殊的档案系统(proc/sysfs...)也会被显示出来!

值得注意的是,加上 -l 选项可以列出如上特殊字体的标头(label)

这个指令输出的结果可以让我们看到非常多信息,以 /dev/hdc2 这个装置来说好了(上面表格的第一行), 他的意义是:『/dev/hdc2 是挂载到 目录,档案系统类型为 ext3 ,且挂载为可擦写 (rw) ,另外,这个 filesystem 有标头,名字(label)为 /1 

 

卸载设备文件(umount

umount 设备号或载入点(都可以的)

[root@www ~]# umount [-fn] 装置文件名或挂载点 

选项与参数: 

-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下; 

-n 不更新 /etc/mtab 况下卸除。 

修改磁盘参数

1 mknod 虽然现在2.6内核已经不需要这么做了,但有的时候需要修改的。我们还是知道一些比较好。

[root@www ~]# mknod 装置文件名 [bcp] [Major] [Minor]

选项与参数:

设备种类:

   b  :设定装置名称成为一个周边储存设备档案,例如硬盘等;

   c  :设定装置名称成为一个周边输入设备档案,例如鼠标/键盘等;

   p  :设定装置名称成为一个 FIFO 档案;

Major :主要装置代码;

Minor :次要装置代码;

范例一:由上述的介绍我们知道 /dev/hdc10 装置代码 22, 10,请建立并查阅此装置

[root@www ~]# mknod /dev/hdc10 b 22 10

[root@www ~]# ll /dev/hdc10

brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10

上面那个 22 与 10 是有意义的,不要随意设定啊!

范例二:建立一个 FIFO 档案,档名为 /tmp/testpipe

[root@www ~]# mknod /tmp/testpipe p

[root@www ~]# ll /tmp/testpipe

prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe

注意啊!这个档案可不是一般档案,不可以随便就放在这里!

测试完毕之后请删除这个档案吧!看一下这个档案的类型!是 喔!^_^

2 e2label

它的主要功能是用来修改磁盘的表头数据

优点:不论磁盘文件名怎么变,不论你将硬盘插在那个 IDE / SATA 接口,由于系统是透过 Label ,所以,磁盘插在哪个接口将不会有影响;

缺点:如果插了两颗硬盘,刚好两颗硬盘的 Label 有重复的,那就惨了~ 因为系统可能会无法判断那个磁盘分割槽才是正确的!

[root@linux ~]#e2label 设备名称 新的label名称

3 tune2fs

[root@linux ~]#tune2fs [-jlL] 设备号

参数:

-j:将ext2的文件系统转换为ext3的文件系统

-l:类似dumpe2fs –h的功能。将超级块内的数据读出来

-L:类似e2label的功能,可以修改文件同的卷标。

4 hdparm

不要随便修改硬盘的参数,除非你知道自己在做什么。

[root@www ~]# hdparm [-icdmXTt] 装置名称

选项与参数:

-i  :将核心侦测到的硬盘参数显示出来!

-c  :设定 32-bit (32)存取模式。这个 32 位存取模式指的是在硬盘在与

      PCI 接口之间传输的模式,而硬盘本身是依旧以 16 位模式在跑的!

      预设的情况下,这个设定值都会被打开,建议直接使用 c1 即可!

-d  :设定是否启用 dma 模式, -d1 为启动, -d0 为取消;

-m  :设定同步读取多个 sector 的模式。一般来说,设定此模式,可降低系统因为

      读取磁盘而损耗的效能~不过, WD 的硬盘则不怎么建议设定此值~

      一般来说,设定为 16/32 是最佳化,不过,WD 硬盘建议值则是 4/8 

      这个值的最大值,可以利用 hdparm -i /dev/hda 输出的 MaxMultSect

      来设定喔!一般如果不晓得,设定 16 是合理的!

-X  :设定 UtraDMA 的模式,一般来说, UDMA 的模式值加 64 即为设定值。

      并且,硬盘与主机板芯片必须要同步,所以,取最小的那个。一般来说:

      33 MHz DMA mode 0~2 (X64~X66)

      66 MHz DMA mode 3~4 (X67~X68)

      100MHz DMA mode 5   (X69)

      如果您的硬盘上面显示的是 UATA 100 以上的,那么设定 X69 也不错!

-T  :测试暂存区 cache 的存取效能

-t  :测试硬盘的实际存取效能 (较正确!)

设置启动载入

/etc/fstab里面直接修改就可以设置启动就载入的项目了。

注意:

根目录 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。

其它 mount point 必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则

所有 mount point 在同一时间之内﹐只能挂载一次。

所有 partition 在同一时间之内﹐只能挂载一次。

如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录之外。让我们直接查阅一下 /etc/fstab 这个档案的内容吧!

[root@www ~]# cat /etc/fstab

# Device        Mount point   filesystem parameters    dump fsck

LABEL=/1          /           ext3       defaults        1 1

LABEL=/home       /home       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-hdc5   swap        swap       defaults        0 0

上述特殊字体的部分与实际磁盘有关!其它则是虚拟档案系统或

与内存置换空间 (swap) 有关。

其实 /etc/fstab (filesystem table) 就是将我们利用 mount 指令进行挂载时, 将所有的选项与参数写入到这个档案中就是了。除此之外, /etc/fstab 还加入了 dump 这个备份用指令的支持! 与开机时是否进行档案系统检验 fsck 等指令有关。

这个档案的内容共有六个字段,这六个字段非常的重要!你『一定要背起来』才好! 各个字段的详细数据如下:

第一栏:磁盘装置文件名或该装置的 Label

这个字段请填入档案系统的装置文件名。但是由上面表格的默认值我们知道系统预设使用的是 Label 名称! 在鸟哥的这个测试系统中 /dev/hdc2 标头名称为 /1,所以上述表格中的『LABEL=/1』也可以被取代成为『/dev/hdc2』的意思。 至于Label可以使用 dumpe2fs 指令来查阅的。

第二栏:挂载点 (mount point)

就是挂载点啊!挂载点是什么?一定是目录啊~要知道啊!

第三栏:磁盘分割槽的档案系统:

在手动挂载时可以让系统自动测试挂载,但在这个档案当中我们必须要手动写入档案系统才行! 包括 ext3, reiserfs, nfs, vfat 等等。

mount 这个指令中谈到很多特殊的档案系统参数? 还有我们使用过的『-o iocharset=cp950』?这些特殊的参数就是写入在这个字段啦! 虽然之前在 mount 已经提过一次,这里我们利用表格的方式再汇整一下:

参数

内容意义

async/sync

异步/同步

设定磁盘是否以异步方式运作!预设为 async(效能较佳)

auto/noauto

自动/非自动

当下达 mount -a 时,此档案系统是否会被主动测试挂载。预设为 auto

rw/ro

可擦写/只读

让该分割槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给使用者随意变更的, 这里也能够设定为只读。则不论在此档案系统的档案是否设定 权限,都无法写入喔!

exec/noexec

可执行/不可执行

限制在此档案系统内是否可以进行『执行』的工作?如果是纯粹用来储存资料的, 那么可以设定为 noexec 会比较安全,相对的,会比较麻烦!

user/nouser

允许/不允许使用者挂载

是否允许使用者使用 mount 指令来挂载呢?一般而言,我们当然不希望一般身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰!

suid/nosuid

具有/不具有 suid 权限

该档案系统是否允许 SUID 的存在?如果不是执行文件放置目录,也可以设定为 nosuid 来取消这个功能!

usrquota

注意名称是『 usrquota 』不要拼错了!这个是在启动 filesystem 支持磁盘配额式,更多数据我们在第四篇再谈。

grpquota

注意名称是『grpquota』,启动 filesystem 对群组磁盘配额模式的支持。

defaults

同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,预设情况使用 defaults 设定即可!

第五栏:能否被 dump 备份指令作用:

dump 是一个用来做为备份的指令, 我们可以透过 fstab 指定哪个档案系统必须要进行 dump 备份! 代表不要做 dump 备份, 代表要每天进行 dump 的动作。 也代表其它不定日期的 dump 备份动作, 通常这个数值不是 就是 啦!

第六栏:启动过程中,系统默认以fsck检验分区内的文件系统是否完成。0不要检验,1要检验,2也是要检验,不过1会检验的比较早。一般来说根目录设置为1,其它要检验的文件系统设置为2就可以了。

 

建立虚拟内存

如果想使用虚拟内存可以通过一下两种方法来实现:

1:设置一个swap分区

2:建立一个虚拟内存的文件

建立虚拟内存设备

这种方式是直接加一个硬盘,将其中某个区规划为swap的文件系统,具体步骤如下:

:利用 “fdisk /dev/hd[a~d]”先建立一个分区,也就是先建立一个分区,然后将该分区的ID改为82(也即是虚拟内存的磁盘文件格式代号)

2:使用“mkswap /dev/hd[a~d][1~16]”将刚刚建立的分区格式化为swap的文件格式

3:启动swap,启动的命令为“swapon /dev/hd[a~d][1~16]”,这样虚拟内存就自动加到内存容量里面了

想要关机的话用“swapoff 分区的名字就可

建立虚拟内存文件

步骤:

1:使用dd命令建立swap文件

2:使用mkswapswap文件格式化为虚拟内存的文件格式

3:使用swapon来启动该文件,使其成为虚拟内存。

4:使用swapoff来关闭该文件。

使用 dd 这个指令来新增一个 128MB 的档案在 /tmp 底下:

[root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128

128+0 records in

128+0 records out

134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s

[root@www ~]# ll -h /tmp/swap

-rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap

这样一个 128MB 的档案就建置妥当。若忘记上述的各项参数的意义,请回前一小节查阅一下啰!

2. 使用 mkswap 将 /tmp/swap 这个档案格式化为 swap 的档案格式:

[root@www ~]# mkswap /tmp/swap

Setting up swapspace version 1, size = 134213 kB

这个指令下达时请『特别小心』,因为下错字元控制,将可能使您的档案系统挂掉!

3. 使用 swapon 来将 /tmp/swap 启动啰!

[root@www ~]# free

             total       used       free     shared    buffers     cached

Mem:        742664     450860     291804          0      45584     261284

-/+ buffers/cache:     143992     598672

Swap:      1277088         96    1276992

[root@www ~]# swapon /tmp/swap

[root@www ~]# free

             total       used       free     shared    buffers     cached

Mem:        742664     450860     291804          0      45604     261284

-/+ buffers/cache:     143972     598692

Swap:      1408152         96    1408056

[root@www ~]# swapon -s

Filename                 Type            Size    Used    Priority

/dev/hdc5                partition       1020088 96      -1

/dev/hdc7                partition       257000  0       -2

/tmp/swap                file            131064  0       -3

4. 使用 swapoff 关掉 swap file

[root@www ~]# swapoff /tmp/swap

[root@www ~]# swapoff /dev/hdc7

[root@www ~]# free

             total       used       free     shared    buffers     cached

Mem:        742664     450860     291804          0      45660     261284

-/+ buffers/cache:     143916     598748

Swap:      1020088         96    1019992  <==回复成最原始的样子了!

swap 在被建立时,是有限制的喔!在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 的限制了,但是,最多还是仅能建立到 32 个 swap 的数量!而且,由于目前 x86_64 (64最大内存寻址到 64GB,因此,swap总量最大也是仅能达 64GB 就是了!

 

你可能感兴趣的:(linux)