当前位置:Linux教程 - Linux资讯 - Linux 磁碟与硬体管理

Linux 磁碟与硬体管理

 认识硬碟:   让我们再来复习一下 硬碟 里面有什么东西值得我们来讨论的!  ·物理组成:   就物理组成来说,硬碟是由多个硬碟盘所组成的,而每一个硬碟盘上面都有个磁头( Head )在进行该硬碟盘上面的读写工作,而当磁头固定不动,硬碟盘转一圈所画出来的圆就是所谓的磁轨( Track ),全部硬碟盘上面同一个磁轨组成了磁柱( Cylinder ),这个磁柱也是磁碟分割( partition )时,最小的单位了!另外,由圆心向半径方向划直线,而每个 Track 上面细分成一个一个的磁区( Sector )那就是最小的磁碟储存物理量了,一个 Sector 通常为 512 Bytes 。这就是整个硬碟的构造啰,那么如果以硬碟的 filesystem 来做为检视呢?你可以简单的这样想啦,一个 Partition 当中就具有一个 filesystem ( 档案系统 ) 啰!那么一个 partition 当中能不能具有两个 filesystem 呢?理论上应该是不行的!因为每个档案系统都有其独特的支援方式,例如 Linux 的 ext3 就无法被 Windows 系统所读取!而你将一个 partition 格式化的时候,总不能格式化为 ext3 也同时格式化为 fat32 吧?!那是不可能的啊!底下来谈一谈关于档案系统的相关功能吧!   ·Filesystem   在进行磁碟格式化或者是分割的时候,都会需要知道磁碟的一些基本的名词定义,主要有:   o 主要开机磁区( Master Boot Recorder, MBR ):主要开机磁区可以说是一颗硬碟里面最重要的地方了,怎么说呢?因为他记录了所有硬碟的分割资讯,以及开机的时候可以进行开机管理程式的写入等等,如果一颗硬碟的 MBR 死掉了,那么这颗硬碟几乎就可以说是寿终正寝了~那么 MBR 有什么限制呢?他最大的限制来自于他的大小不够大到储存所有的资讯,因此,他仅提供最多四个 partition 的记忆,这就是所谓的 Primary (P)与 Extended (E)磁区最多相加只能有四个的原因了。所以说,如果你预计分割超过 4 个 partition 的话,那么势必需要使用 3P + 1E ,并且将所有的剩余空间都拨给 Extended 才行( 记得呦! Extended 最多只能有一个 ),否则只要 3P + E 之后还有剩下的空间,那么那些容量将成为废物而浪费了?所以结论就是『如果您要分割硬碟时,并且已经预计规划使用掉 MBR 所提供的 4 个 partition ( 3P + E 或 4P )那么磁碟的全部容量需要使用光,否则剩下的容量也不能再被使用』。不过,如果您仅是分割出 1P + 1E 的话,那么剩下的空间就还能再分割两个 partition !   o 区块( Block ):档案在磁碟当中会被储存在一个固定的大小区块中,那就是 Block ,而 Block 的大小通常为 2 的次方,其中,由于磁碟的磁区物理量通常为 0.5K ( 512 Bytes ),所以 Block 通常规划为 0.5 K 的倍数,例如 EXT2 预设 Block 为 4K 即是一例!其中需要特别留意的地方是,一个 Block 最多仅能容纳一个档案,所以当一个档案不足 4K 时,例如大小仅为 1K ,那么剩下的 3 K 容量将会被浪费掉,这与 inode 也有一定的相关性!因此,在规划您的磁碟时,需要留意到您主机的用途来进行规划较佳!与此同时,若 Block 规划的太小,则磁碟的 Block 数目会大增,而造成 inode 在指向 block 时候的一些搜寻时间的增加,又会造成大档案读写方面的效率较差,这也与 inode 有一定程度的相关性呢!需要特别留意的是:『当系统读取了某一个档案,则该档案所在的区块资料会被载入到记忆体当中,所以该磁碟区块就会被放置在主记忆体的缓冲快取区中,若这些区块的资料被改变时,刚开始资料仅有主记忆体的区块资料会被改变,而且在缓冲区当中的区块资料会被标记为” Dirty “,这个时候磁碟实体区块尚未被修正!所以亦即表示,这些” Dirty “区块的资料必需写到磁碟当中,以维持磁碟实体区块上的资料与主记忆体中的区块资料的一致性。』这也是为什么当 Linux 系统不正常关机,或者是突发性的跳电时,总是会造成系统在磁碟检验上面大花时间的原因了!   o Superblock:当我们在进行磁碟分割( partition )时,每个磁碟分割槽( partition )就是一个档案系统( filesystem ),而每个档案系统开始的位置的那个 block 就称为 superblock ,superblock的作用是储存像是档案系统的大小、空的和填满的区块,以及他各自的总数和其他诸如此类的资讯等等,这也就是说,当您要使用这一个磁碟分割槽( 或者说是档案系统 )来进行资料存取的时候,第一个要经过的就是 superblock 这个区块了,所以啰, superblock 坏了,您的这个磁碟槽大概也就回天乏术了!   o Inode: 在 Linux 档案与目录管理 当中,我们提到了很多的 inode 概念,这里在加重补强一下说明:对于档案系统而言一个inode是在inode tables 中的一个项目。Inode包含了所有档案有关的资讯例如名称、大小、连接的数量、资料建立之日期,修改及存取的时间。它也包含了磁碟区块的档案指向(pointer)。pointer是用来记录档案被储存在何处。对于 inode 的规划方面,我们可以使用 mke2fs 来进行。   大致上硬碟就有这些东西,您还得了解每一个 filesystem 就是一个磁碟分割槽,免得到时候底下讲的东西太混乱时,造成您的困扰,那就不好意思啦!  查看硬碟或目录的容量   好了!那么在文字介面底下有什么方法可以查看目前的磁碟最大容许容量、已经使用掉的容量、目前所在目录的已使用容量?还有还有,怎么知道目前目录底下使用掉的硬碟容量呢?以及如何查询目前的 inodes 数目?呵呵!底下我们就来谈一谈主要的两个指令:   df 查看以挂载磁碟的总容量、使用容量与 inode 等等   du 查看档案使用掉的容量有多少?     · df   语法:   [root @tsai /root ]# df -[ikm] 参数说明: -i: 使用 i-nodes 显示结果 -k: 使用 KBytes 显示结果 -m: 使用 MBytes 显示结果 范例: [root @test /root ]# df -k    <==以 KB 显示磁碟空间 Filesystem      1k-blocks   Used Available Use% Mounted on /dev/hda1       2118832  904600  1106600 45% / /dev/hda3        497861   37525  434632  8% /disk1 none           31220     0   31220  0% /dev/shm /dev/hda5        101089   4127   91743  5% /proxy1 /dev/hda6        101089   4127   91743  5% /proxy2 /dev/hda2       1004052   38360  914688  5% /var /dev/fd0         1423   1405    19 99% /mnt/floppy  说明:   这是用来显示目前磁碟空间的指令!需要注意的是,由于我们的档案或者是外挂的磁碟都是加在『 / 』底下,所以当根目录没有空间的时后,嘿嘿!你的 Linux 系统大概就是挂了吧~(说个笑话!当初我们系上有个研究生在管理 Sun 的工作站,是别研究室的,他的硬碟明明有好几 GB ,但是就是没有办法将几 MB 的资料 copy 进去,他就去跟老板讲说机器坏了!嘿!明明才来维护过几天而已为何会坏了!结果老板将维护商叫来骂了 2 小时左右吧!后来,维护商发现原来硬碟的『总空间』还有很多,只是某个磁区填满了,偏偏该研究生就是要将资料 copy 去那个磁区!呵呵!后来那个研究生就被命令『再也不许碰 Sun 主机』了~~)当然啰!你可以将你的资料放置在加挂的硬碟中,那么如何知道目前哪一个磁碟还有多少空间呢?!       这里要请大家再复习一下,我们的硬碟磁区规划中, primary 磁区每一颗硬碟只允许 4 个,其他的就放置在 Extended 磁区中了!而,硬碟的代号与 IDE 的插槽是有关系的!如果忘记了,那就回去 安装 Linux   那一章复习一下吧!好了!假设我只有一棵硬碟,且放在 IDE 的 mater ,那么我的硬碟就是 /dev/hda 啰!而在这颗硬碟中的分割磁区就可以由 /dev/hda1 开始向上加!       OK,那么使用 df -k 之后,出现的上面的资料中,可以知道我的硬碟更分为 /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda5 与 /dev/hda6 ,咦! /dev/hda4 跑去哪里了!呵呵!其实 /dev/hda4 通常就是 Extended 磁区啦!而后面的 /dev/hda5, /dev/hda6 等磁区就是由 /dev/hda4 所切出来的!所以 /dev/hda5 + /dev/hda6 = /dev/hda4 !当然,如果还有没有显示出来的,例如 Swap ,则 /dev/hda4 还有可能更大呦!   那么来解释一下上面的资料吧!   · Filesystem:说的是磁区啦!另外,如果你有加挂软碟的话,那么就会出现如上表中最后一行啰!   · 1k-blocks:说明底下的数字单位是 1KB 呦!如果你使用 df -m 则这一栏会出现 1M-blocks 啰!   · Used :顾名思义,就是使用掉的硬碟空间啦!   · Available :也就是剩下的磁碟空间大小;   · Use% :就是磁碟的使用率啦!如果使用率高达 90% 以上时,最好需要注意一下了,免得容量不足造成系统问题(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁碟!)。   · Mounted on :就是磁碟挂载的目录所在啦!例如 /dev/hda5 是挂载在 /proxy1 底下,而 /var 是 /dev/hda2 这个磁区啰!   另外,需要注意的是,有的时后某些系统会出现 /proc 这个磁区,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要载入的系统资料,而且是挂载在『记忆体当中』的,有点像是以前 DOS 年代的虚拟硬碟啦!所以当然没有占任何的硬碟空间啰!   · du   语法:   [root @test /root ]# du [-abckms] [目录名称] 参数说明: [目录名称] 可以省略,如果省略的话,表示要统计目前所在目录的档案容量 -a  :全部的档案与目录都列出来!预设值是指列出目录的值! -b  :列出的值以 bytes 输出 -c  :最后加总 total ! -k  :列出的值以 KB 输出 -m :列出的值以 MB 输出 -s  :只列出最后加总的值! 范例: [root @test /root]# du -m   <==列出 /root 底下的目录与档案所占的容量以 MB 输出 [root @test /root]# du -s /home <==将 /home 底下的目录与档案的容量加总后输出,这里只会输出总容量!  说明:   在 Windows 底下可以使用档案总管来管理你的磁碟,在 Linux 底下也可以轻易的以 du 来知道目前磁碟的档案容量耶!在预设的情况下,容量的输出是以 KB 来设计的,如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可啰!而,如果你只想要知道该目录占了多少容量的话,呵呵,使用 -s 就可以啦!  切割与格式化硬碟:   对于一个系统管理者 ( root ) 而言,硬碟的的管理是相当重要的一环,尤其近来硬碟已经渐渐的被当成是消耗品了.....好了,如果我们要 partition 一棵新的硬碟,要使用什么程式来工作?而如果已经 partition 好了,又要如何来格式化呢?刚刚我们提到了 inodes 这个东西,那么使用格式化 ( format ) 的软体可以怎样的来格式化好我们所需要的 inodes 的大小呢?这里我们就来谈一谈啰!   fdisk 硬碟切割 partition 的工具   mke2fs 就是 Linux 底下重要的 format 格式化的工具   e2label 修改硬碟的 label (表头名称) 的工具!   mknod 新增硬体对应档的工具!  ·fdisk   语法:   [root @test /root ]# fdisk [-l] [装置名称] 参数说明: -l :直接列出该硬碟装置的 partition table 范例: [root @test root]# fdisk /dev/hdb<==分割我的 hdb 磁碟,记得后面不接数字 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  u  change display/entry units  v  verify the partition table  w  write table to disk and exit  x  extra functionality (eXPerts only) Command (m for help): p <==印出目前的磁碟分割状态 Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System /dev/hdb1  *     1    250  1007968+ 83 Linux Command (m for help):q <==不储存离开 fdisk [root @test root]# fdisk -l /dev/hdb<==直接秀出这颗硬碟当中的 partition Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System /dev/hdb1  *     1    250  1007968+ 83 Linux  ·说明:   还记得我们刚刚在 认识硬碟   里面提到的部分内容吗?其实 fdisk 最主要的工作就是在修改『 partition table 』而已,并没有实际的将硬碟切切割割的啦!他会定义出某一个 partition 是由 n1 磁柱到 n2 磁柱之间这样的资讯!因此,如果硬碟切割错误时,只要在 format 之前将 partition tables 复原,那么就可以将硬碟原来的资料救回来啰!所以,一个好的管理员,有时候也会将自己的 partition table 记录下来,以备不时之需呀!这个 fdisk 只有 root 才能执行,此外,请注意,使用的『装置名称』请不要加上数字,因为 partition 是针对『整个硬碟装置』而不是某个 partition 呢!所以执行 fdisk /dev/hdb1 就会发生错误啦!要使用 fdisk /dev/hdb 才对!底下说一说进入 fdisk 之后的几个重要参数吧!   注:您可以使用 fdisk 在您的硬碟上面胡搞瞎搞的进行实际操作,都不打紧,但是请『千万记住,不要按下 w 即可!』离开的时候按下 q 就万事无妨啰!   o 硬碟资讯:通常我们需要知道这颗硬碟的资讯时,直接按下『 p 』就可以了解了,例如上面的例子中,我的一棵硬碟切割呈上面的模样,而我的 System 除了一个 swap 之外,其他的都是属于 ext2 的呦!   o 删除磁区:如果我要删除一个以存在的磁区时,就需要:   1.fdisk /dev/hdb :先进入 fdisk 画面;   2.p :先看一下磁区的资讯,假设要杀掉 /dev/hdb1;   3.d :这个时候会要你选择一个 partition ,就选 1 啰!   4.w :储存到磁碟资料表中,并离开 fdisk ;当然啰,如果你反悔了该怎么办!?呵呵,直接按下 q 就可以取消刚刚的删除动作了!   [root@test root]# fdisk /dev/hdb Command (m for help): p Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System /dev/hdb1  *     1    250  1007968+ 83 Linux Command (m for help): d Partition number (1-4): 1 Command (m for help): p Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System 看!原先的 partition 不见了,如果确定储存就按下 w ,否则按下 q 赶紧离开!  5.   o 新增磁区:那么如何增加一个磁区呢?前提之下是你的硬碟必须还有硬碟空间才行!   1.fdisk /dev/hdb :先进入 fdisk 画面中;   2.n:新增一个磁区,这个时候系统会问你,如果您已经具有 extended 磁区时,那么系统会问您,您要新增的是 Primary 还是Logical ,而如果您还没有 extended ,那么系统仅会问你要新增 Primary 还是 Extended,除此之外,如果您已经用完了四个 P + E 的话,那么就仅有 Logical 可以选择啦!请再回到刚刚说明硬碟的地方再次的复习一下吧!如果是选择 primary 的话,请按 p ,否则请按 e 或 l 。   3.p :由于选择为 primary 所以就会按下 p 啰!   4.1-4 :primary 只允许四个,(仍然比 Windows 只允许一个好的多了!),所以这里请按尚未被使用的那一个磁区啰!   5.w :同样的储存离开啰!   [root @test root]# fdisk /dev/hdb Command (m for help): p <==印出资讯 Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System /dev/hdb1  *     1    250  1007968+ 83 Linux Command (m for help): n <==选择新增 Command action  e  extended  p  primary partition (1-4) e <==输入 e 来新增 extended 啰! Partition number (1-4): 2 First cylinder (251-523, default 251):  <==这里按 Enter 即可!用预设值! Using default value 251 Last cylinder or +size or +sizeM or +sizeK (251-523, default 523): +100M Command (m for help): p <==再印出资讯 Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System /dev/hdb1  *     1    250  1007968+ 83 Linux /dev/hdb2      251    276  104832  5 Extended <==这行即是新增的! Command (m for help): n <==再次新增 Command action  l  logical (5 or over)  p  primary partition (1-4) l<==这次选择 logical 的 l 哩! First cylinder (251-276, default 251):  <==这里按 Enter 即可!用预设值! Using default value 251 Last cylinder or +size or +sizeM or +sizeK (251-276, default 276): +100M Command (m for help): p Disk /dev/hdb: 128 heads, 63 sectors, 523 cylinders Units = cylinders of 8064 * 512 bytes  Device Boot  Start    End  Blocks  Id System /dev/hdb1  *     1    250  1007968+ 83 Linux /dev/hdb2      251    276  104832  5 Extended /dev/hdb5      251    276  104800+ 83 Linux  <==这行即是新增的!  透过上面的例子,您可以清楚的看到,呵呵!第一个 logical 是在 5 号呦!OK!在 fdisk 完成之后,请记得使用 mke2fs 格式化啰!另外,请注意,如果过程中进行错误时,那么赶紧按下 q 离开即可!   o 操作环境的说明:以 root 的身份进行硬碟的 partition 时,最好是在单人维护模式底下比较安全一些,此外,在进行 fdisk 的时候,如果该硬碟某个 partition 还在使用当中,那么很有可能系统核心会无法重新载入硬碟的 partition table ,解决的方法就是将该使用中的 partition 给他卸载,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成功啰!   o 注意事项:另外,请注意一下,虽然一颗硬碟最大的逻辑磁区可以到达 64 颗( 总数,包含 1~4 的 primary partition ),但是并非所有的 Linux distribution 都会将所有的逻辑磁区对应的磁碟代号都写入系统当中,以 Red Hat 为例,他仅列出 1~16 个代码,其他的您就得自己动手做啦!至于 Mandrake 的话,他则是使用自己侦测的,当您以 fdisk 设定好了 partition table 之后,磁碟对应的磁碟代号就会自动的在您的 /dev/ 里头设定完成啰!不过,有的时候您还是得自己设定一下磁碟代码啦!如何设定呢?就使用 mknod 指令吧!   ·mke2fs   语法:   [root @test /root ]# mke2fs [-b block-size] [-i inode-size] [root @test /root ]# mke2fs [-c] [root @test /root ]# mke2fs [-L] [root @test /root ]# mke2fs [-j] 参数说明: -b  :在设定每个资料区块占用的大小,目前支援的大小有 1024, 2048, 4096 三种! -i  :设定 inode 值! -c  :检查错误磁碟,会比较慢呦! -L  :规划设定这个磁区的 label (表头名称) -j  :建立 ext3 这个 journaling 的档案格式 范例: [root @test /root]# mke2fs /dev/hda5 以 mke2fs 预设的条件( ext2 )格式化 /dev/hda5 这个装置 [root @test /root]# mke2fs -c /dev/hda5 在格式化的过程中一起检查硬碟 [root @test /root]# mke2fs –j -b 8192 -i 8192 /dev/hda5 改变 block 由 4096 预设值改为 8192 [root @test /root]# mke2fs /dev/fd0   <==格式化软碟呀! mke2fs 1.26 (3-Feb-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 216 inodes, 1680 blocks 84 blocks (5.00%) reserved for the super user First data block=1 1 block group 8192 blocks per group, 8192 fragments per group 216 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 35 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.  ·说明:   这是用来将磁碟格式化成 Linux 系统档的指令。基本上,只要写入对的装置档案就可以了。例如我们要格式化软碟的话,或是新的硬碟 hda5 等等!这个指令通常是在新的硬碟上面切割完之后,再加以格式化的!另外,如果要将旧的磁区格式化成 ext2 格式的话,就使用这个指令吧!进行当中显示的讯息有点像上面的最后几行,系统会显示目前的格式化的预设值!而如果要设定不同的 Block ( 就是前面提到的一个逻辑 sector 的大小 ),就可以使用 -b 这个参数!请注意啰,预设的情况下, Block 是 4096!此外,您也可以自订 inode table 呢!而,当没有指定的时候, mke2fs 使用 ext2 为格式化档案格式,若加入 –j 时,则格式化为 ext3 这个 Journaling 的 filesystem 呦!   ·e2label   语法:   [root @test /root ]# e2label [/dev/hd...] [label_name] 参数说明: 范例: [root @test /root]# e2label /dev/hda1 / 上面的案例为将 /dev/hda1 这个磁碟槽的名字设定为 / 啦!  ·说明:   个东西也蛮有意思的!他主要是用来『更改磁碟的表头资料』,也就是类似『档案总管』里面每一个磁碟机代号后面的名称!没有什么特异功能啦!就是有趣的用途而已!此外,这个用途也可以被用在 /etc/fstab 里头!也就是可以增加那个磁碟代号的设定啰!   ·mknod   语法:   [root @test root]# mknod [device] [bcp] [Major] [ Minor] 参数说明: b :设定节点成为周边储存设备档 c :设定节点成为周边设备如滑鼠等 p :建立 FIFO 范例: [root@test /]# cd /dev [root@test dev]# ll hda* lr-xr-xr-x  1 root   root      32 Oct 19 13:04 hda -> ide/host0/bus0/target0/lun0/disc lr-xr-xr-x  1 root   root      33 Oct 19 13:04 hda1 -> ide/host0/bus0/target0/lun0/part1 lr-xr-xr-x  1 root   root      33 Oct 19 13:04 hda2 -> ide/host0/bus0/target0/lun0/part2 [root@test dev]# ll ide/host0/bus0/target0/lun0/ total 0 brw-------  1 root   root    3,  0 Jan 1 1970 disc brw-------  1 root   root    3,  1 Jan 1 1970 part1 brw-------  1 root   root    3,  2 Jan 1 1970 part2 [root@test dev]# mknod hda3 b 3 3<==注意到啰!那个 3 3 就是上面的数值 [root@test dev]# ll hda* lr-xr-xr-x  1 root   root      32 Oct 19 13:04 hda -> ide/host0/bus0/target0/lun0/disc lr-xr-xr-x  1 root   root      33 Oct 19 13:04 hda1 -> ide/host0/bus0/target0/lun0/part1 lr-xr-xr-x  1 root   root      33 Oct 19 13:04 hda2 -> ide/host0/bus0/target0/lun0/part2 brw-r--r--  1 root   root    3,  3 Oct 22 17:16 hda3  ·说明:   mknod 在平时是几乎不会使用到的,但是某些时候,确实有可能会出问题!这个指令的设定方法中,必需要取得设备的 Major ( 主要 ) 与 Minor ( 次要 ) 的数值后,才能够设定完整!上面是我的 Mandrake 9.0 在 P-166 MMX 上面的情况,由于之前仅分割成两槽,所以仅到达 /dev/hdb2 而已,如果要 hdb3 的话,那么除了 fdisk 完成之后, Mandrake 会自行多设定一个之外,否则就要自己来啰!而由这个装置的内容说明上面,我们可以这样定义一下:       检查硬碟与资料同步化写入:   现在也建立好了新的 partition 了,也 format 好了,那么有没有其他的关于硬碟的工作需要来进行呢?有的,就是需要怎样来检查硬碟有没有坏轨呢?那个就是 fsck 这个工具的用途啦!此外,您会发现到,在 / 这个目录底下 ( 其实只要有挂载硬碟的那个目录底下都有这个目录 ) 会有一个特殊的目录,就是『 lost+found 』这个目录啦!对的!就是当你处理完 fsck 之后,如果程式有发现到任何的错误的档案,就会将该档案的资料给他丢到这个目录当中,嘿嘿!所以当你发现你的 Linux 目录当中有这个档案时,不要担心,那个是正常的啦!而且只有挂载 partition 的目录才会有这个预设的目录啰!       还有,由于在 Linux 系统当中,为了增加系统效能,通常系统预设就是一些资料会写在记忆体当中,并不会直接将资料写入硬碟里面,这是因为记忆体的速度要比硬碟快上若干倍呀!但是有个问题就发生了,万一系统由于『跳电』或者是其他的莫名原因,造成系统的 shutdown 时,唉呀!怎么办?!系统就完蛋啦!所以啰,我们需要在某些特定的时候让资料直接回存到硬碟之中呀!了乎!这里提供几个惯用的指令,其中,那个 fsck 是相当重要的,请参考其用法啰!   fsck    检查硬碟有没有坏轨的工具   badblocks 跟 fsck 一样,但是 fsck 的功能比较强,所以这个指令可以不学!   sync 将  记忆体中的资料给他同步化写入硬碟中     · fsck   语法:   [root @test /root ]# fsck [-Aar] [装置名称] 参数说明: -A  :依据 /etc/fstab 的内容,将所有的装置都扫瞄一次(通常开机过程中就会执行此一指令) -a  :自动修复检查到的有问题的磁区,所以你不用一直按 y 啰! -r  :一定要让使用者决定是否需要修复,这与上一个 -a 刚好相反! 范例: [root @test /root]# fsck -a /dev/hda5 <==检查 /dev/hda5 这个磁区有没有错误!  说明:   这是用来检查与修正硬碟错误的指令。注意:通常只有身为 root 且你的系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令,可能会造成对档案的危害!通常使用这个指令的场合都是在系统出现极大的问题,导致你在 Linux 开机的时候得进入单人单机模式下进行维护的行为时,才必须使用此一指令!另外,如果你怀疑刚刚格式化成功的硬碟有问题的时后,也可以使用 fsck 来检查一下硬碟呦!其实就有点像是 Windows 的 scandisk 啦!此外,由于 fsck 在扫瞄硬碟的时候,可能会造成部分 filesystem 的损坏,所以『要执行 fsck 的时候,请将该 partition umount 一下!』,然后再去执行!       常常我们会发现,在比较老旧的机器上(例如我的 p-166),如果主机不正常的关机(例如跳电啰!),那么硬碟很可能会出现错误的状况!这个时候 Linux 就无法正常的开机!这个时候就需要输入 root 的密码,以登入单人维护模式(run level 1),然后下达 fsck -a /dev/hdxxx 来检查你的硬碟!等到确认成功之后,就使用 reboot 来重新启动吧!     · badblocks   语法:   [root @test /root ]# badblocks [-svw] [装置名称] 参数说明: -s  :在萤幕上列出进度 -v  :可以在萤幕上看到进度 -w  :使用写入的方式来测试,建议不要使用此一参数,尤其是待检查的装置已有档案时! 例: [root @test /root]# badblocks -sv /dev/hda1   · 说明:   这是用来检查硬碟或软碟磁区有没有坏轨的指令!跟 Windows 的 scandisk 相同功能啦!不过由于 fsck 的功能比较强,所以目前大多已经不使用这个指令了!     · sync   语法:   [root @test /root ]# sync 参数说明: 例: [root @test /root]# sync; sync  说明:   在正常的状况中,由于为了增加系统的效率,因此,很多时候进行中的程式产生的程序之暂存档案都不会直接存至磁碟机当中,而是记忆在记忆体当中!由于记忆体的资料传递速度比磁碟机快了几十倍,所以如此一来将有助于整个系统的效率!!然而这也产生了一个困扰,那就是当你的系统不正常关机的时候,可能会使得一些已经经过改变,却还没有存入磁碟中的资料遗失(因为还在记忆体当中!)所以这个时候 sync 的功能就相当的大了!因为他可以直接将系统暂存在记忆体当中的资料回存写入磁碟当中,呵呵!很棒吧!但是需要注意你的系统核心 (kernel) 必须要有支援 sync 才行(目前几乎一定都会支援的啦!)     关于软碟开机片:   嗯!搞定了上面的动作了没?!好了,如果搞定了的话,现在我们来制作一个可以开机的软碟开机片好了!怎么制作呢?呵呵!就是利用 mkbootdisk 啰!  mkbootdisk 制作软碟开机片   fdformat  这是用来『低阶格式化』软碟的工具     · mkbootdisk   语法:   [root @test /root ]# mkbootdisk --device /dev/fd0 `uname -r` 参数说明: --device  :后面接装置!通常接的就是软碟啦 /dev/fd0 ! 范例: [root @test /root]# mkbootdisk --device /dev/fd0 `uname -r`  <==建立可开机软碟!!  说明:   这是制作开机磁片的指令,其中,『 `uname -r` 』是目前 Linux 系统所使用的核心版本,如果你有多个核心版本的话,你以可以直接输入核心版本。例如在我的系统中,旧的核心还是有保留的,所以我都会至少有两个核心,在我管理的某部主机中,核心为 2.4.7 及 2.4.18 ,那么如果我要直接以 2.4.18 来开机的话,就可以使用   mkbootdisk --device /dev/fd0 2.4.18  建立软碟开机片一直是个好主意!他可以在你求助无门的时候给你莫大的帮助喔!所以,建立一个新的软碟开机片是一个好主意啦!  · fdformat   语法:   [root @test /root ]# fdformat [装置名称] 参数说明: 例: [root @test /root]# fdformat /dev/fd0H1440   · 说明:   这是用来『低阶格式化』软碟的指令。(注意:软碟的装置档为 /dev/fd0 )!在上面的装置档案为 /dev/fd0H1440 ,其中加在 /fd0 之后的 H1440 为表示 1.44MB 的软碟容量!在低阶格式化之后,还要将软碟的档案格式化为 Linux 的 ext2 之型态,则需要使用 mke2fs 指令!     各式磁区的挂载:   要将上面我们所建立起来的硬碟或软碟正式的在 Linux 上面启用时,一定需要将他挂载上档案系统!而所谓的『挂载点』则是该硬碟所在的目录,且在该目录下的所有目录都归在该硬碟所有!假设一个情况好了,我们的 / 为 /dev/hda1 而 /home 为 /dev/hda2 ,那么在 /home/test 底下的咚咚就也都归 /dev/hda2 这个 partition 所有啰!而需要特别留意的是,由于挂载档案系统需要挂载点,所以挂载的时候得先建立起挂载的目录才行!除此之外,如果您要用来挂载的目录里面并不是空的,那么挂载了档案系统之后,那么原目录下的东西就会暂时的消失。举个例子来说,假设您的 /home 原本是属于根目录 / 底下的 partition 所有,底下原本就有 /home/test 与 /home/vbird 两个目录。然后你想要加入新的硬碟,并且直接挂载 /home 底下,那么当您挂载上新的 partition 时,则 /home 显示的是该 partition 的内容,至于原先的 test 与 vbird 这两个目录就会暂时的被隐藏掉了!注意喔!并不是被覆盖掉,而是暂时的隐藏了起来,等到 partition 被 umount 之后,则该目录的内容就会再次的跑出来啦!  ·mount   语法:   [root @test /root ]# mount [-ahlV] [root @test /root ]# mount -t type /dev/hdxx /mountpoint [root @test /root ]# mount -o [options] [root @test /root ]# umount /mountpoint 参数说明: -a  :依照 /etc/fstab 的内容将所有相关的磁碟都挂上来! -h  :只列出 mount 相关的参数,并不挂载任何装置 -l  :列出目前已经挂载的装置、档案系统名称与挂载点! -V  :列出 mount 的版本资讯 type :将后面 /dev/hdxx 这个装置以 type 的档案格式挂载到 /mountpoint 这个点,    常见的 type 有底下几个:    vfat, msdos    :这个是支援 Windows 系统的档案格式,尤其是 vfat 常用!    ext, ext2     :这个就是 Linux 的主要档案格式啦!    iso9660      :光碟机的档案格式    nfs, ntfs, ufs  :windows 2000 使用 NTFS 格式呀! -o  :这个参数后面接的咚咚可多了!可用的资料可不少呢!    rw   :让 mount 的磁区为可读写    suid  :允许该磁区可以设定档案为 SUID 的状态!    exec  :允许该磁区可以执行 binary 的档案!    auto  :允许该磁区可以使用 mount -a 的参数设定!    nouser :禁止其他人(非 root 之使用者)使用挂载功能!这是预设值!    async :允许磁区可以进行非同步记录(记忆体与硬碟不同步!最常用!)    defaults:同时具有 rw, suid, dev, exec, auto, nouser, async 这些功能的设定值!    nosuid :不许该磁区具有 SUID 的档案属性!    ro   :设定为唯读属性!    remount :让系统本来挂载的磁区重新被挂载! 范例: [root @test /root]# mount -a [root @test /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom <==挂上光碟 [root @test /root]# mount -t vfat /dev/fd0 /mnt/floppy  <==挂上 windows 档案系统的软碟 [root @test /root]# mount -t ext2 /dev/fd0 /mnt/floppy  <==挂上 Linux  档案系统的软碟 [root @test /root]# mount -t ext2 /dev/hdc6 /home     <==挂上 Linux 档案格式硬碟 [root @test /root]# mount -o remount,rw /          <==让根目录重新挂载为可读!  ·说明:   这个指令只有 root 才能执行!如果你不想要单独的将某个磁碟挂上来,那么执行:   ·mount -a  ·就可以依照 /etc/fstab的的参数内容将所有的磁碟给他重新挂上去!此外,需要注意的是,由于 Linux 系统中,每一个路径都有可能是一个独立的磁区系统,所以需要将每个磁区系统都挂上各自的挂载点!详细的内容请回去参考一下上一篇 Linux 档案系统 的说明。另外,由于各个磁区的档案系统可能并不相同,所以您必须先要了解该磁区的档案系统,这样才可以进行 mount 的工作!如何知道该磁碟的档案格式呢?可以使用 fdisk 来显示的功能即可!   请注意呦!由于 mount 之后的档案格式是没有办法直接被拿掉的!尤其在使用 fsck 检查你的硬碟时,更是不能挂上硬碟的!而如何将硬碟至挂载点卸载呢?呵呵,就直接使用 umount 即可啰!   底下分别谈一谈各个装置的挂载情况:这里可能先要强调一个观念,在 Windows 底下,磁碟分割是以 A, B, C, D, .... 等等的方式来划分的,然而在 Linux 或 Unix 系统之下,却是以目录来代表,也就是说,一个目录很可能就是一个磁区了!举个例子来说,通常 Linux 预设的软碟挂载的地点在 /mnt/floppy 这里!呵呵!那么如果你需要软碟的资料时,就将 /dev/fd0 这一个装置(前面提过啰!这个是周边存取装置的一个设备档案类型)挂上 /mnt/floppy 就可以啦!然后你进入到 /mnt/floppy 就可以读取软碟的资料啰!OK!在这里也必须要介绍一下 mount 这个指令喔!   o挂载软碟:   很多朋友常常会使用到软碟,尤其是在网路有问题的时候,那么如何使用 Linux 将软碟挂上来呢?!首先,您给先了解你的磁片档案的格式,例如 Linux 的档案格式( ext2 )与 Windows 的档案格式( vfat )是不一样的!分别可以使用如下的方式挂上来:       [root @test /] # mount -t ext2 /dev/fd0 /mnt/floppy<==Linux 格式 [root @test /] # mount -t vfat /dev/fd0 /mnt/floppy<==Windows 格式 [root @test /] # umount /mnt/floppy<==将软碟机卸载  o     所以啰!即使是 Windows 格式的档案,在 Linux 底下仍然是可以读取的到的呦!另外,要注意的是,即使你使用软碟完毕之后,一定要将 /mnt/floppy 卸载之后才可以取出软碟片喔!不然系统会一直告诉你发生错误啰!而在卸载 /mnt/floppy 的时候,你一定不能在该目录底下,否则会发生错误讯息喔!而如果载入的格式不符合,系统也不会将该软碟挂上来的呦!好了,那么怎么制作 ext2 的软碟呢?简单的很,就使用 mke2fs /dev/fd0 就行啦!   o挂载光碟!   在某些 Linux distribution 底下,例如 Red Hat 7.2 在预设的状态下是将 CDROM 视为一个模组,预设的核心并没有将他载入,所以,如果你需要在 Red Hat 7.2 里面挂载 CDROM 的话,有两个解决的方法:   一个是直接将 CDROM 的模组载入系统中,这个动作比较简单,而且你也可以将这个指令直接写到 /etc/rc.d/rc.local 里面去即可!   [root @test / ]# modprobe cdrom [root @test / ]# modprobe ide-cd [root @test / ]# mount -t iso9660 /dev/cdrom /mnt/cdrom [root @test / ]# umount /mnt/cdrom  o     前两行是模组的载入,而第三行是挂载 CDROM ,第四行则是卸载!此外,由于预设的 CDROM 挂载就是以 iso9660 的 type 来做的,所以你也可以直接写成 mount /dev/cdrom /mnt/cdrom 就可以啰!   另外一个解决的方法是将 CDROM 的模组编译进核心当中!又有两种方式,一个是直接下载新的核心来编译,另一个则是直接以 Red Hat 出的更新版的核心来直接升级就可以啦!如果是使用 up2date 的话,那么升级核心是很简单的啦!   o挂载 Windows 磁区:   如果万一你在安装系统的时候忘记将 Windows 的 VFAT 格式的磁区 mount 上你的 Linux 时,该怎么办?!这种现象最常发生在多系统共存的环境中!例如再原有的 Windows 98 或 Win2000 上面安装 Linux ,但是结果却忘记将该磁区挂载上来!嗯!这样需要重新安装吗?!当然不需要了!又不是被入侵!那么该如何挂载上来呢?!就如同前面说的,由于一个目录可能代表了一个磁区,因此你必须要先建立一个磁区,然后再将此磁区挂载上你的 Linux 目录,就可以啦!另外,由于需要将磁区挂在目录下,所以你还得需要了解你的 Windows 磁区是在哪一个硬碟周边中喔!如何知道你的 Windows 磁区呢?就使用 fdisk 吧!假设你的 Windows 是在 Primary IDE 的硬碟,那么应该就是 /dev/hda 啰!则你可以这样做:   [root @test / ]# fdisk –l /dev/hda Disk /dev/hda: 255 heads, 63 sectors, 524 cylinders Units = cylinders of 16065 * 512 bytes   Device Boot  Start    End  Blocks  Id System /dev/hda1       1    268  2152678+ 83 Win95 FAT32 /dev/hda2  *    269    395  1020127+ 83 Linux /dev/hda3      396    459  514080  83 Linux /dev/hda4      460    524  522112+  5 Extended /dev/hda5      460    472  104391  83 Linux /dev/hda6      473    485  104391  83 Linux /dev/hda7      486    498  104391  82 Linux swap /dev/hda8      499    511  104391  83 Linux /dev/hda9      512    524  104391  83 Linux   o     使用 fdisk 指令的话就可以知道你的 Win95 FAT32 的磁区在哪一个,在上表中,显示的是 /dev/hda1 这一个磁区啰!那么假设我要将 Windows 的目录建置在 /mnt/win98 里面呢?就这样做吧:   [root @tsai / ]# mkdir /mnt/win98 [root @tsai / ]# mount -t vfat /dev/hda1 /mnt/win98 [root @tsai / ]# mount -t vfat -o iocharset=cp950 /dev/hda5 /mnt/win98  o     如此一来就将 Windows 的系统挂到 Linux 里面啰!简单吧!请注意,上面那个第三行所使用的参数可以让您的 Windows 98 的磁区当中的档案显示出正确的中文呦!   o安装新硬碟:   再来个新问题!那么我如果想要安装一颗新硬碟呢?呵呵,也是很简单啦,就跟在 Windows 底下一样!需要先 fdisk 然后在 format ,之后就可以顺利的挂上 Linux 系统啰!假设我安装的硬碟在 Primary 的第二个 IDE 上面,也就是 /dev/hdb 上,那么整个步骤应该就会是:   [root @test / ]# fdisk /dev/hdb .......(以下省略!直接以 fdisk 分割好硬碟啦!) [root @test / ]# mke2fs /dev/hdb1 在 Linux 中的 format 是 mke2fs 这一个指令喔! 上面的指令在将你的硬碟磁区格式化成 Linux 的 ext2 格式啦! [root @test / ]# mkdir /disk2 建立一个目录名称为 /disk2 ,预计用来挂载你的新硬碟 [root @test / ]# mount -t ext2 /dev/hdb1 /disk2 将硬碟挂上 Linux 系统啰!  o    ·   ·umount   语法:   [root @test root]# umount [-f] [devicemount_point] 参数说明: -f :强制将该档案系统退出,最常使用在无法退出的 NFS 档案系统中了! 范例: [root @test root]# umount /home  ·说明:   就是直接将 mount 上来的档案系统给他卸载即是!卸载之后,可以使用 df 看看是否还存在呢?  设定开机时即挂载的方式:   刚刚上面说了许多,那么可不可以在开机的时候就将我要的磁区都挂好呢?!这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不过,在开始说明前,这里要先跟大家说一说系统挂载的一些限制:   ·根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。   ·其它 mount point 必须为已建立的目录﹐可以任意指定﹐但一定要遵守必须的系统目录架构原则。   ·所有 mount point 在同一时间之内﹐只能挂载一次。   ·所有 partition 在同一时间之内﹐只能挂载一次。   ·如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录) 之外。   好了,那么我们进入 /etc/fstab 看一看吧:       [root @test / ]# more /etc/fstab # History: # ================================================== # When     Who   What # 2002/10/19  VBird  This file had been modified by me. # ================================================== # device    MountPoint   filesystem   parameters   dump  fsck /dev/hda1    /        ext3      defaults    1    1 /dev/hda2    swap      swap      defaults    0    0 LABEL=/backup  /backup     ext3      defaults    1    1 none      /dev/pts    devpts     mode=0620    0    0 none      /proc      proc      defaults    0    0 /dev/hda3    /mnt/win98   vfat      defaults,iocharset=big5,codepage=950 0 0  我这个人比较龟毛一点,因为 Mandrake 9.0 的 /etc/fstab 档案排列方式蛮丑的,虽然每一栏之间只要以空白字元分开即可,但就是觉得丑,所以通常我就会自己排列整齐,并加上注解符号,就是 # 字号,来帮我记忆这些资讯!总共有六栏,分别来谈一谈吧!   1.磁区或标头:就是磁区啦!不过,如果是在安装的时候有给予一个 label (标头) 的话,那么使用 label 也可以,例如上面的 LABEL=/backup 那一行。而如果是我们增加新的磁区的话,那么这里就必须要使用『磁区』了!例如新安装一个硬碟在 /dev/hdd1 当中,那么这里就写 /dev/hdd1 啰!那么如果我还是想要使用 label 来挂载呢?!就使用 e2label 来建立 label name 啦! e2label 的用法在前一章有说明,忘了的话,快去看看先!   2.挂载的目录点:就是 mount 的挂载点啦!   3.该磁区的档案格式:目前 Linux 大都使用 ext2, ext3, reiserfs 等等的,不过,如果你有使用 Windows 的档案格式的话,那么就可以使用 vfat 啰!目前支援的格式还有 iso9660( 光碟 ), msdos, minix, nfs, swap 等等的档案格式;   4.档案格式参数区:这个就重要了!有哪些磁碟参数可以参考呢?在前一章的 mount 指令里面介绍了一些些,这里再更详细的提出说明如下:      1. 另外,如果有兴趣的话,还可以加上类似『iocharset=big5,codepage=950』这种额外的功能参数以启动中文编码的支援,更详细的资料可以 man mount 搜寻呢!       2. 是否可以被 dump 指令备份:这一列在说明,使用 dump 指令来备份时时,该磁区是否跟着一起动作?如果没有数字的话则以 0 带入!由于我们希望有备份的功能,所以这里当然就开启( 1 )啰!       3. 检验磁区:这个数字在用来以 fsck 检验磁区用的!在开机与关机的时候,通常 Linux 希望检验一下磁区,所以这里需要设定一下。通常 root (就是根目录 / 啦)需要设定为 1 ,而其他的档案系统( filesystem )就设定为 1 即可!当然啰!由于 proc 及 swap 与 windows 并不需要以 fsck 来检验,所以就可以设定为 0 啰!   所以,假如我要新增加一个 /dev/hdb1 并且挂载在 /disk2 这个目录下的话,那幺我就在该档案的最底加上一行:    /dev/hdb1   /disk2     ext2  defaults   1  1  或者我直接在这个档案上面规划好之后,再下达: mount -a 那幺程式就会自动的将 /etc/fstab 里面的资讯读出,并且依据里面的情况来挂载磁区喔!如此一来,每次开机的时候都会自动的建立好对应的咚咚啦!       有经验的朋友大概都还蛮清楚的,就是 /etc/fstab 写错了的时候(最常发生在 quota 设定的时候)会造成无法开机的窘境,因此,通常我们都会把自己所想要的资料给他写在 /etc/fstab 之后,以 mount –a 驱动看看,此外,如果错误已经造成了呢?那也不要太担心,由于错误造成了,所以根目录 / 预设会变成唯读属性,这个时候就得要进行 remount 的工作了,亦即下达:    mount –n –o rw,remount /  这样应该就可以将磁碟挂载成为可读写了!       此外,您必须了解的是, /etc/fstab 写的是您的设定档,但是目前的系统所挂载的资讯则是记录在 /etc/mtab 这个档案中喔!这个档案会即时的进行更新,如果您重新手动挂载你的档案系统,那幺这个 mtab 就会跟着变动啰!     虚拟记忆体 Swap:   我们前面谈了很多各式各样的 filesystem ,不过,您晓得在安装的时候设定的那一个『虚拟记忆体, swap 』要如何增加吗?举个简单的例子吧,我们的 Sun 主机上面,由于跑的程式太庞大了,通常 swap 需要开启到 1GB 左右,但是呢,有的时候还是会不够的!在 Linux 当中,如果您需要使用到很大量的虚拟记忆体,偏偏当初给的 swap 磁区不够大,那要怎幺办呢?有什幺方法可以来达成:   · 设定一个 swap partition ?   · 建立一个虚拟记忆体的档案?   怎幺说呢?基本上,虚拟记忆体就是将硬碟规划出一个区间,让记忆体的资料可以经由硬碟来读取罢了,那幺如果有 swap file 也就够了对不对!是呀!所以这里我们使用两种方法来尝试建立一下 swap 的扩增吧!     · Swap partition ( 建立虚拟记忆体的磁区 ):   第一种正规的方法是『直接再加一棵硬碟,并且将其中某个磁区规划为 swap 的 filesystem 』,呵呵,说的容易,做起来更容易!实际的动作为:  1. 以『 fdisk /dev/hd[a-d] 』先建立一个 partition ,还记得 fdisk 怎幺做吗?回去复习一下吧!简单的来说,就是先 (1)建立一个 partition,然后 (2)将该 partition 的 ID 改为 82 这一个 swap 的磁碟档案格式代号就对啦!这样这一步骤就 OK 啰!       2. 以『 mkswap /dev/hd[a-d][1-16] 』的方式来将您刚刚建置出来的 partition 『格式化为 swap 的档案格式』,很简单吧!这样就格式化 OK 啰!       3. 再来则是将 swap 启动,启动的指令为『 swapon /dev/hd[a-d][1-16] 』,这样就能启动了!很简单吧!这样 swap 就自动加入到记忆体容量里头去了!   那幺如何将 swap 关掉呢?呵呵!很简单呀!就是直接给他 swapoff 就对了!     · Swap file ( 建立虚拟记忆体档案 ) :   那幺万一我不想新增加一个磁区呢?可不可以使用 swap file 的方式来新增硬碟呀!当然可以啰!而且步骤还蛮简单的呢!基本的流程就是:  1. 以 dd 指令来建立 swapfile ;   2. 以 mkswap 来将 swapfile 格式化为 swap 的档案格式;   3. 以 swapon 来启动该档案,使成为 swap ;   4. 以 swapoff 来关闭该档案!   嗯!多说无益!我们来实际的将您的主机系统上面新增 64MB 的虚拟记忆体吧!如果可能的话,请您在您的系统上面实际的操作一次底下的步骤,我想,您应该马上会了解实际的操作流程的!(底下的步骤是可以复原的!!别担心,不过 mkswap 这个指令的下达要小心一点就是了!)  1. 使用 dd 这个指令来新增一个 64MB 的档案在 /tmp 底下:   [root@test /root]# dd if=/dev/zero of=/tmp/swap bs=4k count=16382 16382+0 records in 16382+0 records out dd 这个指令是用来转换档案并且 copy 用的; if 指的是要被转换的输入档案格式 /dev/zero 可以由 man zero 来查看内容; of 指的是输出的档案,我们将之输出到 /tmp/swap 这个档案; bs 指的是一个磁区占用几个 kb ; count 指的是要使用多少个 bs ,所以最后的容量为 bs*count = 4k * 16382 ~ 64MB  2. 如上所述,我们将建立一个档名为 /tmp/swap 的档案,且其内容共有 64MB 左右大小的档案;       3. 使用 mkswap 将 /tmp/swap 这个档案格式化为 swap 的档案格式:   [root@test /root]# mkswap /tmp/swap Setting up swapspace version 1, size = 67096576 bytes 请注意,这个指令在下达的时候请『特别小心』,因为下错字元控制,将可能使您的 filesystem 挂掉!  4.     5. 使用 swapon 来将 /tmp/swap 启动啰!   [root@test /root]# free       total    used    free   shared  buffers   cached Mem:     62524   60200    2324     0    716   19492 -/+ buffers/cache:   39992   22532 Swap:    127004    2620  124384 [root@test /root]# swapon /tmp/swap 不要怀疑!这样就已经将虚拟记忆体增加 64 MB 啰!如果您需要每次都启动该档案, 那幺将 swapon /tmp/swap 写入 /etc/rc.d/rc.local 当中即可! 用 free 这个指令查看一下您的系统啰! [root@test /root]# free       total    used    free   shared  buffers   cached Mem:     62524   60240    2284     0    724   19492 -/+ buffers/cache:   40024   22500 Swap:    192524    2620  189904  6.     7. 使用 swapoff 关掉 swap file   [root@test /root]# swapoff /tmp/swap 就直接给他关掉啰!  没错,就这幺简单的将虚拟记忆体给他新增啰!赶快来去试试看去!     磁碟效能:   我们都知道目前的 IDE 硬碟主要的传输模式为 ATA 模式,最近 (2002年)已经出到了 ATA 133 了!不过,传统上, ATA 66 就已经很厉害了!新的 IDE 硬碟也没有办法完全利用 ATA 100 呢!但是,你知道吗?有没有开启 ATA 这个传输通道的 DMA 模式,对于硬碟的存取效率差很大呦!好了!我们来测试一下磁碟的效能吧!   · hdparm   语法:   [root @test /root ]# hdparm [-cdmXTt] [装置名称] 参数说明: -c  :提供 32 位元的存取模式,支援的型态有:    -c0:关闭 32 位元存取模式    -c1:开启 32 位元存取模式    -c3:以较为特殊的 sync 模式开启 32 位元存取模式(建议值) -d  :是否启动硬碟的 DMA 模式, 0 为关闭, 1 为开启。 -m  :设定 multiple sector I/O 的模式,通常预设为 16 ,建议值亦为 16 。 -X  :设定 IDE/ATA 模式的项目,支援如下的设定:    -X34:开启 DMA mode 2    (ATA)    -X66:开启 ultra DMA mode 2 (ATA66) -T  :测试暂存区 cache 的存取效能 -t  :测试硬碟的实际存取效能 (较正确!) 例: [root @test /root]# hdparm -Tt /dev/hda  <==测试 hda 这颗硬碟的 cache 与实际效能 [root @test /root]# hdparm -d0 /dev/hda <==关闭 DMA 模式! [root @test /root]# hdparm -d1 -c3 -X66 /dev/hda <==开启 DMA 模式在 DMA 66 ,并且开启 32 位元存取模式  说明:   这个指令必须要 root 才能执行!此外,需要特别注意, -X 这个参数是很危险的参数设定,除非您非常了解您的硬碟架构,否则不建议自行设定,因为 manual page 上面就有说明到这一点~~不过,无论如何,目前大于 2GB 以上的硬碟至少都已经支援了 DMA 33 了!因此,使用 -X66 应该都是可行的!较常建议的硬碟 DMA 开启功能项目如下:   hdparm -d1 -X66 -m16 -c3 /dev/hda  另外,基本上目前的 Linux 预设都是开启 DMA 的模式,因此这个指令的功能相对的重要性就降低了!不过,有一点仍然相当的重要,就是 Linux 预设的 -c 是关闭的,亦即是 -c0 的状态,所以你可以增加上面的 -c3 来开启 32 位元的存取模式呦!当然了,如果你的硬碟真的是很老旧的,那幺就不要开启的好!好了!那幺如何开机就启动 DMA 模式呢?!你可以将上面那一段指令写入 /etc/rc.d/rc.local 里面即可!     附录一:第二延伸档案系统 ext2   这里转贴一篇关于 ext2 这个 Linux 档案格式的主要特点:      第二延伸档案系统(ext2)介绍 (本文摘自小红帽技术论坛)  自从我们开始使用电脑后,大多数的使用者都曾经使用过档案,而我们总是对关于硬碟如何正确地储存档案感到好奇,它看起来似乎非常抽象,所以今天让我们看一看 Linux 作业系统中较新的档案系统版本『第二延伸系统( ext2 )』,并了解它各方面之用途。   这个档案系统是主要来自于Andrew Tanenbaum 所写的Minix档案系统,它也是唯一可用在免费作业系统的档案系统,称之为Minix。它后来修正为 Linux 所惯用的档案系统并称为延伸档案系统,到现在 Linux 的档案系统称为 ext2 (第二延伸档案系统),它是延伸档案系统中较新的版本并支援存取控制列(ACL)。   但是在着手研究 ext2 档案系统之前,让我们先了解档案系统中之专有名词的关联。 · Block (区块):档案在磁碟中被储存在整数固定大小的区块中,那区块的大小通常是2的次方。在预设中,ext2档案系统的区块大小是4K。研究颢示,4K位元组对于一磁碟区块而言是最理想的大小,假如一个档案的大小无法达成4K位元组的倍数时,那最后的磁碟区块部分就会被浪费。在最不好的例子中几乎在完整的区块中就有一位元组被浪费掉。 对于这情况有一点技巧,假如我们选择了一个较大的区块,则对于小的档案而言会有一些磁碟空间被浪费掉。另外一方面,假如我们使用一个非常小的区块,则磁碟区块数量会成指数的增加,因此对于档案而言需有更多的搜寻时间。所以,选择区块大小必须三思而后行。 当一个档案被载入到记忆体时,那磁碟区块会被放在主记忆体中之缓冲快取区,假如它们已经变更了,区块在缓冲区中会被标记为’Dirty’,其意指的是这些区块必须先写到磁碟中来维持磁碟上的区块及在主记忆体中的区块之一致性. · Superblock:superblock是在每个档案系统开始的位置,其储存资讯像是档案系统的大小,空的和填满的区块,它们各自的总数和其他诸如此类的资料。要从一个档案系统中存取任何档案皆须经过档案系统中之superblock。如果superblock损坏了,它可能无法从磁碟中去取得资料。 · Inode: 对于档案系统而言一个inode是在inode表格中的一个项目。Inode包含了所有档案有关的资讯例如名称、大小、连接的数量、资料建立之日期,修改及存取的时间。它也包含了磁碟区块的档案指向(pointer)。pointer是用来记录档案被储存在何处。 Ext2fs公用程式 现在让我们来看看一些标准Linux版本之ext2fsprogs公用程式 · e2fsck 这个程式允许我们在ext2档案系统上去执行档案系统检查,它像是Windows中之Scandisk一样,但却是一种更有效的系统检查方式。在此,我们可以加上一个档案名称来检查上面之损坏区块。 警告:绝对不要在任何已挂载的档案系统上执行 e2fsck/fsck。假如我们想要去执行 fsck,我们应该卸下档案系统后再去执行 fsck(亦即需要 umount 该磁区啰)。如果不这样做,可能会让档案系统毁损。 · tune2fs 这允许我们去调整档案系统的参数设定。在此,我们可以设定在两个档案系统检查间之最大挂载总数、容量标记、错误行为、变更保留的资讯和许多其他参数。 · dumpe2fs 这个程式将ext2档案系统状态输出到标准的设备上。它对于分析问题以及存取一般关于档案系统用法的资讯是有帮助的。 · mke2fs 这个程式允许我们在先前尚未格式化的磁碟中,去建立一个ext2的档案系统。它提供了许多的选项包含区块的大小、段落的大小、每一个inode的位元组到多种磁碟阵列的选项。mke2fs通常在第一次安装的期间执行,并建立完成新的root 及其他的档案系统。(就相当于 DOS 底下的 format 程式啦!)· badblocks 这个程式去搜寻磁碟并检查区块是否已经损坏,它通常会在新的档案系统安装程式前执行,但请不要在挂载好的档案系统上执行。 在Linux档案系统中最新的版本被称为ext3,并已有 Journaling 之支援。Journaling 档案系统对于所有已完成的步骤,持有记录以及检查点,所以假使系统当机时,它可以从最后的检查点来还原档案系统。     附录二:为何选择 ext3 呢   在最新的 Red Hat 7.2 当中,已经舍弃了 ext2 而改用支援 Journaling 的 ext3 这一个档案格式了,那幺这两个咚咚有什幺不一样的呢?!底下有一篇翻译过的文章,看看吧!       Red Hat Linux 7.2 为何决定采用ext3档案系统? Red Hat决定在7.2版中使用ext3的格式来作为预设的档案系统在,引起相当多熟悉Linux使用者的关注,但ext3并不是唯一的,也不是众多日志式(journaling)档案系统中最佳的。 传统的Linux档案系统ext2,对于在相当小容量的硬碟上之小档案而言是相当的理想。随着硬碟的容量及档案大小大幅增加,整体性能会下滑。有些原因是来自读取未有效利用的磁碟空间,有些原因是来自不正常关机或是电源中断档案系统的恢复时间。档案系统经由e2fsck在一个1GB的硬碟做检查是毫不费力的,但相同的测试在40GB的硬碟上可能会相当的秏费时间。所以就有日志式档案系统的诞生。 这些记录硬碟状态的档案称为日志。所以在不正确关机之后重新启动需要参考到日志档案来重新回复档案系统的状态,而非将整个硬碟做扫描。同时,日志式档案系统可以有更高的硬碟空间使用效率及使资料在各种不同之档案大小中能够快速的读取及写入。 Linux并不是只有一个日志式的档案系统,它有四个,或是说成三又二分之一个:  · Reiser档案系统:依照Hans Reiser的名字而取。Reiser是众所皆知的一种新式快速记录硬碟内容的档案系统,它曾经被广泛的使用超过一年,且这个档案系统被推荐安装在SuSE7.1版及7.2版上。 · JFS档案系统:经由IBM所开发的,其设计的理念在于提供一高速的处理能力。IBM从2000年2月间开始经过一系列的测试版本,它的1.0版本已在六月底公开发表。 · XFS档案系统:XFS是SGI公司在Linux上所开发的日志式档案系统,它也提供了所有以完整发展为特色的日志式档案系统。 · ext3档案系统:ext3是之前所提及的二分之一日志式档案系统。为何只有一半呢?原因是ext3是一种迭在传统ext2档案系统上面并保有磁碟活动纪录的日志式档案系统。所以当不正确关机时,档案的恢复速度会比ext2档案系统来的快。但是,因为它是被结合在ext2中,它会遭受到一些老旧系统的限制并因此不能利用所有日志式档案系统的完整功能。这样并非是完全不好,因为ext3分割区并没有不同于ext2档案系统,因此如ext3损毁要回到ext2档案系统却是非常的简单。 Red Hat是第一个采用ext3的公司,它尝试性的将Linux档案系统推向日志式档案系统。当公司计画在7.2版的第二个测试版本采用ext3时,公司中首席核心开发者Michael K. Johnson便迅速的提供一个原理的阐述: “为什幺你想要从ext2转换到ext3呢?有四个主要的理由:可利用性、资料完整性、速度及易于转换”。可利用性,他指出,这意味着从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复。ext3的日志式条件可以避免资料毁损的可能。他也指出”除了写入若干资料超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬碟读取头的移动能更有效的进行“。然而或许决定的因素还是在Johnson先生的第四个理由中。“它是可以轻易的从ext2变更到ext3来获得一个强而有力的日志式档案系统而不需要重新做格式化”他说道。”那是正确的,为了体验一下ext3的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作”。     本章习题练习   · 如何增加一颗新的硬碟在你的 Linux 系统当中?请详述流程:   答:   1. 安装硬碟:关掉 Linux 主机电源,调整 Hard Disk 的 Jump (master 或 slave),串接在 IDE 的介面,请注意,留意你增加的硬碟所串接的 IDE 介面为哪一个插槽,例如你插在 IDE2 的 Master ,则你的硬碟应为 hdc;此外,需要特别留意的是,目前的机器中,如果是 ATA 66 以上的排线(那种很密的排线),那幺 master 或者是 slave 在排线上的顺序是固定的!底端的是 Mater 而中间的是 Slave ,这点请稍微注意呦!       2. B新增硬体于BIOS:开启电脑后,按 del 键进入 BIOS,选择 IDE Hard Disk Detector 字样的选项,让BIOS去捉硬碟,然后再选择 Save and Exit;不过,较新的机器通常都可以自动侦测了!但是,如果你的机器是旧型的,那幺还是手动来增加硬碟吧!       3. Linux 系统侦测:如果你的 Linux 系统有启动 kudzu 这个服务时,那幺开机就会自动去侦测新的硬体装置! Red Hat 预设是有开启这项服务的,除非你关掉他了!OK,假设你有开启这项服务,那幺开机进入 Linux 的时候,系统会告诉你有捉到一个新的硬体,你可以按 『configure』由系统直接安装即可;       4. 格式化硬碟:以 root 的身份进入 Linux 后,执行以下两个程式:   § fdisk /dev/hdc <== hdc 与你的硬碟串接的IDE介面有关,关于这个指令的介绍请参考上面的指令说明;   § mke2fs /dev/hdc1 <==假设硬碟全部配置成一个大硬碟,则硬碟应为 hdc1 ,以 mke2fs 将系统规划为 Linux 的系统档。       5. 建立 mount point:假设我的这颗硬碟要挂在 /disk3 下面,那幺就需要 :   mkdir /disk3      6. 开机自动载入( mount ):再来则是以 vi 修改 /etc/fstab 档案,让每次开机把这个硬碟直接挂入系统中。例如 hdc1 这颗硬碟挂在 /disk1 中,则 fstab 的档案有点像底下这样:(/dev/hdc1 那一行是新加入的!),修改完之后,直接以 mount -a 来挂载吧!       /dev/hda1     /      ext2      defaults    1 1   /dev/hda5     swap    swap      defaults    0 0   /dev/hdc1     /disk1   ext2      defaults    1 1      7. 安装完成:你可以使用 mount -a 来将全部的装置重新挂载一遍,或者是重新开机就可以啦!   · 如何增加某一目录的容量:常常会听到的一个问题是,我原先规划的硬碟方式有点容量不足了,要如何增加容量呢?!这最容易发生在 /var/spool/mail 及 /home 底下了!好了,这里我们以 /home 的容量不足了来进行说明!   答:   o 假设条件:我原先规划的 /home 只有 1GB ,但是目前的使用者日众,所以容量不足!我想要增加一棵 8GB 的旧硬碟,要如何作?!   o 将硬碟加入 Linux 系统中:利用刚刚上面的方式将你的硬碟加入到 Linux 系统中,亦即是使用 fdisk 与 mke2fs 建立了 ext2 的档案格式的硬碟!好了,同样假设该硬碟的代号为 /dev/hdc1 好了! 挂载新硬碟:由于我需要将新旧磁区都挂上来,这样才有办法将资料由旧硬碟移到新硬碟上面,OK!我就建立一个暂存的目录,称为 /disk-tmp:   mkdir /disk-tmp   mount -t ext2 /dev/hdc1 /disk-tmp   如此一来则 /disk-tmp 就是新挂上来那颗 8 GB 的硬碟啦!  o 移动资料:好了!现在开始将资料 copy 到新挂上的硬碟上面吧!   cd /home   tar -zcvf /disk-tmp/home.tar.gz *   cd /disk-tmp   tar -zxvf home.tar.gz  上面的指令会将目前旧有的 /home 底下的东西完全的压缩之后移动到 /disk-tmp/home.tar.gz 这个压缩档,然后再到 /disk-tmp 底下将他解压缩!这样资料就复制到新挂上来的硬碟啦!   o 卸载旧的,挂上新的:好了,那幺我们就开始来测试一下吧!你可以这样做:   umount /home   mount -t ext2 /dev/hdc1 /home  注意呦!如果你的 /home 底下原本就没有挂载磁区的话,那幺你就可以直接将 /home 底下的资料都砍掉,然后在挂上新的那颗硬碟就好了!而 home.tar.gz 这个档案就可以用作为备份之用!  o 开机执行:同样的,如果要设定成开机就挂上这颗新的硬碟,那就修改 /etc/fstab 档案吧!   · 如何制作开机磁片:   答:   无论何种系统,有个开机片总是比较安心的! Linux 也是一样!虽然他很稳定,但是并不是说就不会有问题,因此制作可开机磁片以利解救 Linux 问题是一个好习惯!制作开机片的方法很简单,请参考 mkbootdisk 的指令!  · 请问底下的目录与主要放置什幺资料?   答:   o /etc/:几乎系统的所有设定档案均在此,尤其 passwd, shadow   o /etc/rc.d/init.d:系统开机的时候载入服务的 scripts 的摆放地点   o /boot:开机设定档,也是预设摆放核心 vmlinuz 的地方   o /usr/bin, /bin:一般执行档摆放的地方   o /usr/sbin, /sbin:系统管理员常用指令集   o /dev:摆放所有系统装置档案的目录   o /var/log:摆放系统登录档案的地方   · 『旧的』 Unix 系统与 Linux 系统的『档名』最多可以容许几个字元?   答:   14, 255  · 什幺是绝对路径与相对路径,要由 /usr/share/doc 进入到 /usr/share/man 由相对路径与绝对路径的写法各为何?   答:   o 绝对路径绝对由 / 开始写起,相对路径则非由 / 写起;   o cd /usr/share/man ; cd ../man   · 在非为根目录的任何一个目录中,下达 ls –al 时,均会有『.』及『..』这两个目录,请问分别代表什幺?   答:   o . :代表本目录   o .. :代表上层目录   · 显示、变换目录的时候,使用什幺指令?   答:   ls, pwd 为显示; 变换目录用 cd  · 新增目录、移除目录移动目录与拷贝目录有什幺指令可用?   答:   o 新增: mkdir 目录,   o 移除: rmdir 目录(但是该目录内必须要已经清空了), rm –rf 目录,   o 移动: mv Directory1 directory2   o 拷贝: cp –r directory1 directory2   · 如何查看一个档案的『内容』(不要使用 vi 的情况下)   答:   cat, tac, more, less, head, tail, nl, od(查看二进位制)  · 什幺是 hard link 与 Symbolic link 的档案?有何不同?   答:   o Hard Links:在做成 hard link 档案时,系统会占用掉一个 inode ,由连结档案可发现其 link 栏位多使用了一个 inode ,当原始档案被删除的时候,该原始档案的内容将继续保留在其他的 Hard Links 档案中;但所有 Link 占用的硬碟总量仅占一个档案的容量大小!(但 Hard link 不能连结不同 filesystem 的档案)   o Symbolic Links:类似捷径,当原始档被删除,soft link 档案将找不到原始档了!   · 如何在 root 的家目录下建立一个 /bin 的连结捷径   答:   ln –s /bin /root/bin  · 若有一个连结档为 testing 连结到 test1.sh ,请问 copy testing 到 /tmp 底下,『cp testing /tmp』则 /tmp/testing 这个档案会是:(1) 连结档,连结到 test1.sh ;(2) 一般档案,为内容与 test1.sh 相同?   答:   答案为 (2)  · 当一个档案属性为 –rwxrwxrwt 则表示这个档案的意义为?   答:   任何人皆可读取、可写入,但是不可删除该档案(或目录),除了 root 与档案或目录拥有者有权可以删除。  · 我需要将一个档案的属性改为 –rwxr-xr-- 请问该如何下达指令?   答:   chmod 754 filename, chmod u=rwx,g=rx,o=r filename  · 在 /usr/bin/passwd 这个档案的属性为 –r-s--x--x 请问代表什幺意思(s)   答:   那个 s 代表为 SUID ,当使用者使用这个档案进行工作的时候,将会具有该档案拥有者的权限!  · 如何改出 –rwxr-sr-x 与 –rwxr-xr-t这个属性?   答:   chmod 2755 filename, chmod 1755 filename  · 如何查看一个档案的类型 (type) 例如纯文字档、执行档与 setuid 档案等?   答:   file filename  · 若一个使用者的 umask 为 033 ,请问他建立一个新的目录与档案时的预设属性为?   答:   o 目录:744 ? -rwx-r--r--   o 档案:633 ? -rw--wx-wx   · 若我需要更改一个档案的拥有者与群组,该用什幺指令?   答:   chown, chgrp  · 如何将一个档案的修改日期改成目前的时间?   答:   toUCh filename  · 如何搜寻一个档案?   答:   which (仅用于指令搜寻), whereis, locate, fine  · Linux 预设的档案系统为何?此外,常用的 Journalling 档案格式有哪些?   答:   Ext2, Journalling 有 ext3 及 Reiserfs 等  · less 跟 more 有什幺不同?   答:   less 可以翻页,但是 more 不行!  · 在比较两个档案的异同时,常使用的是 diff 与 cmp ,请教两者有何不同?   答:   diff 为一行一行比较, cmp 为一个字元(character)一个字元比较  · 我要如何查看 Linux 系统当中所有已经挂载的硬碟容量与 inodes ?   答:   df –k, df –i,  · 我要如何查看目前所在目录的所有档案占用的硬碟空间,此外,如何仅输出结果?   答:   du -k, du –i, du -s  · 如果磁区 /dev/hda3 有问题,偏偏他是被挂载上的,请问我要如何修理此一磁区?   答:   umount /dev/hda3   fsck /dev/hda3  · 承上题,那幺有问题的档案将被移动到那个目录下?   答:   lost+found  · 试说明新增一个 partition 在 /dev/hdb 当中,且为 hdb5时,并挂载上 /disk2 ,需要哪些步骤?   答:   o fdisk /dev/hdb  按 n 新增,按 e 新增 extended ,再按 n 新增 logical   o mke2fs –b 2048 /dev/hdb5   o mkdir /disk2   o mount –t ext2 /dev/hdb5 /disk2   · 如何新增加 64MB 的虚拟记忆体 swap ?   答:   o dd if=/dev/zero of=/tmp/swap bs=4k count=16384   o mkswap /tmp/swap   o swapon /tmp/swap     


[1] [2] 下一页 

 

(出处:http://www.sheup.com)


上一页 [1] [2]