鸟哥的Linux私房菜——第十章

 

  视频链接

  土豆网:http://www.tudou.com/programs/view/YI5fpob0Wwk

  B站(推荐):http://www.bilibili.com/video/av9806459/

 

  下面是本章的目录,要做到看到目录就想出知识点的地步才算真正了解~

1. 认识 EXT2 档案系统
1.1 硬盘物理组成                                                               (扇区,逻辑区块)
1.2 磁盘分割                           (4个主分区,扩展分区至多一个)
1.3 档案系统                                   (每个区都是一个格式,ext2或者ext3)
1.4 Linux 的 EXT2 档案系统(inode)       (inode存储属性,block存储信息,ls -i)
1.5 EXT2/EXT3 档案的存取与日志式档案系统的功能: dumpe2fs
1.6 Linux 档案系统的运作          (异步)
1.7 挂载点的意义 (mount point)    (挂载点是目录,不同的挂载点目录不一样)
1.8 其它 Linux 支持的档案系统   (ext3,SGI的xfs,windows的fat,)
2. 档案系统的简单操作:   (ls,剩余容量与总容量)
2.1 磁盘与目录的容量: df, du              (看磁盘容量用df -h,看当前目录容量用du -am)
2.2 连结档的介绍: ln             (ln不就是软连接和硬链接吗)
3. 磁盘的分割、格式化、检验与挂载          
3.1 磁盘分割: fdisk
3.2 磁盘格式化: mke2fs, mkbootdisk, fdformat    (mke2fs格式化ext2,mke2fs -j是ext3,mkbootdisk制作软盘开机片,fdformat进行软盘低阶格式化)
3.3 磁盘检验: fsck, badblocks, sync   (fsck下面介绍,badblocks -sv,sync把内存中的数据保存到磁盘)
3.4 磁盘挂载与卸载: mount, umount  ()
3.5 磁盘参数修订: mknod, e2label, tune2fs, hdparm
4. 设定开机挂载:  
4.1 各式磁盘挂载与中文编码挂载还有 USB 随身碟!
4.2 开机挂载 /etc/fstab 及 /etc/mtab
4.3 特殊装置 loop 挂载
5. 虚拟内存之建置:
5.1 建立虚拟内存装置  (swap  先fdisk,mkswap,swapon 关闭是swapff)
5.2 建立虚拟内存档案
5.3 虚拟内存的限制

 

 

 

  磁盘的构成

  

 

  由圆心向外划直线,则可将磁道再细分为一个一个的扇区( Sector ),这个扇区
就是硬盘盘上面的最小储存物理量了! 通常一个 sector 的大小约为 512 Bytes 。以上就是整个硬盘的
基本组件

 

  主要开机扇区(Master Boot Recorder,MBR):MBR 就是在一块硬盘的第
零轨上面,这也是计算机开机之后要去利用该硬盘时, 必须要读取的第一个区域!在这个区域内记录的就
是硬盘里面的所有分割信息, 以及开机的时候可以进行开机管理程序的写入的处所 .MBR有限制仅提供最多四个 partition 的记忆,这就是所谓的 Primary (P)与 Extended (E) 的 partition
最多只能有四个的原因了 

 

  partition分割完毕之后嘞,要格式化成操作系统认识的档案系统(Filesystem),Linux的就格式化为ext3或ext2,windows的就格式化为fat32,格式化完毕之后开始存储,但是secctor太小了只有512B,如果我想存储一个10M的文件那就要进行读取(I/O)20480次!效率是不是很低下?所以这里我们有了一个逻辑区块(Block),逻辑区块是sector的2的次方倍,所以Block可以是4kb(8个sector,2的3次方),这样我再存储10M的文件的时候只需要读取2560次,效率是不是大大提高了?

不过,Block 单位的规划并不是越大越好喔!怎么说呢?因为一个 Block 最多仅能容纳一个档案 (这里指
Linux 的 ext2 档案系统)!这有什么问题呢?举例来说好了,假如您的 Block 规划为 4 KBytes ,而您
有一个档案大小为 0.1 KBytes ,这个小档案将占用掉一个 Block 的空间,也就是说,该 Block 虽然可
以容纳 4 Kbytes 的容量,然而由于档案只占用了 0.1 Kbytes ,所以,实际上剩下的 3.9 KBytes 是不
能再被使用了,所以,在考虑 Block 的规划时,需要同时考虑到:
档案读取的效能
档案大小可能造成的硬盘空间浪费

 所以根据你的主机的存储情况来看,如果是存储小文件,那就Block小一点,如果是存储大文件,那就Block大一点

 

 Superblock:每个档案系统开始的那个Block,如果Superblock坏了那这个磁盘就改拜拜了

 

在 Linux 系统当中,每个档案不止有档案的内容数据,还包括档
案的种种属性,例如:所属群组、 所属使用者、能否执行、档案建立时间、档案特殊属性等等。由于 Linux
操作系统是一个多人多任务的环境,为了要保护每个使用者所拥有数据的隐密性, 所以具有多样化的档案
属性是在所难免的!在标准的 ext2 档案系统当中,我们将每个档案的内容分为两个部分来储存,一个是
档案的属性,另一个则是档案的内容。
为了应付这两个不同的咚咚,所以 ext2 规划出 inode 与 Block 来分别储存档案的属性( 放在 inode 当
中 )与档案的内容( 放置在 Block area 当中 )。当我们要将一个 partition 格式化( format )为 ext2
时,就必须要指定 inode 与 Block 的大小才行,也就是说,当 partition 被格式化为 ext2 的档案系统
时,他一定会有 inode table 与 block area 这两个区域。

 

