1 Ext2文件系统的理解
1.1. 三个重要数据及意义
1) superblock:记录此 filesystem 的不整体信息,包括inode/block 的总量、使用量、剩余量,以及文件系统的格式不相关信息等;
2) inode:记彔文档的属性,一个文档占用一个inode,同时记录此文档的数据所在的 block 号码;
3) block:实际记录档案的内容,若档案太大时,会占用多个 block 。
1.2. block的基本限制
1) 原则上,block 的大小不数量在格式化完就不能够再改发了(除非重新格式化);
2) 每个 block 内最多只能够放置一个文档的数据;
3) 承上,如果文档大于 block 的大小,则一个文档会占用多个 block 数量;
4) 承上,若文档小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。
1.3. Inode的特点:
1) 每个 inode 大小均固定为 128 bytes;
2) 每个文档都仅会占用一个 inode 而已;
3) 承上,因此文件系统能够建立的文档数量与 inode 的数量有关;
4) 系统读取文档时需要先找到 inode,再分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。
5) inode记录 block 号码的区域定义为12个直接,一个间接, 一个双间接与一个三间接记录区:
拿block大小为1k来说明:
12 个直接指向: 12*1K=12K
由于是直接指向,所以总共可记彔 12 笔记录,因此总额大小为如上所示;
间接: 256*1K=256K
每笔 block 号码的记录会花去 4bytes,因此 1K 的大小能够记录 256 笔记记录,因此一个间接可以记录的文档大小如上;
双间接: 256*256*1K
第一层 block 会挃定 256 个第二层,每个第二层可以挃定 256 个号码,因此总额大小如上;
三间接: 256*256*256*1K
第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个第三层,每个第三层可以指定256 个号码,因此总额大小如上;
总额:将直接、间接、双间接、三间接加总,得到 12+ 256 + 256*256 + 256*256*256 (K) = 16GB
1.4. Superblock介绍:
Superblock 是记录整个filesystem 相关信息的地方, 没有 Superblock,就没有这个 filesystem 了。他记录的信息主要有:
block 与 inode 的总量;
未使用与已使用的 inode /block 数量;
block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
filesystem 癿挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1。
1.5. block bitmap (区块对照表):
是记录block使用情况的一个对照表,从block bitmap 当中可以知道哪些 block 是空的,因此我们癿系统就能够很讯速的找到可使用的空间来处置文档。
同样的,如果你删除某些文档时,那么那些文本原本占用的 block 号码就得要释放出来,此时在 block bitmpap 当中相对应到该 block 号码的标志就得要修改成为『未使用中』。
1.6. inode bitmap (inode 对照表):
这个其实与 block bitmap 是类似的功能,只是block bitmap 记录的是使用与未使用的 block 号码,至于 inode bitmap 则是记录使用与未使用的 inode 号码
1.7. dumpe2fs指令介绍:
在Linux使用过程中,我们如果要了解文件系统的配置情况,可以使用dumpe2fs查看ext2/ext3/ext4格式的文件系统信息。
命令格式: dumpe2fs [选项] 设备
常用选项: -h 仅列出超级块中的信息,而不显示磁盘块组的详细信息。对于基本的文件系统维护工作来说,了解超级块中的信息已经足够。
实例:
# dumpe2fs -h/dev/sda3
dumpe2fs 1.40-WIP(14-Nov-2006)
Filesystem volumename: <none>
FilesystemUUID: 6f99e051-8a52-48d1-94c1-988871494240
Filesystemstate: clean
Errors behavior: Continue
Inode count: 997472
Block count: 1992060
Last mounttime: Sun Jun 19 14:30:05 2011
Mount count: 30
Maximum mountcount: 30
Last checked: Tue Jun 7 15:49:10 2011
Checkinterval: 0 (<none>)
Journal size: 128M
上面列出了部分重要的输出信息,例如,文件系统的UUID, 文件系统遇到错误的默认处理方式为Continue, 最大的支持的节点数量为997472(意味着此文件系统最多只能存储997472个文件),文件系统加载30次就要进行磁盘检测,最后的磁盘检测时间,没有设置磁盘检测的最小间隔时间(Check interval),以及日志大小等信息。
dumpe2fs命令可以安全的使用于已经加载的文件系统,不会对文件系统造成任何危害。
2 文件系统的简单操作
2.1 df/du指令
1)df
功能说明:显示磁盘的相关信息。
语法:df[-ahHiklmPT][--block-size=<区块大小>][-t <文件系统类型>][-x <文件系统类型>][--help][--no-sync][--sync][--version][文件或设备]
补充说明:df可显示磁盘的文件系统与使用情形。
参数:
-a或--all 包含全部的文件系统。
--block-size=<区块大小> 以指定的区块大小来显示区块数目。
-h或--human-readable 以可读性较高的方式来显示信息。
-H或--si 与-h参数相同,但在计算时是以1000Bytes为换算单位而非1024 Bytes。
-i或--inodes 显示inode的信息。
-k或--kilobytes 指定区块大小为1024字节。
-l或--local 仅显示本地端的文件系统。
-m或--megabytes 指定区块大小为1048576字节。
--no-sync 在取得磁盘使用信息前,不要执行sync指令,此为预设值。
-P或--portability 使用POSIX的输出格式。
--sync 在取得磁盘使用信息前,先执行sync指令。
-t<文件系统类型>或--type=<文件系统类型> 仅显示指定文件系统类型的磁盘信息。
-T或--print-type 显示文件系统的类型。
-x<文件系统类型>或--exclude-type=<文件系统类型> 不要显示指定文件系统类型的磁盘信息。
--help 显示帮助。
--version 显示版本信息。
例1:列出各文件系统的磁盘空间使用情况。
$ df
Filesystem 1 K-blocks UsedAvailable Use% Mounted on
/dev/hda2 13615871246406 44823 97% /
df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列给出分区包含的数据块(1024字节)的数目;第3,4列分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use% 列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的安装点。
例2:列出各文件系统的i节点使用情况。
$ df -ia
Filesystem InodesIUsed IFree Iused% Mounted on
/dev/ hda2 35225675043 277213 21% /
none 0 0 0 0% /proc
localhost:(pid221) 0 0 0 0% /net
例3:列出文件系统的类型。
$ df -T
Filesystem Type 1K-blocks UsedAvailable use% Mounted on
/dev/hda2 ext21361587 1246405 44824 97% /
本例中的文件系统是ext2类型的。
2)du
功能说明:显示目录或文件的大小。
语法:du[-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]
补充说明:du会显示指定的目录或文件所占用的磁盘空间。
参数:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version 显示版本信息。
用法实例:
1> 要显示一个目录树及其每个子树的磁盘使用情况
du /home/linux
这在/home/linux目录及其每个子目录中显示了磁盘块数。
2> 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
du -k /home/linux
这在/home/linux目录及其每个子目录中显示了1024 字节磁盘块数。
3> 以MB为单位显示一个目录树及其每个子树的磁盘使用情况
du -m /home/linux
这在/home/linux目录及其每个子目录中显示了MB 磁盘块数。
4> 以GB为单位显示一个目录树及其每个子树的磁盘使用情况
du -g /home/linux
这在/home/linux目录及其每个子目录中显示了GB 磁盘块数。
5>查看当前目录下所有目录以及子目录的大小:
du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的容易让人理解的单位显示
6>查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
du -sh user
-s表示总结的意思,即只列出一个总结的值
du -h –max-depth=0user
–max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。
7>列出user目录及其子目录下所有目录和文件的大小:
du -ah user
-a表示包括目录和文件
8>列出当前目录中的目录名不包括xyz字符串的目录的大小:
du -h–exclude=’*xyz*’
9>想在一个屏幕下列出更多的关于user目录及子目录大小的信息:
du -0h user
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。
10>只显示一个目录树的全部磁盘使用情况
du -s /home/linux
2.2 ln指令
使用方式 : ln [options]source dist,其中 option 的格式为 :
[-bdfinsvF] [-Sbackup-suffix] [-V {numbered,existing,simple}]
[--help][--version] [--]
说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。
ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
参数 :
-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本
范例 :
将档案 yy 产生一个 symboliclink : zz
ln -s yy zz
将档案 yy 产生一个 hardlink : zz
ln yy xx
3 磁盘的分割、格式化、挂载
3.1 磁盘分区命令:fdisk
一、fdisk 的介绍;
fdisk - Partition table manipulator forLinux ,译成中文的意思是磁盘分区表操作工具;本人译的不太好,也没有看中文文档;其实就是分区工具;
fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux 、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等;当然我们用fdisk 对磁盘操作分区时,并不是一个终点,我们还要对分区进行格式化所需要的文件系统;这样一个分区才能使用;这和DOS中的fdisk 是类似的;
笔记:先对一块物理硬盘做一个逻辑分区使用fdisk工具。然后对逻辑分区进行分配相应的文件系统。这样的分区才可以使用的。咦那我通过使用df命令之后怎么判断它的文件系统是什么/.
二、合理规划您的硬盘分区;
在操作分区之前,我们要明白硬盘分区一点理论,比如硬盘容量和分区大小的计算;对一个硬盘如何规划分区等,请参考如下文档,谢谢;
《合理规划您的硬盘分区》------- 深有感触呀!
三、fdisk -l 查看硬盘及分区信息;
通过《合理规划您的硬盘分区》,我们知道主分区(包括扩展分区)的总个数不能超过四个;也不能把扩展分区包围在主分区之间;根据这个原则,我们划分硬盘分区就比较容易的多;也能为以后减少不必要的麻烦;
1、通过fdisk -l 查看机器所挂硬盘个数及分区情况;
[root@localhost beinan]# fdisk -l
以下是表示第一块硬盘 hda
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS 主分区
/dev/hda2 766 2805 16386300 c W95 FAT32(LBA) 主分区
/dev/hda3 2806 9729 55617030 5Extended 扩展分区
/dev/hda5 2806 3825 8193118+ 83 Linux 逻辑分区
/dev/hda6 3826 5100 10241406 83 Linux 逻辑分区
/dev/hda7 5101 5198 787153+ 82 Linux swap /Solaris 逻辑分区
/dev/hda8 5199 6657 11719386 83 Linux 逻辑分区
/dev/hda9 6658 7751 8787523+ 83 Linux 逻辑分区
/dev/hda10 7752 9729 15888253+ 83Linux 逻辑分区
以下是表示第二块硬盘sda
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32(LBA) 主分区
/dev/sda2 26 125 806400 5 Extended 扩展分区
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
通过上面的信息,我们知道此机器中挂载两个硬盘(或移动硬盘),其中一个是hda 另一个是sda ;如果我们想查看单个硬盘情况,可以通过 fdisk -l /dev/hda1 或者fdisk -l /dev/sda1 来操作;以fdisk -l 输出的硬盘标识为准;
其中 hda有三个主分区(包括扩展分区),分别是主分区 hda1 hda2 和hda3(扩展分区);逻辑分区是 hda5到hda10;
其中 sda 有两个主分区(包括扩展分区),分别是 hda1 和hda2 (扩展分区);逻辑分区是 sda5 hda6 ;
硬盘总容量=主分区(包括扩展分区)总容量
扩展分区容量=逻辑分区总容量
通过上面的例子,我们可以得知 hda=hda1+hda2+hda3,其中hda3=hda5+hda6+hda7+hda8+hda9+hda10 …… ……
逻辑分区的作用是什么呢?
2、关于fdisk -l 一些数值的说明;
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为);分区序列 引导 开始 终止 容量 分区类型ID 分区类型
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32(LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap /Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
说明:
硬盘分区的表示:在Linux 是通过hd*x 或 sd*x 表示的,其中 * 表示的是a、b、c ………… x表示的数字 1、2、3 ………… hd大多是IDE硬盘;sd大多是SCSI或移动存储;
引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区;
Start (开始):表示的一个分区从Xcylinder(磁柱)开始;
End (结束):表示一个分区到 Ycylinder(磁柱)结束;
id和System 表示的是一个意思,id看起来不太直观,我们要在fdisk一个分区时,通过指定id来确认分区类型;比如 7表示的就NTFS 分区;这个在fdisk 中要通过t功能来指定。下面的部份会提到;
Blocks(容量):这是我翻译的,其实不准确,表示的意思的确是容量的意思,其单位是K;一个分区容量的值是由下面的公式而来的;
Blocks = (相应分区End数值 - 相应分区Start数值)x 单位cylinder(磁柱)的容量
所以我们算一下 hda1的 Blocks 的大小:
hda1 Blocks=(765-1)x8225.280=6284113.92K = 6284.113.92M
注:换算单位以硬盘厂家提供的10进位算起,如果以操作系统二进制来算,这个分区容量应该更少一些,得出的这个值和我们通过 fdisk -l 看到的 /dev/hda1的值是大体相当的,因为换算方法不一样,所以也不可能尽可能的精确;再加上分区时的一点损失之类,有时或大或小是存在的;
我们查看分区大小或者文件的时候,还是用十进制来计算比较直观;推算办法是 byte 向前推小数点三位就是K ,K单位的值向前推小数点三位就是M,M向前推小数点三位就是G………… 一般也差不了多少;这么算就行;
3、估算一个存储设备是否被完全划分;
我们估算一个硬盘是否完全被划分,我们只要看 fdisk -l 输出的内容中的 cylinders(柱体)上一个分区的End 和下一个分区的Start是不是一个连续的数字,另外要看一下每个硬盘设备的fdisk -l 的开头部份,看一下他的 cylinders(柱体)的值;
比如hda设备,我们看到的是 9729 cylinders ;我们通过 hda的分区表可以看到上一个分区的End的值+1 就是下一个分区的Start 的值;比如 hda2的Start的值是 hda1 的End 的值+1,这证明 hda1 和hda2 中间没有空白分区,是连续的,以此类推;在 hda10,我们看到 End 的值是9729 ,而在fdisk -l头部信息中也有9729 cylinders,证明这个硬盘已经完全划分;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
我们再看看 sda 移动储是不是被完全划分了;sda有 125个cylinders (柱体),有一个主分区和一个扩展分区构成;在扩展分区中,我们看到End的值为125,而这个移动硬盘的cylinder也是125,这能说明这个硬盘不可能再添加任何主分区了;根据我们上面所说的 sda1 sda2 sda5 sda6 之间未有任何未划分空间,但sda6 的cylinders (柱体)的End值却是 76 ,而 sda总的cylinders (柱体)有125个,由此看来sda 在 sda6后面有未划分区域;
至于sda 有多少未划分空间,我们算一下就知道了;扩展分区总容量是 806400 K ,大约是 806.400M左右,而逻辑分区 sda5 和sda6 的大小加起来是 400M左右,所以还仍有400M左右未划分空间,并且只能划分为链逻辑分区;
四、fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段;
我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了;通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是/dev/hda ,另一个是/dev/sda ;
fdisk 操作硬盘的命令格式如下:
[root@localhost beinan]# fdisk 设备
比如我们通过 fdisk -l 得知 /dev/hda 或者 /dev/sda设备;我们如果想再添加或者删除一些分区,可以用
[root@localhost beinan]# fdisk /dev/hda
或
[root@localhost beinan]# fdisk /dev/sda
注在以后的例子中,我们要以 /dev/sda设备为例,来讲解如何用fdisk 来操作添加、删除分区等动作;
1、fdisk 的说明;
当我们通过 fdisk 设备,进入相应设备的操作时,会发现有如下的提示;以 fdisk /dev/sda 设备为例,以下同;
[root@localhost beinan]# fdisk /dev/sda
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 注:l是列出分区类型,以供我们设置相应分区的类型;
m print this menu 注:m 是列出帮助信息;
n add a new partition 注:添加一个分区;
o create a new empty DOS partition table
p print the partition table 注:p列出分区表;
q quit without saving changes 注:不保存退出;
s create a new empty Sun disklabel
t change a partition's system id 注:t 改变分区类型;
u change display/entry units
v verify the partition table
w write table to disk and exit 注:把分区表写入硬盘并退出;
x extra functionality (experts only) 注:扩展应用,专家功能;
其实我们常用的只有注有中文的,其它的功能我们不常用(呵,主要是我不会用,否则早会卖弄一下了);x扩展功能,也不是常用的;一般的情况下只要懂得 d l m p q t w 就行了;
下面以实例操作来详述,没有例子没有办法就,新手也看不懂;
2、列出当前操作硬盘的分区情况,用p;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
3、通过fdisk的d指令来删除一个分区;
Command (m for help): p 注:列出分区情况;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
Command (m for help): d 注:执行删除分区指定;
Partition number (1-6): 6 注:我想删除 sda6 ,就在这里输入 6 ;
Command (m for help): p 注:再查看一下硬盘分区情况,看是否删除了?
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
Command (m for help):
警告:删除分区时要小心,请看好分区的序号,如果您删除了扩展分区,扩展分区之下的逻辑分区都会删除;所以操作时一定要小心;如果知道自己操作错了,请不要惊慌,用q不保存退出;切记切记!!!!在分区操作错了之时,千万不要输入w保存退出!!!
4、通过fdisk的n指令增加一个分区;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
Command (m for help): n 注:增加一个分区;
Command action
l logical (5 or over) 注:增加逻辑分区,分区编号要大于5;为什么要大于5,因为已经有sda5了;
p primary partition (1-4) 注:增加一个主分区;编号从1-4 ;但sda1 和sda2都被占用,所以只能从3开始;
p
Partition number (1-4): 3
No free sectors available 注:失败中,为什么失败?
注:我试图增加一个主分区,看来是失败了,为什么失败?因为我们看到主分区+扩展分区把整个磁盘都用光了,看扩展分区的End的值,再看一下 p输出信息中有125 cylinders;最好还是看前面部份;那里有提到;
所以我们只能增加逻辑分区了;
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l 注:在这里输入l,就进入划分逻辑分区阶段了;
First cylinder (51-125, default 51): 注:这个就是分区的Start值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK(51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;
Command (m for help):
5、通过fdisk的t指令指定分区类型;
Command (m for help): t 注:通过t来指定分区类型;
Partition number (1-6): 6 注:要改变哪个分区类型呢?我指定了6,其实也就是sda6
Hex code (type L to list codes):L 注:在这里输入L,就可以查看分区类型的id了;
Hex code (type L to list codes): b 注:如果我想让这个分区是W95 FAT32 类型的,通过L查看得知 b是表示的是,所以输入了b;
Changed system type of partition 6 to b(W95 FAT32) 注:系统信息,改变成功;是否是改变了,请用p查看;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 75 201568+ b W95 FAT32
6、fdisk 的退出,用q或者 w;
其中 q是不保存退出,w是保存退出;
Command (m for help): w
或
Command (m for help): q
7、一个添加分区的例子;
本例中我们会添加两个200M的主分区,其它为扩展分区,在扩展分区中我们添加两个200M大小的逻辑分区;
Command (m for help): p 注:列出分区表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
Command (m for help): n 注:添加分区;
Command action
e extended
p primary partition (1-4)
p 注:添加主分区;
Partition number (1-4): 1 注:添加主分区1;
First cylinder (1-125, default 1): 注:直接回车,主分区1的起始位置;默认为1,默认就好;Usingdefault value 1
Last cylinder or +size or +sizeM or +sizeK(1-125, default 125): +200M 注:指定分区大小,用+200M来指定大小为200M
Command (m for help): n 注:添加新分区;
Command action
e extended
p primary partition (1-4)
p 注:添加主分区
Partition number (1-4): 2 注:添加主分区2;
First cylinder (26-125, default 26):
Using default value 26
Last cylinder or +size or +sizeM or +sizeK(26-125, default 125): +200M 注:指定分区大小,用+200M来指定大小为200M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e 注:添加扩展分区;
Partition number (1-4): 3 注:指定为3 ,因为主分区已经分了两个了,这个也算主分区,从3开始;
First cylinder (51-125, default 51): 注:直接回车;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK(51-125, default 125): 注:直接回车,把其余的所有空间都给扩展分区;
Using default value 125
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 50 201600 83 Linux
/dev/sda3 51 125 604800 5 Extended
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l 注:添加逻辑分区;
First cylinder (51-125, default 51):
Using default value 51
Last cylinder or +size or +sizeM or +sizeK(51-125, default 125): +200M 注:添加一个大小为200M大小的分区;
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l 注:添加一个逻辑分区;
First cylinder (76-125, default 76):
Using default value 76
Last cylinder or +size or +sizeM or +sizeK(76-125, default 125): +200M 注:添加一个大小为200M大小的分区;
Command (m for help): p 列出分区表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 50 201600 83 Linux
/dev/sda3 51 125 604800 5 Extended
/dev/sda5 51 75 201568+ 83 Linux
/dev/sda6 76 100 201568+ 83 Linux
然后我们根据前面所说通过t指令来改变分区类型;
最后不要忘记w保存退出;
五、对分区进行格式化,以及加载;
先提示一下;用 mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfatmkfs.cramfsmkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令来格式化分区,比如我想格式化sda6为ext3文件系统,则输入;
[root@localhost beinan]# mkfs.ext3/dev/sda6
如果我想加载 sda6到目前系统来存取文件,应该有mount 命令,但首先您得建一个挂载目录;比如 /mnt/sda6 ;
[root@localhost beinan]# mkdir /mnt/sda6
[root@localhost beinan]# mount /dev/sda6/mnt/sda6
[root@localhost beinan]# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 8.4G 2.0G 81% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda10 16G 6.9G 8.3G 46% /mnt/hda10
/dev/sda6 191M 5.6M 176M 4% /mnt/sda6
这样我们就能进入 /mnt/sda6目录,然后存取文件了;
具体的权限方法,以及mount 更详细的用法,在以后我会专门写一个帖子;在一帖中放下所有的内容实在有点为难;
3.2 硬盘格式化:mkfs
使用权限 : 超级使用者
使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable]
说明: 建立 linux 档案系统在特定的partition 上
参数:
device : 预备检查的硬盘 partition,例如:/dev/sda1
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该partition是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到bad_blocks_file 里面
block : 给定 block 的大小
-L:建立lable
补充说明:
mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。例如,若在"-t" 参数中指定ext2,则
mkfs会调用mke2fs来建立文件系统.使用时如省略指定【块数】参数,mkfs会自动设置 适当的块数.
例子 :
在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来 :
mkfs -V -t msdos -c /dev/hda5
mfks -t ext3 /dev/sda6 //将sda6分区格式化为ext3格式
mkfs -t ext2 /dev/sda7 //将sda7分区格式化为ext2格式
扩展知识:mkfs的使用示例
[root@localhost beinan]# mkfs -t 文件系统 存储设备
注:
这里的文件系统是要指定的,比如 ext3 ;reiserfs ;ext2 ;fat32 ;msdos 等... ...
设备比如是一个硬盘的分区,软盘,光驱等.. ... 在格式化分区之前,您得懂得如何查看硬盘分区情况,并有针对性的格式化;比如用 fdisk -l 来查看;请参考:《Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍》比如我想格式化一个移动U盘中的一个分区;全景应该是:
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
我们可以看到有sda这个设备,所以可以用 fdisk -l /dev/sda专门来显示他的分区情况;比如我想格式化 /dev/sda6 分区为 ext3文件系统,则为:
[root@localhost beinan]# mkfs -t ext3 /dev/sda6
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
50200 inodes, 200780 blocks
10039 blocks (5.00%) reserved for the superuser
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments pergroup
2008 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystemaccounting information: 注:在这里直接回车;
done
This filesystem will be automaticallychecked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
这样就格式化好了,sda6现在就是ext3文件系统了;我们就可以用mount 加载这个分区,然后使用这个文件系统;
[root@localhost beinan]# mkdir /mnt/sda6
[root@localhost beinan]# chmod 777/mnt/sda6
[root@localhost beinan]# mount /dev/sda6 /mnt/sda6
当然您也可以把分区格式化成其它的文件系统;比如我们把 /dev/sda6格式化为ext3 、ext2、reiserfs、fat32、msdos 文件系统,命令格式如下;
[root@localhost beinan]# mkfs -t ext3 /dev/sda6
[root@localhost beinan]# mkfs -t ext2 /dev/sda6
[root@localhost beinan]# mkfs -treiserfs /dev/sda6
[root@localhost beinan]# mkfs -t fat32 /dev/sda6
[root@localhost beinan]# mkfs -t msdos /dev/sda6
... ...
2)mkfs.ext3mkfs.reiserfs mkfs.ext2 mkfs.msdos mkfs.vfat mke2fs 的介绍;
我们先说了一个mkfs 工具后,我们再来介绍 mkfs.ext3 mkfs.reiserfs mkfs.ext2 mkdosfs mkfs.msdos mkfs.vfat ,其实mkfs 在执行的命令的时候,也是调用的这个工具,这也是我先把mkfs介绍的主要原因;通过文件名,我们就知道这些工具是支持什么文件系统;这些命令为我们提供了更多的方便;
[root@localhost beinan]# mkfs.ext3 /dev/sda6 注:把该设备格式化成ext3文件系统
[root@localhost beinan]# mke2fs -j /dev/sda6 注:把该设备格式化成ext3文件系统
[root@localhost beinan]# mkfs.ext2 /dev/sda6 注:把该设备格式化成ext2文件系统
root@localhost beinan]# mke2fs /dev/sda6 注:把该设备格式化成ext2文件系统
[root@localhost beinan]# mkfs.reiserfs /dev/sda6 注:把该设备格式化成reiserfs文件系统
[root@localhost beinan]# mkfs.vfat /dev/sda6 注:把该设备格式化成fat32文件系统
[root@localhost beinan]# mkfs.msdos /dev/sda6 注:把该设备格式化成fat16文件系统,msdos文件系统就是fat16;
[root@localhost beinan]# mkdosfs /dev/sda6 注:把该设备格式化成fat16文件系统,同mkfs.msdos
... ...
2)mkswap 把一个分区格式化成为swap交换区;
[root@localhost beinan]# mkswap/dev/sda6 注:创建此分区为swap 交换分区
[root@localhost beinan]# swapon /dev/sda6 注:加载交换分区;
[root@localhost beinan]# swapoff /dev/sda6 注:关闭交换分区;
我们查看系统已经加载的swap交换分区;
[root@localhost beinan]# swapon /dev/sda6 注:加载交换分区;
[root@localhost beinan]# swapon -s
Filename Type Size Used Priority
/dev/hda7 partition 787144 0 -1
/dev/sda6 partition 225144 0 -3
<code>
为什么我的系统有两个交换分区?因为我用移动U盘做的实验,主要是为写教程之用;sda6是我在U盘上建的swap分区;
如果让swap开机就加载,应该改 /etc/fstab文件,加类似如下一行;
<code>
/dev/sda6 swap swap defaults 0 0 注:把此行中的/dev/hda7 改为您的交换分区就行;
或者把命令行直接写入 /etc/rc.d/rc.local中也行;
swapon /dev/sda6
如果您的硬盘不能再分区,您可以创建一个swap文件
[root@localhost beinan]# dd if=/dev/zeroof=/tmp/swap bs=1024 count=524288 注:创建一个大小为512M 的swap 文件,在/tmp目录中;您可以根据自己的需要的大小来创建swap 文件;
读入了 524288+0 个块
输出了 524288+0 个块
[root@localhost beinan]# mkswap /tmp/swap 注:把/tmp/swap 文件,创建成swap 交换区
Setting up swapspace version 1, size =536866 kB
no label,UUID=d9d8645d-92cb-4d33-b36e-075bb0a2e278
[root@localhost beinan]# swapon/tmp/swap 注:挂载swap
[root@localhost beinan]# swapon -s
Filename Type Size Used Priority
/dev/hda7 partition 787144 888 -1
/tmp/swap file 524280 0 -2
注意:其实我们在安装系统的时候,就已经划分了交换分区;查看/etc/fstab,应该swap的行;如果您在安装系统时没有添加swap,可以通过这种办法来添加;
3.3 磁盘检验: fsck, badblocks
fsck(filesystem check)
功能说明:检查文件系统并尝试修复错误。
语法:fsck [-aANPrRsTV][-t <文件系统类型>][文件系统...]
补充说明:当文件系统发生错误四化,可用fsck指令尝试加以修复。
参数:
-a 自动修复文件系统,不询问任何问题。
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
-N 不执行指令,仅列出实际执行会进行的动作。
-P 当搭配"-A"参数使用时,则会同时检查所有的文件系统。
-r 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
-R 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查。
-s 依序执行检查作业,而非同时执行。
-t<文件系统类型> 指定要检查的文件系统类型。
-T 执行fsck指令时,不显示标题信息。
-V 显示指令执行过程。
badblocks
功能说明:检查磁盘装置中损坏的区块。
语法:badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]
补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
参数:
-b<区块大小> 指定磁盘的区块大小,单位为字节。
-o<输出文件> 将检查的结果写入指定的输出文件。
-s 在检查时显示进度。
-v 执行时显示详细的信息。
-w 在检查时,执行写入测试。
[磁盘装置] 指定要检查的磁盘装置。
[磁盘区块数] 指定磁盘装置的区块总数。
[启始区块] 指定要从哪个区块开始检查。
3.4 磁盘挂载与卸除: mount, unmount
mount:
mount [-t vfstype] [-o options] device dir
其中:
-t vfstype 指定文件系统的类型,通常不必指定。mount会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
device 要挂接(mount)的设备。
dir设备在系统上的挂接点(mountpoint)。
1). 挂接光盘镜像文件
a、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
b、将文件和目录制作成光盘镜像文件,执行下面的命令
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
c、光盘镜像文件的挂接(mount)
#mkdir /mnt/vcdrom
注:建立一个目录用来作挂接点(mount point)
#mount -o loop -t iso9660/home/sunky/mydisk.iso /mnt/vcdrom
注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了
2) .挂接移动硬盘
对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l
或 more/proc/partitions查看系统的硬盘和硬盘分区情况。
#mount -t ntfs /dev/sdc1/mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。
若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
#mount -t ntfs -o iocharset=cp936 /dev/sdc1/mnt/usbhd1
#mount -t vfat -o iocharset=cp936 /dev/sdc5/mnt/usbhd2
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特
有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
#mount /dev/sdc1 /mnt/usbhd1
开机就mount上windows下的分区自动将windows的d盘挂到/mnt/d上,用vi打开/etc/fstab,
加入以下一行:
/dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0
注意,先得手工建立一个/mnt/d目录
mount局域网上其他windows机器共享出的目录(bjchenxu)
mount -t smbfs -ousername=guest,password=guest //machine/path /mnt/cdrom
3).挂接U盘
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全
一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd(LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdd: 131 MB, 131072000 bytes
9 heads, 32 sectors/track, 888 cylinders
Units = cylinders of 288 * 512 = 147456bytes
Device Boot Start End Blocks Id System
/dev/sdd1 * 1 889 127983+ b Win95 FAT32
Partition 1 has different physical/logicalendings:
phys=(1000, 8, 32) logical=(888, 7, 31)
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
#mkdir -p /mnt/usb
注:建立一个目录用来作挂接点(mount point)
#mount -t vfat /dev/sdd1 /mnt/usb
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
#mount -t vfat -o iocharset=cp936 /dev/sdd1/mnt/usb
4).挂接Windows文件共享
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到www.samba.org网站下载......新的版本是3.0.10版。
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
# mkdir –p /mnt/samba
注:建立一个目录用来作挂接点(mount point)
# mount -t smbfs -o
username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码, c$是这台计算机的一个磁盘共享
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。
5).挂接UNIX系统NFS文件共享
类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。
在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。
a、Solaris系统NFS服务端配置方法如下:
(1)修改 /etc/dfs/dfstab, 增加共享目录
share -F nfs -o rw /export/home/sunky
(2)启动nfs服务
# /etc/init.d/nfs.server start
(3)NFS服务启动以后,也可以使用下面的命令增加新的共享
# share /export/home/sunky1
# share /export/home/sunky2
注:/export/home/sunky和/export/home/sunky1是准备共享的目录
b、linux系统NFS服务端配置方法如下:
(1)修改 /etc/exports,增加共享目录
/export/home/sunky 10.140.133.23(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、linux- client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机/etc/hosts文件里增加linux-client主机ip定义。格式如下:
10.140.133.23 linux-client
(2)启动与停止NFS服务
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start 启动NFS服务
/etc/rc.d/init.d/nfs stop 停止NFS服务
注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。
c、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享
# mkdir –p /mnt/nfs
注:建立一个目录用来作挂接点(mount point)
#mount -t nfs -o rw10.140.133.9:/export/home/sunky /mnt/nfs
注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。
Unmounts
# umount -h
Usage: umount [-hV]
umount -a [-f] [-r] [-n] [-v] [-t
vfstypes] [-O opts]
umount [-f] [-r] [-n] [-v] special |
node...
重要参数:
-a 删除fstab中所有的文件系统
-f 强制umount,主要针对不可达的NFS。
-l
懒惰模式,先删除文件系统层次。等文件系统不忙的时候清空所有连接。
实例:
# umount -l /mnt/hda5
来卸载设备。选项–l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令 ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。
3.5 磁盘参数修订:mknod、tune2fs、hdparm
1) mknod
功能: 用于建立特殊文件
原型: #mknod [options] 设备文件名{bcu} 主设备号次设备号
选项 [-m mode] [--mode=mode] [--help] [--version]
选项: -m,--mode mode 指定生成文件模式的选项。作为mode的包括chmod中使用的记号或数字形式
--help 显示帮助内容
--version 显示版本信息
说明: mknod命令用于建立FIFO、字符设备文件及块设备文件等。建立文件模式初值为0666。写入设备文件名后,指定该文件的特殊状态值。
在这里能够使用下列设置:
pFIFO文件
b 块设备文件
c或U 文件设备文件
建立块或字符特殊文件时,必须指定该设备文件的主设备号和次设备号。
件件
2) tune2fs
简介:
tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式。
用法:
tune2fs [ -l ] [ -c max-mount-counts ] [ -eerrors-behavior ] [ -f ] [ -i interval-between-checks ] [ -j ] [ -Jjournal-options ] [ -m
reserved-blocks-percentage ] [ -o[^]mount-options[,...] ] [ -r reserved-blocks-count ] [ -s sparse-super-flag ][ -u user ] [ -g
group ] [ -C mount-count ] [ -L volume-name] [ -M last-mounted-directory ] [ -O [^]feature[,...] ] [ -T time-last-checked] [ -U
UUID ] device
常用选项说明:
-l 查看文件系统信息
-c max-mount-counts 设置强制自检的挂载次数,如果开启,每挂载一次mount conut就会加1,超过次数就会强制自检
-i interval-between-checks[d|m|w] 设置强制自检的时间间隔[d天m月w周]
-m reserved-blocks-percentage 保留块的百分比
-j 将ext2文件系统转换为ext3类型的文件系统
-L volume-label 类似e2label的功能,可以修改文件系统的标签
-r reserved-blocks-count 调整系统保留空间
-o [^]mount-option[,...] Set or clear the indicateddefault mount options in the filesystem. 设置或清除默认挂载的文件系统选项
例子:
tune2fs -c 30 /dev/hda1 设置强制检查前文件系统可以挂载的次数
tune2fs -c -l /dev/hda1 关闭强制检查挂载次数限制。
tune2fs -i 10 /dev/hda1 10天后检查
tune2fs -i 1d /dev/hda1 1天后检查
tune2fs -i 3w /dev/hda1 3周后检查
tune2fs -i 6m /dev/hda1 半年后检查
tune2fs -i 0 /dev/hda1 禁用时间检查
tune2fs -j /dev/hda1 添加日志功能,将ext2转换成ext3文件系统
tune2fs -r 40000 /dev/hda1 调整/dev/hda1分区的保留空间为40000个磁盘块
tune2fs -o acl,user_xattr /dev/hda1 设置/dev/hda1挂载选项,启用PosixAccess Control Lists和用户指定的扩展属性
开机取消自检:
tune2fs -l /dev/sdb1 | grep -E ‘Maximummount count:|Check interval’
tune2fs -i 0 -c 0 /dev/sdb1
3) hdparm
注意:/sbin/hdparm命令不支持SATA硬盘
从网上搜索相关发现有hdparm命令可以用,用法如下:
#hdparm -i /dev/hda 查看硬盘的物理参数和支持的工作模式
#hdparm -v /dev/hda 查看当前硬盘的工作模式
#hdparm -Tt /dev/hda 测试一下优化前和优化后的硬盘读写速率
那就接着根据网上搜到的命令用hdparm命令来把它调好:
#hdparm -d1 -c3 -X66 -m16 -q /dev/hda
选项说明:
① c3 :就是把硬盘的16位格式转换为32位模式(32-bit mode w/sync)。控制数据如何从pci总线传递到控制器。
② m16 :改变硬盘的多路扇区的读功能,-m16可以使得硬盘在一次i/o中断中读入16个扇区的数据。但是不是所有的硬盘都支持这个功能。使用hdparm -i /dev/hda 可以察看您的硬盘最大能读写的扇区数目。
③ d1:打开DMA模式。
④ x66 :在支持UDMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。X34 在支持DMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。支持 ATA33 可以加上 -X66 这个参数,ATA66则是 -X68,-X69是mode 5(ATA100), -X68是mode 4(ATA66)可用于光驱。
⑤ u1 :Linux在处理磁盘中断时,可以unmask其他的中断或者响应其他中断相关的任务。
加上-q参数,因为man里面说的,这样可以开机即是DMA模式,不用手动设定
3.6 设定开机挂载
开机挂载 /etc/fstab 及 /etc/mtab
在开始说明前,这里要先跟大家说一说系统挂载的一些限制:
根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
其它 mount point 必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
所有 mount point 在同一时间之内﹐只能挂载一次。
所有 partition 在同一时间之内﹐只能挂载一次。
如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。
[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 等等。
第四栏:文件系统参数:
参数 | 内容意义 |
async/sync | 设定磁盘是否以异步方式运作!预设为 async(效能较佳) |
auto/noauto | 当下达 mount -a 时,此文件系统是否会被主动测试挂载。预设为 auto。 |
rw/ro | 让该分割槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用户随意变更的, 这里也能够设定为只读。则不论在此文件系统的档案是否设定 w 权限,都无法写入喔! |
exec/noexec | 限制在此文件系统内是否可以进行『执行』的工作?如果是纯粹用来储存资料的, 那么可以设定为 noexec 会比较安全,相对的,会比较麻烦! |
user/nouser | 是否允许用户使用 mount 指令来挂载呢?一般而言,我们当然不希望一般身份的user 能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰! |
suid/nosuid | 该文件系统是否允许 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 检验扇区:
开机的过程中,系统默认会以 fsck 检验我们的 filesystem 是否完整 (clean)。不过,某些 filesystem 是不需要检验的,例如内存置换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。所以,在这个字段中,我们可以设定是否要以 fsck 检验该 filesystem 喔。 0 是不要检验, 1 表示最早检验(一般只有根目录会设定为 1), 2 也是要检验,不过 1 会比较早被检验啦!一般来说,根目录设定为 1 ,其他的要检验的 filesystem 都设定为 2 就好了。
例题:
假设我们要将 /dev/hdc6 每次开机都自动挂载到 /mnt/hdc6 ,该如何进行?
答:
首先,请用 nano 将底下这一行写入 /etc/fstab 当中;
[root@www ~]# nano /etc/fstab
/dev/hdc6 /mnt/hdc6 ext3 defaults 1 2
再来看看 /dev/hdc6 是否已经挂载,如果挂载了,请务必卸除再说!
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
3.7 特殊装置loop挂载
在Linux中,有一种特殊的块设备叫loopdevice,这种loop device设备是通过影射操作系统上的正常的文件而形成的虚拟块设备。因为这种设备的存在,就为我们提供了一种创建一个存在于其他文件中的虚拟文件系统的机制。
loop设备是为了把某个文件虚拟成一个磁盘介质设备的一个虚拟设备么?关联之后对loop可以格式化,实际就是对那个文件进行某种操作,能够让这个文件像磁盘一样被mount,并且使用。
第一步:create a file with 'dd' command:
dd if=/dev/zero of=FS_on_file bs=1kcount=10000
这样就在当前目录下创建了一个10Mb的文件"FS_on_file"
第二步:使用losetup命令创建一个loop device
losetup /dev/loop0 FS_on_file
第三步:创建一个文件系统
mkfs -t ext3 /dev/loop0
第四步:挂载这个文件系统
(the mount point '/mnt/FS_file0' has beencreated before by 'mkdir'):
mount /dev/loop0 /mnt/FS_file0
最后:如果要删除刚才创建的这些对象,依次执行如下步骤:
$ umount /dev/loop0
$ losetup -d /dev/loop0
$ rm FS_on_file
特殊装置 loop 挂载 (映象档不刻录就挂载使用)
[root@www ~]# ll -h/root/centos5.2_x86_64.iso
-rw-r--r-- 1 root root 4.3G Oct 27 17:34/root/centos5.2_x86_64.iso
# 看到上面的结果吧!这个档案就是映象档,档案非常的大吧!
[root@www ~]# mkdir /mnt/centos_dvd
[root@www ~]# mount -o loop/root/centos5.2_x86_64.iso /mnt/centos_dvd
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/root/centos5.2_x86_64.iso
4493152 4493152 0 100% /mnt/centos_dvd
# 就是这个项目! .iso 映象文件内的所有数据可以在/mnt/centos_dvd 看到!
[root@www ~]# ll /mnt/centos_dvd
total 584
drwxr-xr-x 2 root root 522240 Jun 24 00:57CentOS <==瞧!就是DVD的内容啊!
-rw-r--r-- 8 root root 212 Nov 21 2007 EULA
-rw-r--r-- 8 root root 18009 Nov 21 2007 GPL
drwxr-xr-x 4 root root 2048 Jun 24 00:57 images
.....底下省略.....
[root@www ~]# umount /mnt/centos_dvd/
# 测试完成!记得将数据给他卸除!
建立大档案以制作 loop装置档案!
•建立大型档案
首先,我们得先有一个大的档案吧!怎么建立这个大档案呢?在 Linux 底下我们有一支很好用的程序 dd !他可以用来建立空的档案喔! 假设我要建立一个空的档案在/home/loopdev ,那可以这样做:
[root@www ~]# dd if=/dev/zeroof=/home/loopdev bs=1M count=512
512+0 records in <==读入 512 笔资料
512+0 records out <==输出 512 笔数据
536870912 bytes (537 MB) copied, 12.3484seconds, 43.5 MB/s
# 这个指令的简单意义如下:
# if 是 input file ,输入档案。那个/dev/zero 是会一直输出 0 的装置!
# of 是 output file ,将一堆零写入到后面接的档案中。
# bs 是每个 block 大小,就像文件系统那样的block 意义;
# count 则是总共几个 bs 的意思。
[root@www ~]# ll -h /home/loopdev
-rw-r--r-- 1 root root 512M Oct 28 02:29/home/loopdev
dd 就好像在迭砖块一样,将 512 块,每块 1MB 的砖块堆栈成为一个大档案(/home/loopdev) !最终就会出现一个 512MB 的档案!粉简单吧!
•格式化
很简单就建立起一个 512MB 的档案了吶!接下来当然是格式化啰!
[root@www ~]# mkfs -t ext3 /home/loopdev
mke2fs 1.39 (29-May-2006)
/home/loopdev is not a block specialdevice.
Proceed anyway? (y,n) y <==由于不是正常的装置,所以这里会提示你!
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the superuser
.....以下省略.....
• 挂载
那要如何挂载啊?利用 mount 的特殊参数,那个 -o loop 的参数来处理!
[root@www ~]# mount -o loop /home/loopdev/media/cdrom/
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/home/loopdev 507748 18768 462766 4% /media/cdrom
透过这个简单的方法,感觉上你就可以在原本的分割槽在不更动原有的环境下制作出你想要的分割槽就是了!这东西很好用的!尤其是想要玩 Linux 上面的『虚拟主机』的话,也就是以一部 Linux 主机再切割成为数个独立的主机系统时,类似 VMware 这类的软件,在 Linux 上使用 xen 这个软件,他就可以配合这种 loop device 的文件类型来进行根目录的挂载,真的非常有用的喔!
losetup:设定与控制loop devices
名称
losetup - 设定与控制loop devices
语法
losetup [-e encryption][-o offset]loop_device file losetup [-d] loop_device
描述
losetup 用来将loop device与文件或blockdevice联结,分离,以及查询loop device
目前的状况,如只给定loop_device的参数,则给出loop device目前的状况。
选项
-d
将某个文件或设备与loop设备分离
-e encryption
启动资料编码,下列为可用的选项参数:
NONE
不编码(定义值)。
XOR
使用简易的XOR编码
DES
使用DES编码,DES编码需要在kernel上加上DES编码功能。DES编码是利用
起始值作为密码保护来防止他人用字典攻击法进行破解。
-o offset
资料打开时平移几个byte来与文件或设备联结。
文件
/dev/loop0, /dev/loop1, /dev/loop2........(major=7)
例子
如核心使用模块,需先使用下列命令将模块加入。
#insmod loop.o
下列是使用loop装置的简单例子。
dd if="/dev/zero"of="/file" bs="1k" count="100" losetup -e des/dev/loop0 /file
Password:
Init(up to 16 hex digits):
mkfs -t ext2 /dev/loop0 100
mount -t ext2 /dev/loop0 /mnt
...
umount /dev/loop0
losetup -d /dev/loop0
核心使用模块,需利用下列命令卸载模块。
#rmmod loop
3.8 内存置换空间(swap)之建置
swap 的功能就是在应付物理内存不足的情况下所造成的内存延伸记录的功能。
使用实体分割槽建置swap
建立 swap 分割槽的方式也是非常的简单的!透过底下几个步骤就搞定啰:
1). 分割:先使用 fdisk 在你的磁盘中分割中一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 预设会将分 割槽的 ID 设定为Linux 的文件系统,所以你可能还得要设定一下 system ID 就是了。
2). 格式化:利用建立 swap格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
3). 使用:最后将该 swap 装置启动,方法为:『swapon装置文件名』。
4). 观察:最终透过 free 这个指令来观察一下内存的用量吧!
1).先进行分割的行为啰!
[root@www ~]# fdisk /dev/hdc
Command (m for help): n
First cylinder (2303-5005, default2303): <==这里按[enter]
Using default value 2303
Last cylinder or +size or +sizeM or +sizeK(2303-5005, default 5005): +256M
Command (m for help): p
Device Boot Start End Blocks Id System
.....中间省略.....
/dev/hdc6 2053 2302 2008093+ 83 Linux
/dev/hdc7 2303 2334 257008+ 83 Linux <==新增的项目
Command (m for help): t <==修改系统 ID
Partition number (1-7): 7 <==从上结果看到的,七号partition
Hex code (type L to list codes): 82 <==改成 swap 的 ID
Changed system type of partition 7 to 82(Linux swap / Solaris)
Command (m for help): p
Device Boot Start End Blocks Id System
.....中间省略.....
/dev/hdc6 2053 2302 2008093+ 83 Linux
/dev/hdc7 2303 2334 257008+ 82 Linux swap / Solaris
Command (m for help): w
# 此时就将 partition table 更新了!
[root@www ~]# partprobe
# 这个玩意儿很重要的啦!不要忘记让核心更新partition table 喔!
2). 开始建置 swap 格式
[root@www ~]# mkswap /dev/hdc7
Setting up swapspace version 1, size =263172 kB <==非常快速!
3). 开始观察与加载看看吧!
[root@www ~]# free
total used free shared buffers cached
Mem: 742664 684592 58072 0 43820 497144
-/+ buffers/cache: 143628 599036
Swap: 1020088 96 1019992
# 我有 742664K 的物理内存,使用684592K 剩余 58072K ,使用掉的内存有
# 43820K / 497144K 用在缓冲/快取的用途中。
# 至于 swap 已经存在了 1020088K啰!这样会看了吧?!
[root@www ~]# swapon /dev/hdc7
[root@www ~]# free
total used free shared buffers cached
Mem: 742664 684712 57952 0 43872 497180
-/+ buffers/cache: 143660 599004
Swap: 1277088 96 1276992 <==有增加啰!看到否?
[root@www ~]# swapon -s
Filename Type Size Used Priority
/dev/hdc5 partition 1020088 96 -1
/dev/hdc7 partition 257000 0 -2
# 上面列出目前使用的 swap 装置有哪些的意思!
使用档案建置swap
1). 使用 dd 这个指令来新增一个128MB 的档案在 /tmp 底下:
[root@www ~]# dd if=/dev/zero of=/tmp/swapbs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 1.7066seconds, 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 就是了!