您的位置:首页 > 运维架构 > Linux

《鸟哥Linux私房菜》学习笔记_chap10_磁盘 文件系统管理

2010-12-28 17:32 281 查看
◆1.回顾认识硬盘,以及partition(另见NG_Linux6_练习机上装Fedora.txt):

☞ 扇区 ( sector ) - 最小的物理组成单位,一般为512byte - 0.5KB

☞ 块 ( block ) - 最小储存单位,sector 的 2 的次方倍数最小的物理组成单位

ps:block不是越大越好,要根据实际的文件零碎情况确定

superblock:superblock之于partition 等同于 0磁道之于硬盘

☞ 磁道 ( track) - 当磁头固定不动 (假设机械手臂不动) ,硬盘盘转一圈所画出来的圆就是所谓的磁道

☞ 磁柱 ( cylinder ) - 所有硬盘盘上面相同半径的那一个磁道就组成磁柱

☞ 分区( partition,既是指动作,又是指动作的结果 )

- 动作:以指定“起始、结束磁柱”的方式将硬盘划分为若干区域。

- 结果:划分出来的区域就是(partition)

ps:这些分割的信息就是记录在MBR里

☞ 每个partition都对应着一种文件系统

◆2.Linux 的 EXT2 档案系统( inode ):

☞ ext2 档案系统当中,我们将每个档案分为【属性】、【内容】两个部分来储存

