zoukankan      html  css  js  c++  java
  • 鸟哥的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
    的功能比较强,所以目前大多已经不使用这个指令了!

  • 相关阅读:
    开发入门
    Web开发的四个域
    JSP语法
    JSP入门
    变量的作用范围
    面向对象
    C#编译执行过程
    css3的渐变、背景、过渡、分页
    css3选择器总结
    css3基础选择器
  • 原文地址:https://www.cnblogs.com/yunquan/p/6679101.html
Copyright © 2011-2022 走看看