该档案的拥有者与群组(owner/group);
该档案的存取模式(read/write/excute);
该档案的类型(type);
该档案建立或状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改的时间(mtime);
该档案的容量;
定义档案特性的旗标(flag),如 SetUID...;
该档案真正内容的指向 (pointer);

 

Linux 系统到底是如何读取一个档案的内容呢?底下我们
分别针对目录与档案来说明:

目录:
当我们在 Linux 下的 ext2 档案系统建立一个目录时, ext2 会分配一个 inode 与至少一块
Block 给该目录。其中,inode 记录该目录的相关属性,并指向分配到的那块 Block ;而 Block
则是记录在这个目录下的相关连的档案(或目录)的关连性!
档案:
当我们在 Linux 下的 ext2 建立一个一般档案时, ext2 会分配至少一个 inode 与相对于该档
案大小的 Block 数量给该档案。例如:假设我的一个 Block 为 4 Kbytes ,而我要建立一个 100
KBytes 的档案,那么 linux 将分配一个 inode 与 25 个 Block 来储存该档案!

 

 

要注意的是, inode 本身并不纪录文件名,而是记录档案的相关属性,至于文件名则是记录在目录所属的
block 区域! 那么档案与目录的关系又是如何呢?就如同上面的目录提到的,档案的相关连结会记录在目
录的 block 数据区域, 所以当我们要读取一个档案的内容时,我们的 Linux 会先由根目录 / 取得该档
案的上层目录所在 inode , 再由该目录所记录的档案关连性 (在该目录所属的 block 区域) 取得该档案
的 inode , 最后在经由 inode 内提供的 block 指向,而取得最终的档案内容。我们以 /etc/crontab 这
个档案的读取为例, 他的内容数据是这样取得的:

 

 

 关于 EXT2 档案系统,这里有几点小事情要提醒一下:
ext2 与 ext3 档案在建立时 (format) 就已经设定好固定的 inode 数与 block 数目了;
格式化 Linux 的 ext2 档案系统,可以使用 mke2fs 这个程序来执行!
ext2 允许的 block size 为 1024, 2048 及 4096 bytes;
一个 partition (filesystem) 所能容许的最大档案数,与 inode 的数量有关, 因为一个档案
至少要占用一个 inode 啊!
在目录底下的档案数如果太多而导致一个 Block 无法容纳的下所有的关连性数据时,Linux 会给
予该目录多一个 Block 来继续记录关连数据;
通常 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 的容量啊!
因为一个 inode 只能记录一个档案的属性,所以 inode 数量比 block 多是没有意义的! 举上
面的例子来说,我的 Block 规划为 4 Kbytes ,所以 1GB 大概就有 262144 个 4Kbytes 的
block ,如果一个 block 对应一个 inode 的话,那么当我的 inode 数量大于 262144 时,多的
inode 将没有任何用处,徒然浪费硬盘的空间而已!另外一层想法,如果我的档案容量都很大, 那
么一个档案占用一个 inode 以及数个 block ,当然 inode 数量就可以规划的少很多啦!
当 block 大小越小,而 inode 数量越多,则可利用的空间越多,但是大档案写入的效率较差; 这
种情况适合档案数量多,但是档案容量小的系统,例如 BBS 或者是新闻群组( News )这方面服务
的系统;
当 Block 大小越大,而 inode 数量越少时,大档案写入的效率较佳,但是可能浪费的硬盘空间
较多; 这种状况则比较适合档案容量较大的系统!

 

ext2 有几个特色:
Blocks inodes 在一开始格式化时 (format) 就已经固定了;
一个 partition 能够容纳的档案数与 inode 有关;
一般来说,每 4Kbytes 的硬盘空间分配一个 inode
一个 inode 的大小为 128 bytes
Block 为固定大小,目前支持 1024/2048/4096 bytes 等;
Block 越大,则损耗的硬盘空间也越多。
关于单一档案:
block size=1024,最大容量为 16GB,若 block size=4096,容量最大为 2TB
关于整个 partition
block size=1024,则容量达 2TB,若 block size=4096,则容量达 32TB
文件名最长达 255 字符,完整文件名长达 4096 字符。

 

 

 

  fdisk也要讲一下,fdisk磁盘分区

 

  mke2fs 格式化,默认格式化成ext2,加 -j格式化成ext3

  

 

 

mount 挂载命令

  

 

 umount卸载

 

 

绝对路径和相对路径

  

 

fsck磁盘检查

 

 badblocks

 

这是用来检查硬盘或软盘扇区有没有坏轨的指令!跟 Windows 的 scandisk 相同功能啦!不过由于 fsck
的功能比较强,所以目前大多已经不使用这个指令了!

 

 

 

 

posted @ 2017-04-13 11:08  蜀云泉  阅读(654)  评论(0编辑  收藏  举报