- 属性 -> inode(还是pointer to the block in which the file's content is recorded)

- 内容 -> block中

当 partition 被格式化为 ext2 的档案系统时,他一定会有 inode table 与 block area 这两个区域。

o inode【大小 128 bytes】 中的具体内容:

- 该档案的拥有者与群组(owner/group);

- 该档案的存取模式(read/write/excute);

- 该档案的类型(type);

- 该档案的相关时间:

ctime 建立或状态改变的时间

atime 最近一次的读取时间

mtime 最近修改的时间(ls预设的显示时间)

- 该档案的容量(size);

- 定义档案特性的旗标(flag),如 SetUID...;

- 该档案真正内容的指向 (pointer);

ps:可以利用 ls 的相关功能来查询到时间!而预设的显示时间是 mtime

ls -la --time=atime PATH

◆3.Linux 系统如何读取一个档案的内容?

☞ 目录:

当我们在 Linux 下的 ext2 档案系统建立一个目录时, ext2 会分配一个 inode 与至少一块 Block 给该目录。其中

,inode 记录该目录的相关属性,并指向分配到的那块 Block ;而 Block 则是记录在这个目录下的相关连的档案(或目录)

的关连性!

☞ 档案:

当我们在 Linux 下的 ext2 建立一个一般档案时, ext2 会分配至少一个 inode 与相对于该档案大小的 Block 数量

给该档案。例如:假设我的一个 Block 为 4 Kbytes ,而我要建立一个 100 KBytes 的档案,那么 linux 将分配一个

inode 与 25 个 Block 来储存该档案!

ps:inode 本身并不纪录文件名,而是记录档案的相关属性,至于文件名则是记录在目录所属的 block 区域

☞ 档案与目录的关系:

档案的相关连结会记录在目录的 block 数据区域, 所以当我们要读取一个档案的内容时,我们的 Linux 会先由根目

录 / 取得该档案的上层目录所在 inode , 再由该目录所记录的档案关连性 (在该目录所属的 block 区域) 取得该档案的

inode , 最后在经由 inode 内提供的 block 指向,而取得最终的档案内容

☞ 个人感觉:

o 目录在block区的内容就是Map<String, inode号>



文件名

[root@linux ~]# ls -lia /

2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 .

2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 ..

719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 etc

523265 drwxr-xr-x 24 root root 4096 Jun 25 20:16 var

↑ ↑

inode号 文件名

o 根据路劲搜索文件时,inode - block - inode - block ... - inode - block ... - inode - block

◆补充:something confusing...

[root@linux ~]# ls -lid / /home

2 drwxr-xr-x 26 root root 4096 7月 21 09:08 /

2 drwxr-xr-x 42 root root 4096 7月 14 23:37 /home

??????????????怎么 / 与 /home 的 inode number 都是 2 ?

answer:原因很简单啊!因为 / 是 /dev/hda1 而 /home 是 /dev/hda2 ,这两个 partition 都有 inode number 为 2

的号码。

◆4.ext2 有几个特色:

- Blocks 与 inodes 在一开始格式化时 (format) 就已经固定了;

- 一个 partition 能够容纳的档案数与 inode 有关;

- 一般来说,每 4Kbytes 的硬盘空间分配一个 inode ;

- 一个 inode 的大小为 128 bytes;

- Block 为固定大小,目前支持 1024/2048/4096 bytes(1k/2k/4k) 等;

- Block 越大,则损耗的硬盘空间也越多。

- 关于单一档案: 若 block size=1024,最大容量为 16GB,若 block size=4096,容量最大为 2TB;

- 关于整个 partition : 若 block size=1024,则容量达 2TB,若 block size=4096,则容量达 32TB。

- 文件名最长达 255 字符,完整文件名长达 4096 字符。

◆5.inode数量问题:

☞ 通常 inode 数量的多寡设定为 (partition 的容量) 除以 (一个 inode 预计想要控制的容量)。 举例来说,若我的

block 规划为 4Kbytes,假设我的一个 inode 会控制两个 block ,亦即是假设我的一个档案大致的容量在 8Kbytes 左右

时,假设我的这个 partition 容量为 1GBytes, 则 inode 数量共有:( 1G * 1024M/G * 1024K/M ) / ( 8K ) = 131072

个。而一个 inode 占用 128 bytes 的空间,因此格式化时就会有 ( 131072个 * 128bytes/个 ) = 16777216 byes =

16384 Kbytes 的 inode table 。也就是说,这一个 1GB 的 partition 在还没有储存任何数据前, 就已经少了 16MBytes

的容量

☞ 当 block 大小越小,而 inode 数量越多,则可利用的空间越多,但是大档案写入的效率较差; 这种情况适合档案数

量多,但是档案容量小的系统,例如 BBS 或者是新闻群组( News )这方面服务的系统;

☞ 当 Block 大小越大,而 inode 数量越少时,大档案写入的效率较佳,但是可能浪费的硬盘空间较多; 这种状况则比

较适合档案容量较大的系统!

◆6.EXT2 fs物理结构

☞ 物理结构划分

superblock

group description ┐

block bitmap │

inode bitmap ├ Block Group1

inode table │

data blocks ┘

Block Group2

...

Block GroupN

o SuperBlock:如前所述, Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个

filesystem 了。他记录的信息主要有:

- block 与 inode 的总量;

- 未使用与已使用的 inode / block 数量;

- 一个 block 与一个 inode 的大小;

- filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等档案系统的相关信息;

- 一个 valid bit 数值,若此档案系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

o Group Description:纪录此 block 由何处开始记录;

o Block bitmap:此处记录那个 block 有没有被使用;

o Inode bitmap:此处记录那个 inode 有没有被使用;

o Inode table:为每个 inode 数据存放区;

o Data Blocks:为每个 block 数据存放区。

☞ 查看这些信息

sudo dumpe2fs /dev/hda1

◆7.日志式档案系统

☞ 产生原因

在 EXT2 档案系统当中,要进行档案的写入时,会将数据分别在数据存放区与 metadata 区记录下来, 若当这两个动

作无法一次完成时,就会造成所谓的不一致现象。若发生不一致现象, 因为系统不知道是那个档案发生不一致现象,所以

就会将整个 filesystem 做一致性的检查,如此一来,很费时。

☞ 在 filesystem 当中,规划出一个区块,专门来记录写入或修订档案时的步骤,也就是说:

1. 当系统要写入一个档案的时候,会先在日志记录区块中纪录:某个档案准备要写入磁盘了;

2. 开始写入档案的权限与数据;

3. 开始更新 metadata 的数据;

4. 完成数据与 metadata 的更新后,在日志记录区块当中完成该档案的纪录。

◆8.挂载点的意义 (mount point):

☞ 基本概念:

- 档案系统 (filesystem) 通过『挂载 (mount)』才能被Linux使用

- 目录可以记录文件名与 inode 的相关信息,此外, 目录也是让我们得以跟 filesystem 产生对应的入口点。因此,我

们称那个入口点目录为『 挂载点 (mount point) 』

ps:挂载点一定是『目录』而不是档案!也就是说,这个挂载点就是进入该 filesystem 的入口

◆9.其它 Linux 支持的档案系统

☞ 常见的支持档案系统有:

- 传统档案系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;

- 日志式档案系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS

- 网络档案系统: NFS / SMBFS

☞ 查看:

- 想要知道您的 Linux 支持的档案系统有哪些,可以察看底下这个目录:

[root@linux ~]# ls -l /lib/modules/`uname -r`/kernel/fs

- 查看系统目前已启用的档案系统:

[root@linux ~]# cat /proc/filesystems

◆10.磁盘与目录的容量:

☞ df

[root@linux ~]# df [-ahikHTm] [目录或文件名]

o 参数:

* -a :列出所有的档案系统,包括系统特有的 /proc 等档案系统;

ps :使用 -a 这个参数时,系统会出现 /proc 这个扇区,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是

Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的, 所以当然没有占任何的硬盘空间啰!

-k :以 KBytes 的容量显示各档案系统;

-m :以 MBytes 的容量显示各档案系统;

* -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;

-H :以 M=1000K 取代 M=1024K 的进位方式;

* -T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;

* -i :不用硬盘容量,而以 inode 的数量来显示

df -h /etc 在 df 后面加上目录或者是档案时, df会自动的分析该目录或档案所在的 partition ,并将该

partition 的容量显示出来,

o 结果说明:

- Filesystem:代表该档案系统是在那个 partition 啊,所以列出装置名称;

- 1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;

- Used:顾名思义,就是使用掉的硬盘空间啦!

- Available:也就是剩下的磁盘空间大小;

- Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔!

(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)

- Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)

