磁盘载入与卸载
注意:载入的文件系统需要载入点,所以在载入时要先建立载入点。如果用来载入的目录非空,那么载入了文件系统以后,原目录下的文件就会暂时被隐藏起来,等到文件系统被卸载后它们会再次显示出来。
单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
单一目录不应该重复挂载多个文件系统;
要作为挂载点的目录,理论上应该都是空目录才是。
我们学简单一点啊 ^_^
[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/filesystems:Linux系统已经加载的档案系统类型。
那我怎么知道我的 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 # 注意啊!这个档案可不是一般档案,不可以随便就放在这里! # 测试完毕之后请删除这个档案吧!看一下这个档案的类型!是 p 喔!^_^ |
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 可擦写/只读 |
让该分割槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给使用者随意变更的, 这里也能够设定为只读。则不论在此档案系统的档案是否设定 w 权限,都无法写入喔! |
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 备份! 0 代表不要做 dump 备份, 1 代表要每天进行 dump 的动作。 2 也代表其它不定日期的 dump 备份动作, 通常这个数值不是 0 就是 1 啦!
第六栏:启动过程中,系统默认以fsck检验分区内的文件系统是否完成。0不要检验,1要检验,2也是要检验,不过1会检验的比较早。一般来说根目录设置为1,其它要检验的文件系统设置为2就可以了。
建立虚拟内存
如果想使用虚拟内存可以通过一下两种方法来实现:
1:设置一个swap分区
2:建立一个虚拟内存的文件
建立虚拟内存设备
这种方式是“直接加一个硬盘,将其中某个区规划为swap的文件系统”,具体步骤如下:
1 :利用 “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:使用mkswap将swap文件格式化为虚拟内存的文件格式
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 就是了!