☞ du

[root@linux ~]# du [-ahskm] 档案或目录名称

o 参数:

-a :列出所有的【档案与】目录容量,因为预设仅统计目录底下的档案量而已。

-h :以人们较易读的容量格式 (G/M) 显示;

-s :列出总量而已,而不列出每个各别的目录占用容量;

-k :以 KBytes 列出容量显示;

-m :以 MBytes 列出容量显示;

ex:du -sm /etc/*

◆11.连接档

连结档有点类似 Windows 底下的『快捷方式』!也就是很多的连结档案( link file )其实都指向同一个来源档案(

source file )!不过,在所有的档案类型当中, 连结档算是比较难理解的一部份了!因为连结档还分成 Hard link 与

symbolic link 两种,这两种连结档在架构上是完全不一样的。

☞ Hard Link (硬式连结或实际连结)

o Hard Link 【只是在某个目录下新增一个该档案的关连数据】而已!

o 一般来说,使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变! 由上面的说明来看,我们可

以知道, hard link 只是在某个目录下的 【block】 多写入一个关连数据,所以当然不会用掉 inode 与磁盘空间啰!

o 由于 hard link 是在同一个 partition 上面进行数据关连的建立,所以 hard link 是有限制的:

- 不能跨 Filesystem;

- 不能 link 目录。【没看懂,为啥不是直接指到目录的inode?】

*注意 以 hard link 进行『档案的连结』时,可以发现,在 ls -l 所显示的第二字段会增加一

☞ Symbolic link (符号连结,亦即是快捷方式)

基本上, Symbolic link 就是在建立一个独立的档案, 而这个档案会让数据的读取指向他 link 的那个档案内容!由

于只是利用档案来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的档案会『开不了』, 会一直说『无法

开启某档案!』

与 Windows 的快捷方式可以划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode

与 block

◆12.关于目录的 link 数量:

o 当我们建立一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:

- /tmp/testing <- 该目录

- /tmp/testing/. <- 该目录

- /tmp/testing/.. <- 上级目录

* so:当我们建立一个新的目录时,『新的目录的 link 数为 2 ,而上层目录的 link 数则会增加 1 』

◆13.磁盘的分割、格式化、检验与挂载:

如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢?有几个动作啰:

- 1. 对磁盘进行分割,以建立可用的 partition ;

- 2. 对该 partition 进行格式化( format ),以建立系统可用的 filesystem;

- 3. 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验;

- 4. 在 Linux 系统上,需要建立挂载点 ( 亦即是目录 ),并将他挂载上来;

☞ 磁盘分割:fdisk

fdisk -l /dev/sda

fdisk其实就是在编辑分区表『 partition table 』

m p(相当于在外边fdisk -l) n d w q

“+100M”

在 fdisk 完成之后,请记得使用 mke2fs 格式化

以 root 的身份进行硬盘的 partition 时,最好是在单人维护模式底下比较安全一些, 此外,在进行 fdisk 的时候

,如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重新加载硬盘的 partition table ,解决的

方法就是将该使用中的 partition 给他卸载,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成

功啰!

☞ 磁盘格式化:mke2fs

[root@linux ~]# mke2fs [-bicLj] 装置名称

o 参数:

-b :可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;

-i :多少容量给予一个 inode 呢?

-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;

如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~

-L :后面可以接表头名称 (Label),这个 label 是有用的喔!后面会讲~

-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3

o 范例:

1.将刚刚建立的 /dev/hdb5 格式化成为 ext3 !且名称为 logical

[root@linux ~]# mke2fs -j -L "logical" /dev/hdb5

o 其他格式?

see:mkfs

☞ 制作一个可以开机进入 Linux 的软盘:mkbootdisk

[root@linux ~]# mkbootdisk --device /dev/fd0 `uname -r`



目前 Linux 系统所使用的核心版本

低阶格式化1.44软盘:mke2fs 指令

fdformat /dev/fd0H1440

☞ 磁盘检验: fsck(有点像是 Windows 的 scandisk)

[root@linux ~]# fsck [-AtCary] 装置名称

* fsck, “成果”放在『 lost+found 』,只有挂载 partition 的目录 (就是挂载点) 才会有这个预设的目录

** 执行 fsck 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸载的状态

o 参数:

-t :fsck 可以检查好几种不同的 filesystem ,而 fsck 只是一支综合程序而已。个别的 filesystem 的检验程序都

在 /sbin 底下,您可以使用 ls -l /sbin/fsck* 去检查看看,就知道有几种 filesystem 啰。预设的 FC4 情况下,至少

有:

ext2, ext3, vfat, msdos 等等 filesystem。

-A :依据 /etc/fstab 的内容,将所有的装置都扫瞄一次 (通常开机过程中就会执行此一指令)

-a :自动修复检查到的有问题的扇区,所以你不用一直按 y 啰!

-r :一定要让使用者决定是否需要修复,这与上一个 -a 刚好相反!

-y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数,所以您也可以利用 -y 啦!

-C :可以在检验的过程当中,使用一个长条图来显示目前的进度!

-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查的,如果您想要强制

fsck 进入细部检查,就得加上 -f 旗标啰!

☞ 磁盘检验:badblocks

badblocks -[svw] 装置名称

* 跟 Windows 的 scandisk 相同功能啦!不过由于 fsck 的功能比较强,所以目前大多已经不使用这个指令了)

o 参数:

-s :在屏幕上列出进度

-v :可以在屏幕上看到进度

-w :使用写入的方式来测试,建议不要使用此一参数,尤其是待检查的装置已有档案时!

o 范例:

[root@linux ~]# badblocks -sv /dev/hdb5

Checking blocks 0 to 722893

Checking for bad blocks (read-only test): done

☞ sync 直接将系统暂存在内存当中的数据回存写入磁盘当中

◆14.磁盘挂载与卸载:

要将建立起来的磁盘档案系统或软盘正式的在 Linux 上面启用时,一定需要将他挂载上档案系统! 而所谓的『挂载点

』则是该 partition 所在的目录,且在该目录下的所有目录都归在该 partition 所有。

* 如果您要用来挂载的目录里面并不是空的,那么挂载了档案系统之后, 那么原目录下的东西就会【暂时的消失】

* 在 Linux 或 Unix 系统之下,分区是以目录来代表,也就是说, 一个目录很可能就是一个分区了! 举个例子来说,

通常 Linux 预设的软盘挂载的地点在 /mnt/floppy 这里!那么如果你需要软盘的数据时,就将 /dev/fd0 这一个装置(前

面提过啰!这个是周边存取装置的一个设备档案类型)挂上 /mnt/floppy 就可以啦!然后你进入到 /mnt/floppy 就可以读

取软盘的数据啰

o 例子:

假设: / 为 /dev/hda1

/home 为 /dev/hda2

则:那么在 /home/test 底下的咚咚就也都归 /dev/hda2 这个 partition 所有

☞ mount

[root@linux ~]# mount -a

[root@linux ~]# mount [-tonL] 装置名称代号 挂载点

o 参数:

-a :依照 /etc/fstab 的内容将所有相关的磁盘都挂上来!

-n :一般来说,当我们挂载档案系统到 Linux 上头时, Linux 会主动的将目前的 partition 与 filesystem 还有对

应的挂载点,都记录到 /etc/mtab 那个档案中。不过,有些时刻 (例如不正常关机导致一些问题,而进入单人模式)系统无

法写入 /etc/mtab 时,就可以加上 -n 这个参数来略过写入 mtab 的动作。

-L :系统除了利用装置名称代号 (例如 /dev/hda1) 之外,还可以利用 partition的表头名称 ( Label ) 来进行挂载

-t :您的 Linux 支持的档案格式。举例来说,我们在上面建立 /dev/hdb5 是 ext3 档案系统,那么要挂载时,就得

要加上 -t ext3来告知系统,用 ext3 的档案格式来挂载该 partition 呢!

系统支持的 filesystem 类型在 /lib/modules/`uname -r`/kernel/fs 当中。常见的有:

• ext2, ext3, reiserfs, 等 Linux 惯用 filesystem

• vfat, msdos 等 Windows 常见 filesystem

• iso9660 为光盘片的格式

• nfs, smbfs 等为网络相关档案系统。

若 mount 后面没有加 -t 档案系统格式时,则 Linux 在预设的情况下,会主动以 /etc/filesystems 这个档案内规

范的档案系统格式

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

• ro, rw: 此 partition 为只读(ro) 或可擦写(rw)

• async, sync: 此 partition 为同步写入 (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 让 user 执行 mount ?一般来说,mount 仅有 root 可以进行,但下达

user 参数,则可让一般 user 也能够对此 partition 进行 mount 。

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

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

o 范例:

- 范例一:将刚刚建立的 /dev/hdb5 挂载到 /mnt/hdb5 上面!

[root@linux ~]# mkdir /mnt/hdb5

[root@linux ~]# mount -t ext3 /dev/hdb5 /mnt/hdb5

[root@linux ~]# df

- 范例二:挂载光盘!

[root@linux ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom

[root@linux ~]# mount /dev/cdrom

# 上面的参数当中提到,如果没有加上 -t 这个参数时,系统会主动的以

# /etc/filesystems 里面规范的内容给他测试一下是否挂载~另外,

# 因为我们的 /etc/fstab 里面会规范 /dev/cdrom 应该挂载到那个挂载点,

# 因此,直接下达 mount /dev/cdrom 也是可以的喔!(当然要看/etc/fstab设定啦!)

- 范例三:挂载 Window fat 软盘、磁盘!

[root@linux ~]# mount -t vfat /dev/fd0 /mnt/floppy

[root@linux ~]# mkdir /mnt/win98

[root@linux ~]# mount -t vfat /dev/hda1 /mnt/win98

[root@linux ~]# mount -t vfat -o iocharset=cp950 /dev/hda1 /mnt/win98



设置编码

- 范例四:将 / 重新挂载,并加入参数为 rw !

[root@linux ~]# mount -o remount,rw /

- 范例五:将 Label 名为 logical 的 partition 挂载到 /mnt/hdb5 中

[root@linux ~]# mount -t ext3 -L logical /mnt/hdb5

- 范例六:将系统所有的以挂载的 partition 数据列出来

[root@linux ~]# mount

/dev/hda1 on / type ext3 (rw)

/dev/proc on /proc type proc (rw)

/dev/shm on /dev/shm type tmpfs (rw)

/dev/hda5 on /home type ext3 (rw)

/dev/hdb5 on /mnt/hdb5 type ext3 (rw)

o 我们也可以利用 mount 来将某个目录挂载到另外一个目录

- 范例一:将 /home 这个目录暂时挂载到 /tmp/home 底下:

[root@linux ~]# mkdir /tmp/home

[root@linux ~]# mount --bind /home /tmp/home

[root@linux ~]# ls -lid /home/ /tmp/home

159841 drwxr-xr-x 6 root root 4096 May 30 20:07 /home/

159841 drwxr-xr-x 6 root root 4096 May 30 20:07 /tmp/home

- 范例二:将 /tmp/home 卸载:

[root@linux ~]# umount /tmp/home

* 其实两者连结到同一个 inode

??????? 为什么这不是硬链接的概念???

☞ unmount(将装置档案卸载)

[root@linux ~]# umount 装置代号或挂载点

o 范例:

[root@linux ~]# umount /dev/hdb5(装置代号)

[root@linux ~]# umount /mnt/hdb5(挂载点)

◆15.磁盘参数修订:

☞ mknod

在 Linux 底下所有的装置都以档案来代表,however,个档案如何代表该装置呢?

[root@linux ~]# mknod 装置名称 [bcp] [Major] [Minor]

o 参数:

- 装置种类:

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

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

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

- Major :主要装置代码;

- Minor :次要装置代码;

o 范例:

范例一:建立 /dev/hda10 这个磁盘储存装置

[root@linux ~]# mknod /dev/hda10 b 3 10



# 上面那个 3 与 10 是有意义的,不要随意设定!更多与 Linux 核心有关的装置及装置代号可以参考:

http://www.kernel.org/pub/linux/docs/device-list/devices.txt
☞ e2label,修改『磁盘的表头数据』,也就是 label

[root@linux ~]# e2label 装置名称 新的Label名称

o 范例:

[root@linux ~]# e2label /dev/hdb5 hdb5

[root@linux ~]# dumpe2fs -h /dev/hdb5

Filesystem volume name: hdb5

.....其它省略.....

ps:除了利用磁盘的代号之外 (/dev/hdxx) 也可以直接利用磁盘的 label 来挂

/etc/fstab

☞ tune2fs

[root@linux ~]# tune2fs [-jlL] 装置代号

o 参数:

-j :将 ext2 的 filesystem 转换为 ext3 的档案系统;

-l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~

-L :类似 e2label 的功能,可以修改 filesystem 的 Label 喔!

o 范例:

[root@linux ~]# tune2fs -l /dev/hdb5

☞ hdparm 启动 DMA 模式,以及测试硬盘的存取效能等等...(其他选项不要轻易改)

o 范例:测试这颗硬盘的读取效能

[root@linux ~]# hdparm -Tt /dev/hda

/dev/hda:

Timing cached reads: 544 MB in 2.01 seconds = 270.28 MB/sec

Timing buffered disk reads: 80 MB in 3.01 seconds = 26.56 MB/sec

◆16.设定开机挂载

/etc/fstab 及 /etc/mtab

系统挂载的一些限制:

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

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

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

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

• 如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录) 之外。

☞ /etc/fstab

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

# Device Mount point filesystem parameters dump fsck

LABEL=/ / ext3 defaults 1 1

/dev/hda5 /home ext3 defaults 1 2

/dev/hda3 swap swap defaults 0 0

/dev/hdc /media/cdrom auto pamconsole,exec,noauto,managed 0 0

/dev/devpts /dev/pts devpts gid=5,mode=620 0 0

/dev/shm /dev/shm tmpfs defaults 0 0

/dev/proc /proc proc defaults 0 0

/dev/sys /sys sysfs defaults 0 0

其实这个 /etc/fstab 就是将我们使用 mount 来挂载一个装置到系统的某个挂载点, 所需要下达的指令内容,除了

『装置代号、挂载点、档案系统类别、参数』等等,还加入了两项额外的功能,分别是备份指令 dump 的执行与否,以及是

否开机进行 fsck 扫瞄磁盘

o 栏位说明

1.磁盘装置代号或该装置的 Label

使用Label挂载时,格式为:LABEL=(your label name) 来设定您的装置

2.挂载点 (mount point)

3.磁盘分割槽的档案系统 (fs)

4.档案系统参数:每个档案系统还有很多参数可以加入的,例如中文编码的 iocharset=big5,codepage=950 之类

• async/sync 异步/同步

是否允许磁盘与内存中的数据以同步写入的动作?使用 async 这个异步写入的方式会比较快速一些。

• auto/noauto 自动/非自动

在开机的时候是否自动挂载该扇区?既然设定在这个区域内了, 当然希望开机的时候自动挂载啰!

• rw/ro 可擦写/只读

让该扇区以可擦写或者是只读的型态挂载上来,ro适用于 vfat 之类的非 Linux 传统扇区。

• exec/noexec 可执行/不可执行

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

较安全,相对的,会比较麻烦!

• user/nouser 是否允许使用者使用 mount 指令来挂载呢?一般而言,我们当然允许/不允许使用者挂载不希望一般

身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰!

• suid/nosuid 具有/不具有 suid 权限

该档案系统是否允许 SUID 的存在?一般而言,如果不是 Linux 系统的扇区,而是一般数据的 partition ,那么

设定为 nosuid 确实比较安全一些!毕竟有 SUID 是蛮可怕的一件事。

• usrquota

注意名称是『 usrquota 』不要拼错了!这个是在启动 filesystem 支持磁盘配额模式

• grpquota

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

• defaults

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

5. 能否被 dump 备份指令作用: 在 Linux 当中,可以利用 dump 这个指令来进行系统的备份的。而 dump 指令则会

针对 /etc/fstab 的设定值,去选择是否要将该 partition 进行备份的动作呢! 0 代表不要做 dump 备份, 1 代表要进

行 dump 的动作。 2 也代表要做 dump 备份动作, 不过,该 partition 重要度比 1 小。

6. 是否以 fsck 检验扇区: 开机的过程中,系统预设会以 fsck 检验我们的 partition 内的 filesystem 是否完整

(clean)。 不过,某些 filesystem 是不需要检验的,例如虚拟内存 swap ,或者是特殊档案系统, 例如 /proc 与 /sys

等等。所以,在这个字段中,我们可以设定是否要以 fsck 检验该 filesystem 喔。 0 是不要检验, 1 是要检验, 2 也

是要检验,不过 1 会比较早被检验啦! 一般来说,根目录设定为 1 ,其它的要检验的 filesystem 都设定为 2 就好了。

o /etc/fstab 是开机时的设定档,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个档案当

中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个档案喔!但是,万一发生您在 /etc/fstab 输入的数据

错误,导致无法顺利开机成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然您就无法修改

/etc/fstab ,也无法更新 /etc/mtab 啰~那怎么办? 没关系,可以利用底下这一招:

[root@linux ~]# mount -n -o remount,rw /

加上 -n 则不更新 /etc/mtab ,加上 -o 则提供额外的参数设定。 利用这一动作,嘿嘿!您的 / 就可以读写,那么

自然就能够更新档案内容啰~

◆17.特殊装置 loop 挂载

☞ 虚拟装置的建立和挂载

1.建立大型档案

[root@linux ~]# dd if=/dev/zero of=/tmp/loopdev bs=1024k count=2048

2048+0 records in

2048+0 records out

2.格式化

[root@linux ~]# mke2fs -j /tmp/loopdev

3.挂载

[root@linux ~]# mount -t ext3 -o loop /tmp/loopdev /media/cdrom/

[root@linux ~]# df

☞ swap 的扩增

swap 主要的功能是当物理内存不够时,则某些在内存当中所占的程序会暂时被移动到 swap 当中,让物理内存可以被

需要的程序来使用。另外,如果您的主机支持电源管理模式, 也就是说,您的 Linux 主机系统可以进入『休眠』模式的话

,那么, 运作当中的程序状态泽会被纪录到 swap 去,以作为『唤醒』主机的状态依据!。 另外,有某些程序在运作时,

本来就会利用 swap 的特性来存放一些数据段

swap 的建立其实也很简单。建立出 swap 这个【装置】【或】者是【档案】后, 将他格式化成为 swap 的格式,最后

将他挂载到系统上即可

o 装置

1. 以『 fdisk /dev/hd[a-d] 』先建立一个 partition,然后,将该 partition 的 ID 改为 82 这一个 swap 的磁盘

档案格式代号

2. 以『 mkswap /dev/hd[a-d][1-16] 』的方式来将您刚刚建置出来的 partition 『格式化为 swap 的档案格式』

3. 以『 swapon /dev/hd[a-d][1-16] 』将 swap 启动

ps:关掉是用swap off

o 档案

1. 以 dd 指令来建立 swapfile ;

2. 以 mkswap 来将 swapfile 格式化为 swap 的档案格式;

3. 以 swapon 来启动该档案,使成为 swap ;

4. 以 swapoff 来关闭该档案!

- ex:面新增 64MB 的虚拟内存

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

[root@linux ~]# 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. 使用 mkswap 将 /tmp/swap 这个档案格式化为 swap 的档案格式:

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

Setting up swapspace version 1, size = 67096576 bytes

# 请注意,这个指令在下达的时候请『特别小心』,因为下错字元控制,

# 将可能使您的 filesystem 挂掉!

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

[root@linux ~]# free

total used free shared buffers cached

Mem: 62524 60200 2324 0 716 19492

-/+ buffers/cache: 39992 22532

Swap: 127004 2620 124384

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

# 如果您需要每次都启动该档案,那么将 swapon /tmp/swap 写入 /etc/rc.d/rc.local 当中即可!

[root@linux ~]# free

total used free shared buffers cached

Mem: 62524 60200 2324 0 716 19492

-/+ buffers/cache: 40024 22500

Swap: 192524 2620 189904

4. 使用 swapoff 关掉 swap file

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

o 限制

• 最多 32 个

• 总量最大为 64GB

ex:

• 如何增加一颗新的硬盘在你的 Linux 系统当中?请详述流程:

安装硬盘:关掉 Linux 主机电源,调整 Hard Disk 的 Jump (master 或 slave),串接在 IDE 的接口,请注意,留意你

增加的硬盘所串接的 IDE 接口为哪一个插槽,例如你插在 IDE2 的 Master ,则你的硬盘应为 hdc;此外,需要特别留意

的是,目前的机器中,如果是 ATA 66 以上的排线(那种很密的排线),那么 master 或者是 slave 在排在线的顺序是固

定的!底端的是 Mater 而中间的是 Slave ,这点请稍微注意呦! 新增硬件于BIOS:开启计算机后,按 del 键进入 BIOS

,选择 IDE Hard Disk Detector 字样的选项, 让BIOS去捉硬盘,然后再选择 Save and Exit;不过,较新的机器通常都

可以自动侦测了!但是, 如果你的机器是旧型的,那么还是手动来增加硬盘吧! Linux 系统侦测:如果你的 Linux 系统

有启动 kudzu 这个服务时,那么开机就会自动去侦测新的硬件装置! Fedora Core IV 预设是有开启这项服务的,除非你

关掉他了!OK,假设你有开启这项服务,那么开机进入 Linux 的时候,系统会告诉你有捉到一个新的硬件,你可以按

『configure』由系统直接安装即可; 格式化硬盘:以 root 的身份进入 Linux 后,执行以下两个程序:fdisk /dev/hd

[a-d] 与 mke2fs /dev/hd[a-d][1-16] 。 建立 mount point:假设我的这颗硬盘要挂在 /disk3 下面,那么就需要 :

mkdir /disk3 开机自动加载( mount ):再来则是以 vi 修改 /etc/fstab 档案,让每次开机把这个硬盘直接挂入系统中。

安装完成:你可以使用 mount -a 来将全部的装置重新挂载一遍,或者是重新开机就可以啦!

• 假设条件:我原先规划的 /home 只有 1GB ,但是目前的使用者日众,所以容量不足!我想要增加一棵 8GB 的旧硬盘,

要如何作?!

将硬盘加入 Linux 系统中:利用刚刚上一题的方式将你的硬盘加入到 Linux 系统中,亦即是使用 fdisk 与 mke2fs 建立

了 ext2 的档案格式的硬盘!好了,假设该硬盘的代号为 /dev/hdc1 好了! 挂载新硬盘:由于我需要将新旧扇区都挂上来

,这样才有办法将数据由旧硬盘移到新硬盘上面,OK! 我就建立一个暂存的目录,称为 /disk-tmp:

mkdir /disk-tmp mount -t ext2 /dev/hdc1 /disk-tmp

如此一来则 /disk-tmp 就是新挂上来那颗 8 GB 的硬盘啦! 移动数据:好了!现在开始将数据 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 底下将他解压缩!这样数据就复制到新挂上来的硬盘啦! 卸载旧的,挂上新的:好了,那么我们就开始来测试

一下吧!你可以这样做:

umount /home mount -t ext2 /dev/hdc1 /home

注意呦!如果你的 /home 底下原本就没有挂载扇区的话,那么你就可以直接将 /home 底下的数据都砍掉,然后在挂上新的

那颗硬盘就好了!而 home.tar.gz 这个档案就可以用作为备份之用! 开机执行:同样的,如果要设定成开机就挂上这颗新

的硬盘,那就修改 /etc/fstab 档案吧!

• 如果扇区 /dev/hda3 有问题,偏偏他是被挂载上的,请问我要如何修理此一扇区?

umount /dev/hda3 fsck /dev/hda3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: